From 6fc3212b5a3a46c342fbc1f27d0d698fd57c02d8 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Fri, 3 Jan 2025 21:48:08 +0300 Subject: [PATCH 01/15] region test --- TODO.md | 2 +- src/magick/magick.cpp | 35 +++++++++++++++++ src/magick/magick.h | 2 + src/main.cpp | 4 +- src/skinElement.h | 15 ++++++++ src/winamp/winamp.cpp | 89 ++++++++++++++++++++++++++++++++++++++++++- src/winamp/winamp.h | 3 ++ 7 files changed, 145 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index bb6eb9f..fc800e4 100644 --- a/TODO.md +++ b/TODO.md @@ -65,7 +65,7 @@ - [x] walkman One settings in wampy settings - [x] simple clock skin - [ ] visualization from NW-WM1Z spectrum analyzer -- [ ] regions.txt (winamp) +- [ ] region.txt (winamp) - [ ] clickable lyrics icon (hagoromo) - [ ] eq button custom action - too small? - [ ] "restart wampy" button in settings - use case? diff --git a/src/magick/magick.cpp b/src/magick/magick.cpp index 59456de..7205555 100644 --- a/src/magick/magick.cpp +++ b/src/magick/magick.cpp @@ -1,5 +1,6 @@ #include "magick.h" #include "../util/util.h" +#include "MagickCore/draw.h" void MyMagick::InitMagick() { Magick::InitializeMagick(""); } @@ -68,6 +69,40 @@ void MyMagick::Crop(Magick::Image *image, Magick::RectangleInfo g) { } } +void MyMagick::Mask(Magick::Image *image, const std::vector<int> &pointlist) { + if (pointlist.size() % 2 != 0) { + DLOG("uneven point list\n"); + return; + } + + if (pointlist.empty()) { + return; + } + + Magick::CoordinateList coords{}; + Magick::Coordinate c; + for (int i = 0; i < pointlist.size(); i = i + 2) { + c.x((double)pointlist.at(i)); + c.y((double)pointlist.at(i + 1)); + coords.push_back(c); + } + + Magick::Image mask; + mask.size("275x116"); + mask.fillColor("#ffffff"); + mask.backgroundColor("#000000"); + mask.erase(); + mask.strokeWidth(0); + // mask.strokeColor("#ff0000"); + + auto d = Magick::DrawablePolygon(coords); + + mask.draw(d); + mask.write("bmp:/tmp/out.bmp"); + + image->composite(mask, "+0+0", MagickCore::MultiplyCompositeOp); +} + void MyMagick::FillRectangle(Magick::Image *image, Magick::RectangleInfo g, const Magick::Color &color) { image->fillColor(color); image->strokeWidth(0); diff --git a/src/magick/magick.h b/src/magick/magick.h index e5eb9d2..17c8c93 100644 --- a/src/magick/magick.h +++ b/src/magick/magick.h @@ -15,6 +15,8 @@ namespace MyMagick { void Crop(Magick::Image *image, Magick::RectangleInfo g); void FillRectangle(Magick::Image *image, Magick::RectangleInfo g, const Magick::Color &color); + + void Mask(Magick::Image *image, const std::vector<int> &pointlist); } // namespace MyMagick #endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 5db5cf5..02fcaa7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -435,9 +435,9 @@ int main(int, char **) { ImGui::Begin("1", nullptr, window_flags); -#ifndef DESKTOP + // #ifndef DESKTOP ImGui::GetBackgroundDrawList()->AddCallback(drawCallback, (void *)shaderProgram); -#endif + // #endif skin.Draw(); // DrawWindowRects(); diff --git a/src/skinElement.h b/src/skinElement.h index 6c0f74d..5cbf0e1 100644 --- a/src/skinElement.h +++ b/src/skinElement.h @@ -37,6 +37,7 @@ struct FlatTexture { FlatTexture() = default; + std::vector<int> pointList{}; Magick::RectangleInfo crop{}; Size upscaled{}; bool fillUpscaled = true; @@ -109,6 +110,14 @@ struct FlatTexture { MyMagick::Crop(image, crop); } + void Mask() const { + if (pointList.empty()) { + return; + } + + MyMagick::Mask(image, pointList); + } + void Upscale() { if (upscaled.width < 1) { upscaled.width = (unsigned int)((float)image->size().width() * ratio); @@ -134,6 +143,11 @@ struct FlatTexture { return this; } + FlatTexture *WithPointList(std::vector<int> l) { + this->pointList = std::move(l); + return this; + } + FlatTexture *WithFilledRectangle(Magick::RectangleInfo pos, const Magick::Color &c) { this->fillColor = c; this->fillPos = pos; @@ -169,6 +183,7 @@ struct FlatTexture { void load() { this->Crop(); + this->Mask(); this->Upscale(); this->fillRectangle(); this->LoadTexture(); diff --git a/src/winamp/winamp.cpp b/src/winamp/winamp.cpp index 0ce00de..56da632 100644 --- a/src/winamp/winamp.cpp +++ b/src/winamp/winamp.cpp @@ -54,6 +54,7 @@ namespace Winamp { "text.bmp", "volume.bmp", "viscolor.txt", + "region.txt", "balance.bmp", "pledit.bmp", "pledit.txt"}; @@ -179,6 +180,7 @@ namespace Winamp { } readPlEdit(); + readRegionTxt(); probeTrackTitleBackgroundColor(); @@ -248,7 +250,7 @@ namespace Winamp { // are all files present? for (auto const &k : *textures) { - if (k.first == "nums_ex.bmp" || k.first == "numbers.bmp" || k.first == "balance.bmp") { + if (k.first == "nums_ex.bmp" || k.first == "numbers.bmp" || k.first == "balance.bmp" || k.first == "region.txt") { continue; } @@ -286,6 +288,84 @@ namespace Winamp { textures.clear(); } + void Winamp::readRegionTxt() { + if (textures["pledit.txt"].len == 0) { + DLOG("region.txt missing\n"); + return; + } + + auto text = std::string(textures["region.txt"].data, textures["region.txt"].len); + + auto lines = split(text, "\n"); + if (lines.empty()) { + lines = split(text, "\r\n"); + } + + if (lines.empty()) { + DLOG("no lines in region.txt found\n"); + return; + } + + bool normalFound{}; + int numPoints{}; + + for (auto &line : lines) { + DLOG("line: %s\n", line.c_str()); + if (line.rfind("[Normal]", 0) == 0) { + normalFound = true; + continue; + } + + if (normalFound) { + while (line.find(" ") != std::string::npos) { + line.erase(line.find(" "), 1); + } + + if (line.find('\r') != std::string::npos) { + line.erase(line.find('\r'), 1); + } + + if (line.at(line.length() - 1) == ',') { + line.erase(line.length() - 1, 1); + } + + if (line.rfind("NumPoints", 0) == 0) { + auto parts = split(line, "="); + if (parts.size() < 2) { + DLOG("not enough values for numpoints: %s\n", line.c_str()); + return; + } + numPoints = std::atoi(parts[1].c_str()); + continue; + } + + if (numPoints > 0) { + if (line.rfind("PointList", 0) == 0) { + auto parts = split(line, "="); + if (parts.size() < 2) { + DLOG("not enough values in pointlist: %s\n", line.c_str()); + return; + } + + auto points = split(parts[1], ","); + for (const auto &point : points) { + auto v = std::atoi(point.c_str()); + pointList.push_back(v); + } + + break; + } + } + } + } + + DLOG("found %zu points\n", pointList.size()); + if (pointList.size() % 2 != 0) { + DLOG("uneven point count, ignoring\n"); + pointList.clear(); + } + } + void Winamp::readPlEdit() { auto text = std::string(textures["pledit.txt"].data, textures["pledit.txt"].len); colors.PlaylistNormalBG = ColorBlack; @@ -592,8 +672,12 @@ namespace Winamp { Elements.Main.FromPair(textures["main.bmp"]) ->WithCrop(Magick::RectangleInfo{275, 116, 0, 0}) ->WithFilledRectangle({770, 96, 323, 78}, colors.trackTitleBackground) + ->WithPointList(pointList) + ->Load(); + Elements.Title.FromPair(textures["titlebar.bmp"]) + ->WithCrop(Magick::RectangleInfo{275, 14, 27, 0}) + ->WithPointList(pointList) ->Load(); - Elements.Title.FromPair(textures["titlebar.bmp"])->WithCrop(Magick::RectangleInfo{275, 14, 27, 0})->Load(); Elements.ClutterBar.FromPair(textures["titlebar.bmp"]) ->WithCrop(Magick::RectangleInfo{8, 43, 304, 0}) ->WithPosition(ImVec2(29.0f, 64.0f)) @@ -1202,6 +1286,7 @@ namespace Winamp { void Winamp::Unload() { Elements.Unload(); childThreadsStop = true; + pointList.clear(); while (marqueeThreadRunning || updateThreadRunning) { // wait for threads to stop } diff --git a/src/winamp/winamp.h b/src/winamp/winamp.h index 63cdcea..b7395c1 100644 --- a/src/winamp/winamp.h +++ b/src/winamp/winamp.h @@ -225,6 +225,8 @@ namespace Winamp { std::string currentSkin{}; std::string newSkin{}; + std::vector<int> pointList{}; + int volumeTextureIsBalance(); void probeTrackTitleBackgroundColor(); @@ -236,6 +238,7 @@ namespace Winamp { void freeUnzippedTextures(); void readPlEdit(); + void readRegionTxt(); void drawPlaylist() const; From 1773c87d246c8552e218aeaa2952d348338b59a3 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sat, 4 Jan 2025 01:33:33 +0300 Subject: [PATCH 02/15] readme up, installer up --- README.md | 16 ++++++++-------- nw-installer | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a68bcb1..6151957 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,14 @@ See [USAGE.md](./USAGE.md). ## Device support -| Device | Status | Notes | -|-----------|--------|------------------------------------------------------------------| -| NW-A50 | ✅ | | -| NW-A30 | ? | help wanted [#1](https://github.com/unknown321/wampy/issues/1) | -| NW-A40 | ? | help wanted [#1](https://github.com/unknown321/wampy/issues/1) | -| NW-ZX300 | ? | help wanted [#12](https://github.com/unknown321/wampy/issues/12) | -| NW-WM1A/Z | ? | help wanted [#13](https://github.com/unknown321/wampy/issues/13) | -| DMP-Z1 | ? | help wanted | +| Device | Stock | Walkman One | Notes | +|-----------|-------|-------------|------------------------------------------------------------------| +| NW-A50 | ✅ | ✅ | | +| NW-A30 | ? | | help wanted [#1](https://github.com/unknown321/wampy/issues/1) | +| NW-A40 | ? | ✅ | help wanted [#1](https://github.com/unknown321/wampy/issues/1) | +| NW-ZX300 | ? | | help wanted [#12](https://github.com/unknown321/wampy/issues/12) | +| NW-WM1A/Z | ? | | help wanted [#13](https://github.com/unknown321/wampy/issues/13) | +| DMP-Z1 | ? | | help wanted | ## Install diff --git a/nw-installer b/nw-installer index 2e45d0f..be0e55e 160000 --- a/nw-installer +++ b/nw-installer @@ -1 +1 @@ -Subproject commit 2e45d0f052128056d61a3931f74d78bbf875b7e8 +Subproject commit be0e55ec02b5dcec6accff37673616d49686f7b3 From 19357c632d77977b2ec82dc9a0d6015c79e77490 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sat, 4 Jan 2025 02:23:37 +0300 Subject: [PATCH 03/15] log recovery fix --- src/util/util.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/util.cpp b/src/util/util.cpp index 870299a..f47ab64 100644 --- a/src/util/util.cpp +++ b/src/util/util.cpp @@ -336,7 +336,7 @@ void recoverDumps(const std::string &outdir) { if (stat(hdumpstatePath.c_str(), &sb) == 0) { mkpath(outdir.c_str(), 0755); out = outdir + "/hdumpstate......log" + t; - std::ifstream src(corePath, std::ios::binary); + std::ifstream src(hdumpstatePath, std::ios::binary); std::ofstream dst(out, std::ios::binary); dst << src.rdbuf(); From 4993f193c35f4b9bdc3c47291bb16133408cda8a Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sun, 5 Jan 2025 03:54:41 +0300 Subject: [PATCH 04/15] installer improvements --- .gitignore | 1 + Makefile | 30 ++++++++++++++++++++---------- installer/run.sh | 2 ++ nw-installer | 2 +- uninstaller/run.sh | 2 ++ 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 3de6eb0..1bfe025 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ release/ *.swp settings.txt ignoreme/ +product_info diff --git a/Makefile b/Makefile index 7a2ee85..2057770 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ ipod_theme/body/229441876_0064.png: digital_clock/yellow/0_big.jpg: ipod_theme/body/229441876_0064.png $(MAKE) -C digital_clock -nw-installer/installer/userdata.tar: LICENSE_3rdparty qr.bmp +nw-installer/installer/userdata.tar.gz: LICENSE_3rdparty qr.bmp $(MAKE) -C nw-installer prepare cp $(INSTALL)/bin/$(PRODUCT) installer/ bash -c "cp $(INSTALL)/lib/libMagick{++,Core,Wand}-7.Q8HDRI.so installer/" @@ -100,7 +100,9 @@ nw-installer/installer/userdata.tar: LICENSE_3rdparty qr.bmp cp LICENSE installer/ cp LICENSE_3rdparty installer/ cp qr.bmp installer/ - tar -C installer -cf nw-installer/installer/userdata.tar \ + echo -n "$(PRODUCT), version " > installer/product_info + grep VERSION src/Version.h | cut -f 3,4,5 -d " " | sed 's/"//g' >> installer/product_info + tar -C installer -cf nw-installer/installer/userdata.tar.gz \ init.wampy.rc \ run.sh \ libMagick++-7.Q8HDRI.so \ @@ -116,7 +118,8 @@ nw-installer/installer/userdata.tar: LICENSE_3rdparty qr.bmp LICENSE \ LICENSE_3rdparty \ qr.bmp \ - wampy || rm -f nw-installer/installer/userdata.tar + product_info \ + wampy || rm -f nw-installer/installer/userdata.tar.gz cat LICENSE LICENSE_3rdparty > nw-installer/installer/windows/LICENSE.txt.user server: @@ -125,29 +128,36 @@ server: uninstaller: $(MAKE) -C nw-installer prepare cat LICENSE LICENSE_3rdparty > nw-installer/installer/windows/LICENSE.txt.user - tar -C uninstaller -cf nw-installer/installer/userdata.tar \ + echo -n "$(PRODUCT), version " > uninstaller/product_info + grep VERSION src/Version.h | cut -f 3,4,5 -d " " | sed 's/"//g' >> uninstaller/product_info + tar -C uninstaller -cf nw-installer/installer/userdata.tar.gz \ + product_info \ run.sh release-clean: $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).exe APPNAME=$(PRODUCT) clean -rm -rf release -release: release-clean build-arm server cassetteunpacker/res digital_clock/yellow/0_big.jpg nw-installer/installer/userdata.tar +release: release-clean build-arm server cassetteunpacker/res digital_clock/yellow/0_big.jpg nw-installer/installer/userdata.tar.gz $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).exe APPNAME=$(PRODUCT) mkdir -p release/installer/ - cd nw-installer/installer/stock/ && tar -czvf stock.tar.gz NW_WM_FW.UPG + cd nw-installer/installer/nw-a50/ && tar -czvf nw-a50.tar.gz NW_WM_FW.UPG + cd nw-installer/installer/nw-a40/ && tar -czvf nw-a40.tar.gz NW_WM_FW.UPG cd nw-installer/installer/walkmanOne/ && tar -czvf walkmanOne.tar.gz NW_WM_FW.UPG mv nw-installer/installer/walkmanOne/walkmanOne.tar.gz release/installer - mv nw-installer/installer/stock/stock.tar.gz release/installer - mv nw-installer/installer/windows/${PRODUCT}.exe release/installer +# mv nw-installer/installer/nw-a40/nw-a40.tar.gz release/installer + mv nw-installer/installer/nw-a50/nw-a50.tar.gz release/installer + mv nw-installer/installer/windows/${PRODUCT}.exe release/installer/${PRODUCT}.$(shell date --iso).$(shell git log -1 --format=%h).exe $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).uninstaller.exe APPNAME=$(PRODUCT)-uninstaller clean $(MAKE) uninstaller $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).uninstaller.exe APPNAME=$(PRODUCT)-uninstaller build mkdir -p release/uninstaller - cd nw-installer/installer/stock/ && tar -czvf stock.uninstaller.tar.gz NW_WM_FW.UPG + cd nw-installer/installer/nw-a50/ && tar -czvf nw-a50.uninstaller.tar.gz NW_WM_FW.UPG + cd nw-installer/installer/nw-a40/ && tar -czvf nw-a40.uninstaller.tar.gz NW_WM_FW.UPG cd nw-installer/installer/walkmanOne/ && tar -czvf walkmanOne.uninstaller.tar.gz NW_WM_FW.UPG mv nw-installer/installer/walkmanOne/walkmanOne.uninstaller.tar.gz release/uninstaller - mv nw-installer/installer/stock/stock.uninstaller.tar.gz release/uninstaller + mv nw-installer/installer/nw-a50/nw-a50.uninstaller.tar.gz release/uninstaller +# mv nw-installer/installer/nw-a40/nw-a40.uninstaller.tar.gz release/uninstaller mv nw-installer/installer/windows/${PRODUCT}.uninstaller.exe release/uninstaller # see also: `perf record` && `perf report` diff --git a/installer/run.sh b/installer/run.sh index 8f4038e..012da8f 100644 --- a/installer/run.sh +++ b/installer/run.sh @@ -96,6 +96,8 @@ install() { cp qr.bmp ${VENDOR}/usr/share/${BINARY}/ } +log "installing $(cat product_info)" + mount -t ext4 -o rw /emmc@android /system install diff --git a/nw-installer b/nw-installer index be0e55e..ae81d99 160000 --- a/nw-installer +++ b/nw-installer @@ -1 +1 @@ -Subproject commit be0e55ec02b5dcec6accff37673616d49686f7b3 +Subproject commit ae81d994f3e8b738e76eddf94eebd1a8d441dcd7 diff --git a/uninstaller/run.sh b/uninstaller/run.sh index 68470b6..1081915 100644 --- a/uninstaller/run.sh +++ b/uninstaller/run.sh @@ -64,6 +64,8 @@ uninstall() { busybox rm -rf ${VENDOR}/usr/share/${BINARY}/ } +log "uninstaller for $(cat product_info)" + mount -t ext4 -o rw /emmc@android /system uninstall From 6fb5deae58f05ece279018005ce20804c6b3f37e Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sun, 5 Jan 2025 07:24:22 +0300 Subject: [PATCH 05/15] futile attempts to run on a40 stock --- CMakeLists.txt | 2 ++ kernel.md | 36 +++++++++++++++++++++++++++++++++--- src/main.cpp | 17 ++++++++++++----- 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 897314b..12d3046 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMAGICKCORE_QUANTUM_DEPTH=32") # exec; kill -10 <pid> #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-all") +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --verbose") add_compile_definitions(IMGUI_USER_CONFIG="../../src/imgui.config.h") diff --git a/kernel.md b/kernel.md index 87b3914..b9570a5 100644 --- a/kernel.md +++ b/kernel.md @@ -1,18 +1,48 @@ +Kernel versions: + +Stock: + +| model | version | +|--------|--------------------------------------------------------------------------------------------------------------| +| A50 | Linux version 3.10.26 (slave@azslave5q) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Wed Jul 31 16:22:50 JST 2019 | +| A40 | Linux version 3.10.26 (slave@azslave50) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Fri Oct 20 16:00:34 JST 2017 | +| A30 | Linux version 3.10.26 (slave@rairyu03) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Mon Mar 6 21:54:41 JST 2017 | +| ZX-300 | Linux version 3.10.26 (slave@azslave5h) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Wed Jul 31 16:24:44 JST 2019 | +| WM1A | Linux version 3.10.26 (slave@azslave6n) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Wed Jul 31 16:25:40 JST 2019 | + +Walkman One + +| model | version | +|--------|--------------------------------------------------------------------------------------------------------------| +| A50 | Linux version 3.10.26 (slave@azslave5q) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Wed Jul 31 16:22:50 JST 2019 | +| A40 | Linux version 3.10.26 (slave@azslave5h) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Wed Jul 31 16:24:44 JST 2019 | +| A30 | Linux version 3.10.26 (slave@azslave5h) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Wed Jul 31 16:24:44 JST 2019 | +| ZX-300 | Linux version 3.10.26 (slave@azslave5h) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Wed Jul 31 16:24:44 JST 2019 | +| WM1A | Linux version 3.10.26 (slave@azslave6n) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Wed Jul 31 16:25:40 JST 2019 | + +A40 and A30 use ZX-300 kernel. + +## compiling kernel + +``` cp /tmp/config .config cp -r arch/arm/mach-mt8590/bx8590m1_emmc/common/ arch/arm/mach-mt8590/BBDMP5_linux/ #drivers/misc/mediatek/lcm/mt65xx_lcm_list.c:18:28: fatal error: lcm_drv_mt8127.h: No such file or directory + # #include <lcm_drv_mt8127.h> sed -i 's/<lcm_drv_mt8127.h>/"lcm_drv_mt8127.h"/g' drivers/misc/mediatek/lcm/mt65xx_lcm_list.c # ld.bfd: read in flex scanner failed -sed -i 's#obj-y += imgsensor/src##g' drivers/misc/mediatek/Makefile -sed -i 's#obj-y += flashlight/src##g' drivers/misc/mediatek/Makefile + +sed -i 's#obj-y += imgsensor/src##g' drivers/misc/mediatek/Makefile +sed -i 's#obj-y += flashlight/src##g' drivers/misc/mediatek/Makefile #include/linux/ion_drv.h:19:17: fatal error: ion.h: No such file or directory - #include <ion.h> +#include <ion.h> sed -i 's#<ion.h>#"../../drivers/staging/android/ion/ion.h"#g' include/linux/ion_drv.h sed -i '2292s#!##' arch/arm/mach-mt8590/mt_clkmgr.c +``` \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 02fcaa7..c841c1d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -120,9 +120,10 @@ GLFWwindow *CreateWindow() { DLOG("glfw init failed\n"); return nullptr; } + // Decide GL+GLSL versions // const char *glsl_version = "#version 100"; - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); // OpenGL ES 2.0 is the minimal version with shader support glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API); glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API); @@ -135,6 +136,8 @@ GLFWwindow *CreateWindow() { GLFWmonitor *monitor = nullptr; #endif + DLOG("monitor is %p\n", monitor); + GLFWwindow *window = glfwCreateWindow(GLFW_WIDTH, GLFW_HEIGHT, title, monitor, nullptr); if (window == nullptr) { DLOG("failed to create window\n"); @@ -149,6 +152,14 @@ GLFWwindow *CreateWindow() { DLOG("glad failed\n"); return nullptr; } + DLOG("version: %d\n", version); + + const GLubyte *vendor = glGetString(GL_VENDOR); + const GLubyte *renderer = glGetString(GL_RENDERER); + const GLubyte *glVersion = glGetString(GL_VERSION); + const GLubyte *extensions = glGetString(GL_EXTENSIONS); + DLOG("renderer %s; vendor %s; version %s\n", renderer, vendor, glVersion); + DLOG("GL extensions: %s\n", extensions); return window; } @@ -309,10 +320,6 @@ int main(int, char **) { glDebugMessageCallback(GlMessageCallback, 0); } - const GLubyte *vendor = glGetString(GL_VENDOR); // Returns the vendor - const GLubyte *renderer = glGetString(GL_RENDERER); // Returns a hint to the model - DLOG("renderer %s; vendor %s\n", renderer, vendor); - // Setup Dear ImGui context IMGUI_CHECKVERSION(); ImGui::CreateContext(); From ac4941a3f1dc16f15ab4af2a1d742525999a06c7 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sun, 5 Jan 2025 07:35:05 +0300 Subject: [PATCH 06/15] readme up --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6151957..3f22f4f 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,14 @@ See [USAGE.md](./USAGE.md). ## Device support -| Device | Stock | Walkman One | Notes | -|-----------|-------|-------------|------------------------------------------------------------------| -| NW-A50 | ✅ | ✅ | | -| NW-A30 | ? | | help wanted [#1](https://github.com/unknown321/wampy/issues/1) | -| NW-A40 | ? | ✅ | help wanted [#1](https://github.com/unknown321/wampy/issues/1) | -| NW-ZX300 | ? | | help wanted [#12](https://github.com/unknown321/wampy/issues/12) | -| NW-WM1A/Z | ? | | help wanted [#13](https://github.com/unknown321/wampy/issues/13) | -| DMP-Z1 | ? | | help wanted | +| Device | Stock | Walkman One | Notes | +|-----------|-------|-------------|-----------------------------------------------------------------------------------| +| NW-A50 | ✅ | ✅ | | +| NW-A30 | ? | ? | help wanted for stock firmware [#1](https://github.com/unknown321/wampy/issues/1) | +| NW-A40 | ? | ✅ | help wanted for stock firmware [#1](https://github.com/unknown321/wampy/issues/1) | +| NW-ZX300 | ? | ? | help wanted [#12](https://github.com/unknown321/wampy/issues/12) | +| NW-WM1A/Z | ? | ? | help wanted [#13](https://github.com/unknown321/wampy/issues/13) | +| DMP-Z1 | ? | ? | help wanted | ## Install From b07ac2554de8c63a26b8bd8e8fdca1ac2165cfe8 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sun, 5 Jan 2025 07:37:45 +0300 Subject: [PATCH 07/15] ignore mali symlinks --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1bfe025..fee8d3b 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ release/ settings.txt ignoreme/ product_info +libMali* From 6c6e27819a9021a0562199d63e32e2b77473bdbc Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sun, 5 Jan 2025 08:27:10 +0300 Subject: [PATCH 08/15] disable A40/30 in installer --- Makefile | 4 ++-- nw-installer | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2057770..1db5334 100644 --- a/Makefile +++ b/Makefile @@ -139,7 +139,7 @@ release-clean: -rm -rf release release: release-clean build-arm server cassetteunpacker/res digital_clock/yellow/0_big.jpg nw-installer/installer/userdata.tar.gz - $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).exe APPNAME=$(PRODUCT) + $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).exe APPNAME=$(PRODUCT) A40=0 A30=0 mkdir -p release/installer/ cd nw-installer/installer/nw-a50/ && tar -czvf nw-a50.tar.gz NW_WM_FW.UPG cd nw-installer/installer/nw-a40/ && tar -czvf nw-a40.tar.gz NW_WM_FW.UPG @@ -150,7 +150,7 @@ release: release-clean build-arm server cassetteunpacker/res digital_clock/yello mv nw-installer/installer/windows/${PRODUCT}.exe release/installer/${PRODUCT}.$(shell date --iso).$(shell git log -1 --format=%h).exe $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).uninstaller.exe APPNAME=$(PRODUCT)-uninstaller clean $(MAKE) uninstaller - $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).uninstaller.exe APPNAME=$(PRODUCT)-uninstaller build + $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).uninstaller.exe APPNAME=$(PRODUCT)-uninstaller A40=0 A30=0 build mkdir -p release/uninstaller cd nw-installer/installer/nw-a50/ && tar -czvf nw-a50.uninstaller.tar.gz NW_WM_FW.UPG cd nw-installer/installer/nw-a40/ && tar -czvf nw-a40.uninstaller.tar.gz NW_WM_FW.UPG diff --git a/nw-installer b/nw-installer index ae81d99..20a96cb 160000 --- a/nw-installer +++ b/nw-installer @@ -1 +1 @@ -Subproject commit ae81d994f3e8b738e76eddf94eebd1a8d441dcd7 +Subproject commit 20a96cb4b15d51311d4fed2148243918f6c4740f From e614e646055fe3fe9abd91b47e876e405a6ad0ed Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:33:41 +0300 Subject: [PATCH 09/15] include uninstaller in installer --- Makefile | 40 +++++++++++++++++----------------------- nw-installer | 2 +- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 1db5334..ce06f47 100644 --- a/Makefile +++ b/Makefile @@ -125,12 +125,12 @@ nw-installer/installer/userdata.tar.gz: LICENSE_3rdparty qr.bmp server: $(MAKE) -C server -uninstaller: +nw-installer/installer/userdata.uninstaller.tar.gz: $(MAKE) -C nw-installer prepare cat LICENSE LICENSE_3rdparty > nw-installer/installer/windows/LICENSE.txt.user echo -n "$(PRODUCT), version " > uninstaller/product_info grep VERSION src/Version.h | cut -f 3,4,5 -d " " | sed 's/"//g' >> uninstaller/product_info - tar -C uninstaller -cf nw-installer/installer/userdata.tar.gz \ + tar -C uninstaller -cf nw-installer/installer/userdata.uninstaller.tar.gz \ product_info \ run.sh @@ -138,27 +138,21 @@ release-clean: $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).exe APPNAME=$(PRODUCT) clean -rm -rf release -release: release-clean build-arm server cassetteunpacker/res digital_clock/yellow/0_big.jpg nw-installer/installer/userdata.tar.gz - $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).exe APPNAME=$(PRODUCT) A40=0 A30=0 - mkdir -p release/installer/ - cd nw-installer/installer/nw-a50/ && tar -czvf nw-a50.tar.gz NW_WM_FW.UPG - cd nw-installer/installer/nw-a40/ && tar -czvf nw-a40.tar.gz NW_WM_FW.UPG - cd nw-installer/installer/walkmanOne/ && tar -czvf walkmanOne.tar.gz NW_WM_FW.UPG - mv nw-installer/installer/walkmanOne/walkmanOne.tar.gz release/installer -# mv nw-installer/installer/nw-a40/nw-a40.tar.gz release/installer - mv nw-installer/installer/nw-a50/nw-a50.tar.gz release/installer - mv nw-installer/installer/windows/${PRODUCT}.exe release/installer/${PRODUCT}.$(shell date --iso).$(shell git log -1 --format=%h).exe - $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).uninstaller.exe APPNAME=$(PRODUCT)-uninstaller clean - $(MAKE) uninstaller - $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).uninstaller.exe APPNAME=$(PRODUCT)-uninstaller A40=0 A30=0 build +release: release-clean build-arm server cassetteunpacker/res digital_clock/yellow/0_big.jpg nw-installer/installer/userdata.tar.gz nw-installer/installer/userdata.uninstaller.tar.gz + # first, build and move uninstaller upgs + $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).uninstaller.exe APPNAME=$(PRODUCT)-uninstaller A40=0 A30=0 USERDATA_FILENAME=userdata.uninstaller.tar.gz build mkdir -p release/uninstaller - cd nw-installer/installer/nw-a50/ && tar -czvf nw-a50.uninstaller.tar.gz NW_WM_FW.UPG - cd nw-installer/installer/nw-a40/ && tar -czvf nw-a40.uninstaller.tar.gz NW_WM_FW.UPG - cd nw-installer/installer/walkmanOne/ && tar -czvf walkmanOne.uninstaller.tar.gz NW_WM_FW.UPG - mv nw-installer/installer/walkmanOne/walkmanOne.uninstaller.tar.gz release/uninstaller - mv nw-installer/installer/nw-a50/nw-a50.uninstaller.tar.gz release/uninstaller -# mv nw-installer/installer/nw-a40/nw-a40.uninstaller.tar.gz release/uninstaller - mv nw-installer/installer/windows/${PRODUCT}.uninstaller.exe release/uninstaller + cd nw-installer/installer/nw-a50/ && tar -czvf ../../../release/uninstaller/nw-a50.uninstaller.tar.gz NW_WM_FW.UPG + cd nw-installer/installer/walkmanOne/ && tar -czvf ../../../release/uninstaller/walkmanOne.uninstaller.tar.gz NW_WM_FW.UPG + # second, build installer upgs + $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).exe APPNAME=$(PRODUCT) A40=0 A30=0 build + # next, build installer (with uninstaller included) + $(MAKE) -C nw-installer OUTFILE=$(PRODUCT).exe APPNAME=$(PRODUCT) A40=0 A30=0 win + # finally, move installer upg and exe files + mkdir -p release/installer/ + cd nw-installer/installer/nw-a50/ && tar -czvf ../../../release/installer/nw-a50.tar.gz NW_WM_FW.UPG + cd nw-installer/installer/walkmanOne/ && tar -czvf ../../../release/installer/walkmanOne.tar.gz NW_WM_FW.UPG + mv nw-installer/installer/windows/$(PRODUCT).exe release/installer/$(PRODUCT).$(shell date --iso).$(shell git log -1 --format=%h).exe # see also: `perf record` && `perf report` profile: @@ -207,4 +201,4 @@ qr.bmp: @convert qr.png -type palette qr.bmp @rm qr.png -.PHONY: build build-arm docker docker_digital_clock push profile profile-arm valgrind deps release release-clean LICENSE_3rdparty server uninstaller +.PHONY: build build-arm docker docker_digital_clock push profile profile-arm valgrind deps release release-clean LICENSE_3rdparty server diff --git a/nw-installer b/nw-installer index 20a96cb..699ba0c 160000 --- a/nw-installer +++ b/nw-installer @@ -1 +1 @@ -Subproject commit 20a96cb4b15d51311d4fed2148243918f6c4740f +Subproject commit 699ba0c874092c09726af00d6686c6731ad6025d From 3874fb2802ba5f65b85b184762e88be25bf082c1 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:50:25 +0300 Subject: [PATCH 10/15] NW-A40 stock upgrade notice --- README.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3f22f4f..826447e 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,17 @@ See [USAGE.md](./USAGE.md). ## Device support -| Device | Stock | Walkman One | Notes | -|-----------|-------|-------------|-----------------------------------------------------------------------------------| -| NW-A50 | ✅ | ✅ | | -| NW-A30 | ? | ? | help wanted for stock firmware [#1](https://github.com/unknown321/wampy/issues/1) | -| NW-A40 | ? | ✅ | help wanted for stock firmware [#1](https://github.com/unknown321/wampy/issues/1) | -| NW-ZX300 | ? | ? | help wanted [#12](https://github.com/unknown321/wampy/issues/12) | -| NW-WM1A/Z | ? | ? | help wanted [#13](https://github.com/unknown321/wampy/issues/13) | -| DMP-Z1 | ? | ? | help wanted | +| Device | Stock | Walkman One | Notes | +|-----------------|-------|-------------|-----------------------------------------------------------------------------------| +| NW-A50 | ✅ | ✅ | | +| NW-A40 | ? | ✅ | help wanted for stock firmware [#1](https://github.com/unknown321/wampy/issues/1) | +| └──[A50 mod][1] | ? | - | needs testing, use NW-A50 during installation | +| NW-A30 | ? | ? | help wanted for stock firmware [#1](https://github.com/unknown321/wampy/issues/1) | +| NW-ZX300 | ? | ? | help wanted [#12](https://github.com/unknown321/wampy/issues/12) | +| NW-WM1A/Z | ? | ? | help wanted [#13](https://github.com/unknown321/wampy/issues/13) | +| DMP-Z1 | ? | ? | help wanted | + +[1]: https://www.mrwalkman.com/p/nw-a40-stock-update.html ## Install From b38a2eaa36ce910817efad893cb212586f8f6a60 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Mon, 6 Jan 2025 18:57:34 +0300 Subject: [PATCH 11/15] better digital clock color selection behaviour --- src/digital_clock/digital_clock.cpp | 12 +++++++++++- src/digital_clock/digital_clock.h | 5 +++-- src/skin.h | 11 +++++++++-- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/digital_clock/digital_clock.cpp b/src/digital_clock/digital_clock.cpp index a7b31a4..65762d9 100644 --- a/src/digital_clock/digital_clock.cpp +++ b/src/digital_clock/digital_clock.cpp @@ -356,7 +356,7 @@ namespace DigitalClock { return 0; } - std::string DigitalClock::GetColorPreview() { + std::string DigitalClock::GetActiveColorPreview() { for (const auto &v : colorsDigitalClock) { if (v.second == color) { return v.first; @@ -365,4 +365,14 @@ namespace DigitalClock { return DefaultColorPreview; } + + std::string DigitalClock::GetColorPreview(const std::string &c) { + for (const auto &v : colorsDigitalClock) { + if (v.second == c) { + return v.first; + } + } + + return DefaultColorPreview; + } } // namespace DigitalClock \ No newline at end of file diff --git a/src/digital_clock/digital_clock.h b/src/digital_clock/digital_clock.h index 87bc1c9..a1afba5 100644 --- a/src/digital_clock/digital_clock.h +++ b/src/digital_clock/digital_clock.h @@ -17,7 +17,7 @@ namespace DigitalClock { struct Config { std::string color{}; - void Default() { color = "Silver"; }; + void Default() { color = "silver"; }; }; struct DigitalClockElements { @@ -75,7 +75,8 @@ namespace DigitalClock { void SetColor(std::string s) { newColor = std::move(s); }; - std::string GetColorPreview(); + std::string GetActiveColorPreview(); + static std::string GetColorPreview(const std::string &); DigitalClock() = default; diff --git a/src/skin.h b/src/skin.h index 2fc613b..e4ccc1e 100644 --- a/src/skin.h +++ b/src/skin.h @@ -829,12 +829,19 @@ struct Skin { void DigitalClock() { ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40.0f); ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, 40.0f); - if (ImGui::BeginCombo("##digiClockColor", digitalClock.GetColorPreview().c_str(), ImGuiComboFlags_HeightRegular)) { + if (ImGui::BeginCombo( + "##digiClockColor", digitalClock.GetColorPreview(config->digitalClock.color).c_str(), ImGuiComboFlags_HeightRegular + )) { for (const auto &entry : DigitalClock::colorsDigitalClock) { if (ImGui::Selectable(entry.first.c_str(), false)) { DLOG("selected color %s\n", entry.second.c_str()); digitalClock.SetColor(entry.second); - needLoad = true; + if (activeSkinVariant == DIGITAL_CLOCK) { + needLoad = true; + } else { + config->digitalClock.color = entry.second; + config->Save(); + } } } ImGui::EndCombo(); From bb23592502c4c0dba7f40e01b261e6f4109b29e5 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Mon, 6 Jan 2025 18:58:24 +0300 Subject: [PATCH 12/15] AddressSanitizer: global-buffer-overflow --- src/wstring.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/wstring.cpp b/src/wstring.cpp index 1d8f5fd..e88fb6f 100644 --- a/src/wstring.cpp +++ b/src/wstring.cpp @@ -1,9 +1,6 @@ #include "wstring.h" #include <cstring> -const wchar_t *emptyChar = reinterpret_cast<const wchar_t *>(""); -std::wstring emptyWchar = std::wstring(emptyChar); - static std::wstring stringShift(const std::wstring &s, std::vector<std::vector<int>> &shift, int len) { int val = 0; for (auto &i : shift) @@ -35,7 +32,7 @@ static std::wstring to_wide(const char *mbstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state); if (len == 0) { - return emptyWchar; + return (reinterpret_cast<const wchar_t *>("")); } std::vector<wchar_t> wstr(len); std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state); From db7f9f5ee85a278c2d9b5f3bb8ff814be7855818 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Mon, 6 Jan 2025 18:59:39 +0300 Subject: [PATCH 13/15] AddressSanitizer: dynamic-stack-buffer-overflow --- src/winamp/winamp.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/winamp/winamp.cpp b/src/winamp/winamp.cpp index 56da632..8a04437 100644 --- a/src/winamp/winamp.cpp +++ b/src/winamp/winamp.cpp @@ -1530,9 +1530,7 @@ namespace Winamp { i++; } - // std::pair<char *, size_t> data; char alphabetNum[] = "0123456789 -"; - size_t len = sizeof(alphabetNum) - 1; ImFontConfig font_cfg = ImFontConfig(); @@ -1547,10 +1545,10 @@ namespace Winamp { ImFont *fontNumber = io.Fonts->AddFontDefault(&font_cfg); int iNum = 0; - int rect_ids_num[len]; + int rect_ids_num[IM_ARRAYSIZE(alphabetNum) - 1]; int width = 26; int height = 37; - for (i = 0; i < IM_ARRAYSIZE(alphabetNum); i++) { + for (i = 0; i < IM_ARRAYSIZE(alphabetNum) - 1; i++) { char c = alphabetNum[i]; if (!isEx && i == (IM_ARRAYSIZE(alphabetNum) - 2)) { // last character, new minus width = 14; From 9a39b06de994e286286c07174587a5b8fd79d834 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Mon, 6 Jan 2025 20:36:14 +0300 Subject: [PATCH 14/15] digi clock return fix --- src/digital_clock/digital_clock.cpp | 2 + src/skinElement.h | 89 +++++++++++++++++++++++++---- 2 files changed, 80 insertions(+), 11 deletions(-) diff --git a/src/digital_clock/digital_clock.cpp b/src/digital_clock/digital_clock.cpp index 65762d9..b6db73b 100644 --- a/src/digital_clock/digital_clock.cpp +++ b/src/digital_clock/digital_clock.cpp @@ -222,6 +222,8 @@ namespace DigitalClock { v.detach(); loading = false; + + return 0; } void DigitalClock::formatTime() { diff --git a/src/skinElement.h b/src/skinElement.h index 5cbf0e1..3176280 100644 --- a/src/skinElement.h +++ b/src/skinElement.h @@ -53,7 +53,6 @@ struct FlatTexture { std::string magick = "BMP"; float ratio = upscaleRatioWalkman; - bool valid{}; FlatTexture *WithRatio(float r) { this->ratio = r; @@ -70,6 +69,78 @@ struct FlatTexture { return this; } + // used only for main window (for now), uses hardcoded dimensions and coords + void FromPointList(const std::vector<int> &pl) { + Magick::Geometry g = {800, 480, 0, 0}; + Magick::CoordinateList coords{}; + Magick::Coordinate c; + for (int i = 0; i < pl.size(); i = i + 2) { + c.x((double)pl.at(i)); + c.y((double)pl.at(i + 1)); + coords.push_back(c); + } + + if (coords.empty()) { + Reset(); + return; + } + + auto tmpimage = Magick::Image({275, 165}, "black"); + tmpimage.magick("RGBA"); + tmpimage.depth(8); + tmpimage.alpha(true); + + auto dask = Magick::Image({275, 165}, "black"); + dask.magick("RGBA"); + dask.strokeColor("black"); + dask.fillColor("white"); + dask.strokeAntiAlias(true); + dask.strokeWidth(-1); + auto d = Magick::DrawablePolygon(coords); + dask.draw(d); + dask.negate(); + + tmpimage.writeMask(dask); + tmpimage.composite(tmpimage, "+0+0", MagickCore::ClearCompositeOp); + + Magick::Geometry v = Magick::Geometry{800, 480, 0, 0}; + // MyMagick::Upscale(&tmpimage, (Magick::Geometry &)v, false); + + tmpimage.compressType(MagickCore::NoCompression); + tmpimage.filterType(MagickCore::PointFilter); + v.aspect(true); + v.fillArea(false); + tmpimage.resize(g); + + DLOG("%zu %zu\n", tmpimage.size().width(), tmpimage.size().height()); + // Upscale(); + auto dask2 = Magick::Image({tmpimage.size().width(), 480}, "black"); + dask2.magick("RGBA"); + dask2.strokeColor("black"); + dask2.fillColor("white"); + dask2.strokeAntiAlias(true); + dask2.strokeWidth(1); + auto r = Magick::DrawableRectangle({-3, -3, 800, 337}); + dask2.draw(r); + + tmpimage.writeMask(dask2); + tmpimage.composite(tmpimage, "+0+0", MagickCore::ClearCompositeOp); + + this->image = new Magick::Image(tmpimage.size(), "black"); + this->image->depth(8); + this->image->magick("RGBA"); + this->image->composite(tmpimage, "+0+0", MagickCore::CopyCompositeOp); + + DLOG("size %zu %zu\n", image->size().width(), image->size().height()); + this->LoadTexture(); + DLOG("tid %d\n", this->textureID); + this->upscaled.width = 800; + this->upscaled.height = 480; + this->position = ImVec2(0, 0); + this->image->erase(); + this->Release(); + } + Magick::Color GetColor(ssize_t x, ssize_t y) const { return image->pixelColor(x, y); } FlatTexture *FromData(char *data, size_t length) { @@ -110,14 +181,6 @@ struct FlatTexture { MyMagick::Crop(image, crop); } - void Mask() const { - if (pointList.empty()) { - return; - } - - MyMagick::Mask(image, pointList); - } - void Upscale() { if (upscaled.width < 1) { upscaled.width = (unsigned int)((float)image->size().width() * ratio); @@ -165,13 +228,18 @@ struct FlatTexture { return this; } - void Unload() const { UnloadTexture(textureID); } + void Unload() { + UnloadTexture(textureID); + textureID = 0; + } // breaks in thread void LoadTexture() { if (textureID != 0) { + DLOG("delete text\n"); glDeleteTextures(1, &textureID); } + Magick::Blob blob; this->image->write(&blob); bool ret = LoadTextureFromMagic( @@ -183,7 +251,6 @@ struct FlatTexture { void load() { this->Crop(); - this->Mask(); this->Upscale(); this->fillRectangle(); this->LoadTexture(); From 6948216d7cedca4eebc1e7557afbe64078b655d2 Mon Sep 17 00:00:00 2001 From: unknown321 <unknown321@users.noreply.github.com> Date: Mon, 6 Jan 2025 21:29:11 +0300 Subject: [PATCH 15/15] region improvements --- USAGE.md | 3 + images/settings-winamp.png | Bin 53507 -> 58316 bytes libs/ImageMagick | 2 +- src/config.cpp | 2 + src/main.cpp | 4 +- src/skin.h | 222 ++++++++++++++++++++----------------- src/skinElement.h | 73 ++++++------ src/winamp/winamp.cpp | 59 ++++++---- src/winamp/winamp.h | 2 + 9 files changed, 199 insertions(+), 168 deletions(-) diff --git a/USAGE.md b/USAGE.md index 22d3045..471da05 100644 --- a/USAGE.md +++ b/USAGE.md @@ -153,6 +153,8 @@ You can get skins from [Winamp Skin Museum](https://skins.webamp.org/). `Show clutterbar` displays vertical list of options to the left of track time/visualization. +`Skin transparency` enables skin transparency (`region.txt`). Background color is black. + #### Known issues and quirks Issues: @@ -166,6 +168,7 @@ Quirks: - Playlist is never full. Default player keeps up to 15 songs in memory, some of those have already been played, reducing playlist size further - Some elements may look slightly off (if you look hard enough) due to upscaling (800/275 = 2.90909...). +- Skin transparency is not pixel perfect (irrational upscaling ratio). - There might be small delay between clicking button and getting response (noticeable on shuffle button) Improvements (compared to Winamp v2.95): diff --git a/images/settings-winamp.png b/images/settings-winamp.png index e8d44f5abd411841613f4086682e639f0900e9f3..f748341e5491b5b270473b191690d65f3a8945c2 100644 GIT binary patch literal 58316 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�R6GR>((&KFOgLkpphzQ*PLEQ(K9lC&Q})xX_DnF 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 D@$L#j literal 53507 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�gEBWFBQDekA1PX;OA=7VF}t5a zp$yF-iU-rp7U|HM{*=@U!ts-AIH)`_g`rK<Uy8UA3DyXB!d_9=h1(U_ZT$+!YoRDX zCx-nvg!yFe2Auv0Qp;i8?N*;MgQ9C6^3LL-&Dy>F4&Z*UCdnHeFxHX0_{&1XvVih? zS=oUOKcd8k0u1(NdQx3N)hZh{KqYoCmu~mfA(P0~niGM{?qlZW&cVC=P{XwbJOr(s zl;0MD%E4x|?f9j{Y(ZYD(oqIwXD8>@yVa;#_$Tt_8^RTocz<`c86)Q87=N7<TW)|s z#b}FguJk4)a9hsQflW?Z7vbl3YFyHd)#c?JKxoF}OXp>MnXBf}LV5G$7Z#nlf9P`b zAzrPtQeG3~ftv8@l>X{Q*LkQeVM-LE)sk3RUe=nMj5N5Xm|Xh;smRn|eLchrf?qH4 zKm>NBM9QS@7YPH8chhcMBIs$EyK;YLoijojd4--<Mni(ue84$-nf35&d-wGnQDUN# zq$XV4&hO^y33uom@Q_+Ll{Xm4b@=B&STV3WjA?_W+liJkW)tJV9Ud!-T)675EPXVs z36+9(%@#tthmS&`nPb6%!lkf4gYTD*J<w-Flvkjlk;kwG=7BKc9|PW$04p@Jt{-5i z(<=o2h9Msu&B|?QmX<6Fk*&M^aQM6svQT`y>9{7qV$9|M8hX66>8IhbP$sE0t-7!* zLDgbCk5wR$tB|*Q<#|fPDo4DQ_L|C_D5fLy3brosl^wtJ(*QQ;*<l6|b7{1Vp815I z{b*YQ3eXV&hzrr)EEtql+IEdke88>%$>k3$E?3dM9VqC}zQ4rX;Uq0B%{W)<2=?f9 z)zx#;9jFRmg&~WB2T<M#>~iU(e8c6<sG8B(nJtbaDc+Cit?-?;snB2)o)Lr!=$xeo zIpA;qfKn)-8IRip*mdaS*jvwhJ9b#(U1<*022H95Wd=PSI}Sn%r>g7NLru6$;N5tT z^X`i{&%C@4_iT8>Ry1Q!$a3q(GeRd2rJcnGM<&c3U8brW>&RK`@gVn(W^@`9-g2P8 zAmyQ(19kry1U{=f+!R6p3}B`wJ9EY_`*I%|+KWOd-Kj;+SnCvI8pHivp&Giw@~DU7 zc^MgwYIj%j6&Nf&+9hn1dvg$y-XC=LT&Fg!F3nNHQ|1wy$I?Um(#eD41&zPX{JGxG zvMx?ZB{M&L?=Wj(ZvaikcZV!28n_A`@W@|5c-GdPJ7tPTt!YUSQ_v1x{`eO)t>bnk zCPK^r-$CbtjXiHZg^P(CI2XV!Dft92f>uTF_geUm0OlvKbA5gN7qqa7SR|f{<43T= zsP>wW8fL2jgq?7j+OMi=TJbk<hgipl+lfsd)@7kbug5Ld0oaGz1a{kPcngk>3se<% zqnBxr(@g(~NIry^2K=1$&pw4`&-?|y8~;3pq90<Q2n(j)YPA1)Dy;0GB6dAUQ#yPO zuOko~h|+%F{7EVNbNlDvKezu4G5mA)&+UI7{^zs)<>7xk>(AXkxBv32e|h*H&-!!s z&+Y%yXZ`>CV*mKKfA0Rd{g*fXFAx9YS%2>Sx&4=C{maAuc-Ei0e{TQfS=3v15uuz! z@&Ehgk2%Pn+dmKgx&7~j{paqV+yBi&WKl(qn}UMkih|7P3;$1F_<wt`N{<FIrMiFV V2Q_JK75rlq3TKsN5~cO;{4dO1|26;s diff --git a/libs/ImageMagick b/libs/ImageMagick index 738d434..a2d96f4 160000 --- a/libs/ImageMagick +++ b/libs/ImageMagick @@ -1 +1 @@ -Subproject commit 738d434e105c42d8612dd0af90a73d0266f43bd0 +Subproject commit a2d96f40e707ba54b57e7d98c3277d3ea6611ace diff --git a/src/config.cpp b/src/config.cpp index c86f4c2..cd4e378 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -60,6 +60,7 @@ namespace AppConfig { ini["winamp"]["bitmapFontInPlaylist"] = std::to_string(winamp.useBitmapFontInPlaylist); ini["winamp"]["preferTimeRemaining"] = std::to_string(winamp.preferTimeRemaining); ini["winamp"]["showClutterbar"] = std::to_string(winamp.showClutterbar); + ini["winamp"]["skinTransparency"] = std::to_string(winamp.skinTransparency); ini["misc"]["swapTrackButtons"] = std::to_string(misc.swapTrackButtons); @@ -151,6 +152,7 @@ namespace AppConfig { winamp.useBitmapFontInPlaylist = (bool)std::atoi(ini["winamp"]["bitmapFontInPlaylist"].c_str()); winamp.preferTimeRemaining = (bool)std::atoi(ini["winamp"]["preferTimeRemaining"].c_str()); winamp.showClutterbar = (bool)std::atoi(ini["winamp"]["showClutterbar"].c_str()); + winamp.skinTransparency = (bool)std::atoi(ini["winamp"]["skinTransparency"].c_str()); cassette.randomize = (bool)std::atoi(ini["cassette"]["randomize"].c_str()); // NOLINTEND diff --git a/src/main.cpp b/src/main.cpp index c841c1d..84eaf32 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -442,9 +442,9 @@ int main(int, char **) { ImGui::Begin("1", nullptr, window_flags); - // #ifndef DESKTOP +#ifndef DESKTOP ImGui::GetBackgroundDrawList()->AddCallback(drawCallback, (void *)shaderProgram); - // #endif +#endif skin.Draw(); // DrawWindowRects(); diff --git a/src/skin.h b/src/skin.h index e4ccc1e..e6fd343 100644 --- a/src/skin.h +++ b/src/skin.h @@ -690,139 +690,151 @@ struct Skin { ImGui::NewLine(); if (activeSettingsTab == WINAMP) { - ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40.0f); - ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, 40.0f); - if (ImGui::BeginCombo("##", skinList->at(selectedSkinIdx).name.c_str(), ImGuiComboFlags_HeightRegular)) { - for (int n = 0; n < skinList->size(); n++) { - const bool is_selected = (selectedSkinIdx == n); - if (ImGui::Selectable(skinList->at(n).name.c_str(), is_selected)) { - selectedSkinIdx = n; - } - } - ImGui::EndCombo(); - } - ImGui::PopStyleVar(2); + Winamp(); + } else if (activeSettingsTab == CASSETTE) { + Cassette(); + } else if (activeSettingsTab == DIGITAL_CLOCK) { + DigitalClock(); + } + } - ImGui::SameLine(); - if (activeSkinVariant == WINAMP) { - if (ImGui::Button("Load skin")) { - loadStatusStr = "Loading " + skinList->at(selectedSkinIdx).name; - winamp.changeSkin(skinList->at(selectedSkinIdx).fullPath); - needLoad = true; + void Winamp() { + ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40.0f); + ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, 40.0f); + if (ImGui::BeginCombo("##", skinList->at(selectedSkinIdx).name.c_str(), ImGuiComboFlags_HeightRegular)) { + for (int n = 0; n < skinList->size(); n++) { + const bool is_selected = (selectedSkinIdx == n); + if (ImGui::Selectable(skinList->at(n).name.c_str(), is_selected)) { + selectedSkinIdx = n; } } + ImGui::EndCombo(); + } + ImGui::PopStyleVar(2); - if (!loadStatusStr.empty()) { - ImGui::Text("%s", loadStatusStr.c_str()); + ImGui::SameLine(); + if (activeSkinVariant == WINAMP) { + if (ImGui::Button("Load skin")) { + loadStatusStr = "Loading " + skinList->at(selectedSkinIdx).name; + winamp.changeSkin(skinList->at(selectedSkinIdx).fullPath); + needLoad = true; } + } - ImGui::NewLine(); + if (!loadStatusStr.empty()) { + ImGui::Text("%s", loadStatusStr.c_str()); + } - if (ImGui::Checkbox("Use bitmap font", &config->winamp.useBitmapFont)) { - config->Save(); - if (activeSkinVariant == WINAMP) { - winamp.Format(true); - } - } + ImGui::NewLine(); - if (ImGui::Checkbox("Use bitmap font in playlist", &config->winamp.useBitmapFontInPlaylist)) { - config->Save(); - if (activeSkinVariant == WINAMP) { - winamp.Format(true); - } + if (ImGui::Checkbox("Use bitmap font", &config->winamp.useBitmapFont)) { + config->Save(); + if (activeSkinVariant == WINAMP) { + winamp.Format(true); } + } - if (ImGui::Checkbox("Prefer time remaining", &config->winamp.preferTimeRemaining)) { - config->Save(); + if (ImGui::Checkbox("Use bitmap font in playlist", &config->winamp.useBitmapFontInPlaylist)) { + config->Save(); + if (activeSkinVariant == WINAMP) { + winamp.Format(true); } + } - if (ImGui::Checkbox("Show clutterbar", &config->winamp.showClutterbar)) { - config->Save(); - } - } else if (activeSettingsTab == CASSETTE) { - if (ImGui::Checkbox("Randomize?", &config->cassette.randomize)) { - config->Save(); - } + if (ImGui::Checkbox("Prefer time remaining", &config->winamp.preferTimeRemaining)) { + config->Save(); + } - static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | - ImGuiTableFlags_BordersV | ImGuiTableFlags_SizingStretchProp; + if (ImGui::Checkbox("Show clutterbar", &config->winamp.showClutterbar)) { + config->Save(); + } - ImVec2 outer_size = ImVec2(0.0f, ImGui::GetTextLineHeightWithSpacing() * 7); + if (ImGui::Checkbox("Skin transparency", &config->winamp.skinTransparency)) { + config->Save(); + } + } - ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40.0f); - ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, 40.0f); - if (ImGui::BeginTable("configTable", 3, flags, outer_size)) { - ImGui::TableSetupScrollFreeze(0, 1); // Make top row always visible - ImGui::TableSetupColumn("Codec", ImGuiTableColumnFlags_None); - ImGui::TableSetupColumn("Tape", ImGuiTableColumnFlags_None); - ImGui::TableSetupColumn("Reel", ImGuiTableColumnFlags_None); - ImGui::TableHeadersRow(); - - for (auto &tt : config->cassette.data) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("%s", tt.second.name.c_str()); - - ImGui::TableNextColumn(); - if (ImGui::BeginCombo(("##" + tt.second.name + "tape").c_str(), tt.second.tape.c_str(), ImGuiComboFlags_HeightSmall)) { - for (auto &n : *tapeList) { - if (!n.valid) { - continue; - } + void Cassette() { + if (ImGui::Checkbox("Randomize?", &config->cassette.randomize)) { + config->Save(); + } - if (ImGui::Selectable(n.name.c_str(), false)) { - tt.second.tape = n.name; - config->cassette.data.at(tt.first).tape = n.name; - config->Save(); + static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | + ImGuiTableFlags_BordersV | ImGuiTableFlags_SizingStretchProp; - if (activeSkinVariant == CASSETTE) { - cassette.UnloadUnused(); - cassette.LoadTape(n.name); - cassette.SelectTape(); - } + ImVec2 outer_size = ImVec2(0.0f, ImGui::GetTextLineHeightWithSpacing() * 7); + + ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40.0f); + ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, 40.0f); + if (ImGui::BeginTable("configTable", 3, flags, outer_size)) { + ImGui::TableSetupScrollFreeze(0, 1); // Make top row always visible + ImGui::TableSetupColumn("Codec", ImGuiTableColumnFlags_None); + ImGui::TableSetupColumn("Tape", ImGuiTableColumnFlags_None); + ImGui::TableSetupColumn("Reel", ImGuiTableColumnFlags_None); + ImGui::TableHeadersRow(); + + for (auto &tt : config->cassette.data) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("%s", tt.second.name.c_str()); + + ImGui::TableNextColumn(); + if (ImGui::BeginCombo(("##" + tt.second.name + "tape").c_str(), tt.second.tape.c_str(), ImGuiComboFlags_HeightSmall)) { + for (auto &n : *tapeList) { + if (!n.valid) { + continue; + } + + if (ImGui::Selectable(n.name.c_str(), false)) { + tt.second.tape = n.name; + config->cassette.data.at(tt.first).tape = n.name; + config->Save(); + + if (activeSkinVariant == CASSETTE) { + cassette.UnloadUnused(); + cassette.LoadTape(n.name); + cassette.SelectTape(); } } - ImGui::EndCombo(); } + ImGui::EndCombo(); + } - ImGui::TableNextColumn(); - if (ImGui::BeginCombo(("##" + tt.second.name + "reel").c_str(), tt.second.reel.c_str(), ImGuiComboFlags_HeightSmall)) { - for (auto &n : *reelList) { - if (!n.valid) { - continue; - } + ImGui::TableNextColumn(); + if (ImGui::BeginCombo(("##" + tt.second.name + "reel").c_str(), tt.second.reel.c_str(), ImGuiComboFlags_HeightSmall)) { + for (auto &n : *reelList) { + if (!n.valid) { + continue; + } - if (ImGui::Selectable(n.name.c_str(), false)) { - tt.second.reel = n.name; - config->cassette.data.at(tt.first).reel = n.name; - config->Save(); + if (ImGui::Selectable(n.name.c_str(), false)) { + tt.second.reel = n.name; + config->cassette.data.at(tt.first).reel = n.name; + config->Save(); - if (activeSkinVariant == CASSETTE) { - cassette.UnloadUnused(); - cassette.LoadReel(n.name); - cassette.SelectTape(); - } + if (activeSkinVariant == CASSETTE) { + cassette.UnloadUnused(); + cassette.LoadReel(n.name); + cassette.SelectTape(); } } - ImGui::EndCombo(); } + ImGui::EndCombo(); } - ImGui::EndTable(); } - ImGui::PopStyleVar(2); + ImGui::EndTable(); + } + ImGui::PopStyleVar(2); - if (ImGui::Button("Reset")) { - DLOG("resetting cassette config\n"); - cassette.config->Default(); - config->Save(); - if (activeSkinVariant == CASSETTE) { - cassette.SelectTape(); - cassette.LoadImages(); - cassette.UnloadUnused(); - } + if (ImGui::Button("Reset")) { + DLOG("resetting cassette config\n"); + cassette.config->Default(); + config->Save(); + if (activeSkinVariant == CASSETTE) { + cassette.SelectTape(); + cassette.LoadImages(); + cassette.UnloadUnused(); } - } else if (activeSettingsTab == DIGITAL_CLOCK) { - DigitalClock(); } } @@ -830,7 +842,9 @@ struct Skin { ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40.0f); ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, 40.0f); if (ImGui::BeginCombo( - "##digiClockColor", digitalClock.GetColorPreview(config->digitalClock.color).c_str(), ImGuiComboFlags_HeightRegular + "##digiClockColor", + DigitalClock::DigitalClock::GetColorPreview(config->digitalClock.color).c_str(), + ImGuiComboFlags_HeightRegular )) { for (const auto &entry : DigitalClock::colorsDigitalClock) { if (ImGui::Selectable(entry.first.c_str(), false)) { diff --git a/src/skinElement.h b/src/skinElement.h index 3176280..5f2ae08 100644 --- a/src/skinElement.h +++ b/src/skinElement.h @@ -69,12 +69,12 @@ struct FlatTexture { return this; } - // used only for main window (for now), uses hardcoded dimensions and coords + // used only for winamp main window (for now), uses hardcoded dimensions and coords + // corrupted texture on NVIDIA desktop after changing to another skin with mask void FromPointList(const std::vector<int> &pl) { - Magick::Geometry g = {800, 480, 0, 0}; Magick::CoordinateList coords{}; - Magick::Coordinate c; for (int i = 0; i < pl.size(); i = i + 2) { + Magick::Coordinate c; c.x((double)pl.at(i)); c.y((double)pl.at(i + 1)); coords.push_back(c); @@ -85,59 +85,55 @@ struct FlatTexture { return; } - auto tmpimage = Magick::Image({275, 165}, "black"); + auto tmpimage = Magick::Image({275, 165}, "#000000"); tmpimage.magick("RGBA"); tmpimage.depth(8); tmpimage.alpha(true); - auto dask = Magick::Image({275, 165}, "black"); - dask.magick("RGBA"); - dask.strokeColor("black"); - dask.fillColor("white"); - dask.strokeAntiAlias(true); - dask.strokeWidth(-1); + auto mask = Magick::Image({275, 165}, "#000000"); + mask.magick("RGBA"); + mask.strokeColor("#000000"); + mask.fillColor("#ffffff"); + mask.strokeAntiAlias(true); + mask.strokeWidth(-1); auto d = Magick::DrawablePolygon(coords); - dask.draw(d); - dask.negate(); + mask.draw(d); + mask.negate(); - tmpimage.writeMask(dask); + tmpimage.writeMask(mask); tmpimage.composite(tmpimage, "+0+0", MagickCore::ClearCompositeOp); - Magick::Geometry v = Magick::Geometry{800, 480, 0, 0}; - // MyMagick::Upscale(&tmpimage, (Magick::Geometry &)v, false); + auto v = Magick::Geometry{800, 480, 0, 0}; tmpimage.compressType(MagickCore::NoCompression); tmpimage.filterType(MagickCore::PointFilter); v.aspect(true); v.fillArea(false); - tmpimage.resize(g); - - DLOG("%zu %zu\n", tmpimage.size().width(), tmpimage.size().height()); - // Upscale(); - auto dask2 = Magick::Image({tmpimage.size().width(), 480}, "black"); - dask2.magick("RGBA"); - dask2.strokeColor("black"); - dask2.fillColor("white"); - dask2.strokeAntiAlias(true); - dask2.strokeWidth(1); + tmpimage.resize(v); + + // playlist zone + auto mask2 = Magick::Image({tmpimage.size().width(), 480}, "#000000"); + mask2.magick("RGBA"); + mask2.strokeColor("#000000"); + mask2.fillColor("#ffffff"); + mask2.strokeAntiAlias(true); + mask2.strokeWidth(1); auto r = Magick::DrawableRectangle({-3, -3, 800, 337}); - dask2.draw(r); + mask2.draw(r); - tmpimage.writeMask(dask2); + tmpimage.writeMask(mask2); tmpimage.composite(tmpimage, "+0+0", MagickCore::ClearCompositeOp); - this->image = new Magick::Image(tmpimage.size(), "black"); + this->image = new Magick::Image(tmpimage.size(), "#000000"); this->image->depth(8); this->image->magick("RGBA"); this->image->composite(tmpimage, "+0+0", MagickCore::CopyCompositeOp); - DLOG("size %zu %zu\n", image->size().width(), image->size().height()); this->LoadTexture(); - DLOG("tid %d\n", this->textureID); this->upscaled.width = 800; this->upscaled.height = 480; this->position = ImVec2(0, 0); - this->image->erase(); + this->Release(); } @@ -206,11 +202,6 @@ struct FlatTexture { return this; } - FlatTexture *WithPointList(std::vector<int> l) { - this->pointList = std::move(l); - return this; - } - FlatTexture *WithFilledRectangle(Magick::RectangleInfo pos, const Magick::Color &c) { this->fillColor = c; this->fillPos = pos; @@ -242,6 +233,14 @@ struct FlatTexture { Magick::Blob blob; this->image->write(&blob); + // DLOG( + // "loading %zu bytes, size %zux%zu (%zu), magick %s\n", + // blob.length(), + // image->size().width(), + // image->size().height(), + // image->size().width() * image->size().height() * 4, + // image->magick().c_str() + // ); bool ret = LoadTextureFromMagic( (unsigned char *)blob.data(), &textureID, (int)this->image->size().width(), (int)this->image->size().height() ); @@ -270,7 +269,7 @@ struct FlatTexture { void Draw() const { ImGui::SetCursorPos(position); - ImGui::Image((void *)(intptr_t)textureID, ImVec2(float(upscaled.width), float(upscaled.height))); + ImGui::Image((ImTextureID)(intptr_t)textureID, ImVec2(float(upscaled.width), float(upscaled.height))); } void DrawAt(float x, float y) const { diff --git a/src/winamp/winamp.cpp b/src/winamp/winamp.cpp index 8a04437..a92756d 100644 --- a/src/winamp/winamp.cpp +++ b/src/winamp/winamp.cpp @@ -289,7 +289,7 @@ namespace Winamp { } void Winamp::readRegionTxt() { - if (textures["pledit.txt"].len == 0) { + if (textures["region.txt"].len == 0) { DLOG("region.txt missing\n"); return; } @@ -310,25 +310,13 @@ namespace Winamp { int numPoints{}; for (auto &line : lines) { - DLOG("line: %s\n", line.c_str()); + // DLOG("line: %s\n", line.c_str()); if (line.rfind("[Normal]", 0) == 0) { normalFound = true; continue; } if (normalFound) { - while (line.find(" ") != std::string::npos) { - line.erase(line.find(" "), 1); - } - - if (line.find('\r') != std::string::npos) { - line.erase(line.find('\r'), 1); - } - - if (line.at(line.length() - 1) == ',') { - line.erase(line.length() - 1, 1); - } - if (line.rfind("NumPoints", 0) == 0) { auto parts = split(line, "="); if (parts.size() < 2) { @@ -347,10 +335,18 @@ namespace Winamp { return; } - auto points = split(parts[1], ","); - for (const auto &point : points) { - auto v = std::atoi(point.c_str()); - pointList.push_back(v); + std::string curchar; + for (const auto &c : parts[1]) { + if (c >= '0' && c <= '9') { + curchar += c; + } else { + if (curchar.empty()) { + continue; + } + + pointList.push_back(std::atoi(curchar.c_str())); + curchar.clear(); + } } break; @@ -359,11 +355,16 @@ namespace Winamp { } } - DLOG("found %zu points\n", pointList.size()); + DLOG("found %zu numbers out of expected %d\n", pointList.size(), numPoints * 2); if (pointList.size() % 2 != 0) { DLOG("uneven point count, ignoring\n"); pointList.clear(); } + + if (pointList.size() != (numPoints * 2)) { + DLOG("NumPoints and points found do not match, ignoring\n"); + pointList.clear(); + } } void Winamp::readPlEdit() { @@ -608,6 +609,12 @@ namespace Winamp { } Elements.TrackTimeToggle.Draw(); + + if (config->skinTransparency) { + if (Elements.RegionMask.textureID > 0) { + Elements.RegionMask.Draw(); + } + } } void Winamp::drawPlaylist() const { @@ -672,12 +679,9 @@ namespace Winamp { Elements.Main.FromPair(textures["main.bmp"]) ->WithCrop(Magick::RectangleInfo{275, 116, 0, 0}) ->WithFilledRectangle({770, 96, 323, 78}, colors.trackTitleBackground) - ->WithPointList(pointList) - ->Load(); - Elements.Title.FromPair(textures["titlebar.bmp"]) - ->WithCrop(Magick::RectangleInfo{275, 14, 27, 0}) - ->WithPointList(pointList) ->Load(); + Elements.Title.FromPair(textures["titlebar.bmp"])->WithCrop(Magick::RectangleInfo{275, 14, 27, 0})->Load(); + Elements.RegionMask.FromPointList(pointList); Elements.ClutterBar.FromPair(textures["titlebar.bmp"]) ->WithCrop(Magick::RectangleInfo{8, 43, 304, 0}) ->WithPosition(ImVec2(29.0f, 64.0f)) @@ -1243,6 +1247,10 @@ namespace Winamp { void elements::Unload() { Main.Unload(); Title.Unload(); + if (RegionMask.textureID > 0) { + RegionMask.Unload(); + RegionMask.Reset(); + } ClutterBar.Unload(); MonoOffIndicator.Unload(); @@ -1309,6 +1317,9 @@ namespace Winamp { void Config::Default() { useBitmapFont = true; useBitmapFontInPlaylist = false; + preferTimeRemaining = false; + showClutterbar = true; + skinTransparency = true; filename = "base-2.91.wsz"; } diff --git a/src/winamp/winamp.h b/src/winamp/winamp.h index b7395c1..f264450 100644 --- a/src/winamp/winamp.h +++ b/src/winamp/winamp.h @@ -63,6 +63,7 @@ namespace Winamp { struct elements { FlatTexture Main; FlatTexture Title; + FlatTexture RegionMask; FlatTexture ClutterBar; FlatTexture MonoOffIndicator; FlatTexture MonoOnIndicator; @@ -109,6 +110,7 @@ namespace Winamp { bool useBitmapFont{}; bool preferTimeRemaining{}; bool showClutterbar = true; + bool skinTransparency = true; std::string filename{}; void Default();