diff --git a/Makefile b/Makefile index b6bf8ee..ca6b1eb 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ INCLUDES := inc EXEFS_SRC := exefs_src APP_TITLE := JKSV APP_AUTHOR := JK_ -APP_VERSION := 06/27/2018 +APP_VERSION := 06/28/2018 ROMFS := romfs #--------------------------------------------------------------------------------- @@ -56,7 +56,7 @@ CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 ASFLAGS := -g $(ARCH) LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) -LIBS := `freetype-config --libs` +LIBS := `freetype-config --libs` -lpng #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing diff --git a/README.MD b/README.MD index 844becc..ba02e05 100644 --- a/README.MD +++ b/README.MD @@ -7,6 +7,7 @@ JKSV for Switch. Mostly to get used to libnx. Reuses a lot of code of JKSM for 3 # Building: 1. Requires [devkitPro](https://devkitpro.org/) devkitA64 2. Requires switch-freetype +3. libpng # Credits and Thanks: * [shared-font](https://github.com/switchbrew/switch-portlibs-examples) example by yellows8 diff --git a/inc/gfx.h b/inc/gfx.h index cbccdb6..bcce80f 100644 --- a/inc/gfx.h +++ b/inc/gfx.h @@ -37,11 +37,9 @@ namespace gfx { public: /* - Loads binary data from path - First 4 bytes are data size - Next 2 are width - Next 2 are height - The rest is raw RGBA8 data + Now uses libpng and png files + Only accepts RGBA8 PNGs + Others will have issues. */ void loadFromFile(const std::string& path); //Frees memory used by data diff --git a/romfs/img/buttonA.data b/romfs/img/buttonA.data deleted file mode 100644 index eff6030..0000000 Binary files a/romfs/img/buttonA.data and /dev/null differ diff --git a/romfs/img/buttonA.png b/romfs/img/buttonA.png new file mode 100644 index 0000000..7647fd8 Binary files /dev/null and b/romfs/img/buttonA.png differ diff --git a/romfs/img/buttonB.data b/romfs/img/buttonB.data deleted file mode 100644 index a25d024..0000000 Binary files a/romfs/img/buttonB.data and /dev/null differ diff --git a/romfs/img/buttonB.png b/romfs/img/buttonB.png new file mode 100644 index 0000000..2a23d9c Binary files /dev/null and b/romfs/img/buttonB.png differ diff --git a/romfs/img/buttonX.data b/romfs/img/buttonX.data deleted file mode 100644 index 4026e48..0000000 Binary files a/romfs/img/buttonX.data and /dev/null differ diff --git a/romfs/img/buttonX.png b/romfs/img/buttonX.png new file mode 100644 index 0000000..49b0f91 Binary files /dev/null and b/romfs/img/buttonX.png differ diff --git a/romfs/img/buttonY.data b/romfs/img/buttonY.data deleted file mode 100644 index dd92c24..0000000 Binary files a/romfs/img/buttonY.data and /dev/null differ diff --git a/romfs/img/buttonY.png b/romfs/img/buttonY.png new file mode 100644 index 0000000..468404c Binary files /dev/null and b/romfs/img/buttonY.png differ diff --git a/romfs/img/tbox/tBoxCornerBotLeft_drk.data b/romfs/img/tbox/tBoxCornerBotLeft_drk.data deleted file mode 100644 index de58a53..0000000 Binary files a/romfs/img/tbox/tBoxCornerBotLeft_drk.data and /dev/null differ diff --git a/romfs/img/tbox/tBoxCornerBotLeft_lght.data b/romfs/img/tbox/tBoxCornerBotLeft_lght.data deleted file mode 100644 index 425f9aa..0000000 Binary files a/romfs/img/tbox/tBoxCornerBotLeft_lght.data and /dev/null differ diff --git a/romfs/img/tbox/tBoxCornerBotRight_drk.data b/romfs/img/tbox/tBoxCornerBotRight_drk.data deleted file mode 100644 index ffdf287..0000000 Binary files a/romfs/img/tbox/tBoxCornerBotRight_drk.data and /dev/null differ diff --git a/romfs/img/tbox/tBoxCornerBotRight_lght.data b/romfs/img/tbox/tBoxCornerBotRight_lght.data deleted file mode 100644 index 66757f3..0000000 Binary files a/romfs/img/tbox/tBoxCornerBotRight_lght.data and /dev/null differ diff --git a/romfs/img/tbox/tBoxCornerTopLeft_drk.data b/romfs/img/tbox/tBoxCornerTopLeft_drk.data deleted file mode 100644 index 98194f4..0000000 Binary files a/romfs/img/tbox/tBoxCornerTopLeft_drk.data and /dev/null differ diff --git a/romfs/img/tbox/tBoxCornerTopLeft_lght.data b/romfs/img/tbox/tBoxCornerTopLeft_lght.data deleted file mode 100644 index f7cecd0..0000000 Binary files a/romfs/img/tbox/tBoxCornerTopLeft_lght.data and /dev/null differ diff --git a/romfs/img/tbox/tBoxCornerTopRight_drk.data b/romfs/img/tbox/tBoxCornerTopRight_drk.data deleted file mode 100644 index 343af18..0000000 Binary files a/romfs/img/tbox/tBoxCornerTopRight_drk.data and /dev/null differ diff --git a/romfs/img/tbox/tBoxCornerTopRight_lght.data b/romfs/img/tbox/tBoxCornerTopRight_lght.data deleted file mode 100644 index 975b2ff..0000000 Binary files a/romfs/img/tbox/tBoxCornerTopRight_lght.data and /dev/null differ diff --git a/romfs/img/tbox/tboxCornerBotLeft_drk.png b/romfs/img/tbox/tboxCornerBotLeft_drk.png new file mode 100644 index 0000000..a9710b0 Binary files /dev/null and b/romfs/img/tbox/tboxCornerBotLeft_drk.png differ diff --git a/romfs/img/tbox/tboxCornerBotLeft_lght.png b/romfs/img/tbox/tboxCornerBotLeft_lght.png new file mode 100644 index 0000000..2201bc5 Binary files /dev/null and b/romfs/img/tbox/tboxCornerBotLeft_lght.png differ diff --git a/romfs/img/tbox/tboxCornerBotRight_drk.png b/romfs/img/tbox/tboxCornerBotRight_drk.png new file mode 100644 index 0000000..1b9f48d Binary files /dev/null and b/romfs/img/tbox/tboxCornerBotRight_drk.png differ diff --git a/romfs/img/tbox/tboxCornerBotRight_lght.png b/romfs/img/tbox/tboxCornerBotRight_lght.png new file mode 100644 index 0000000..79b959f Binary files /dev/null and b/romfs/img/tbox/tboxCornerBotRight_lght.png differ diff --git a/romfs/img/tbox/tboxCornerTopLeft_drk.png b/romfs/img/tbox/tboxCornerTopLeft_drk.png new file mode 100644 index 0000000..ec117f2 Binary files /dev/null and b/romfs/img/tbox/tboxCornerTopLeft_drk.png differ diff --git a/romfs/img/tbox/tboxCornerTopLeft_lght.png b/romfs/img/tbox/tboxCornerTopLeft_lght.png new file mode 100644 index 0000000..2cb05eb Binary files /dev/null and b/romfs/img/tbox/tboxCornerTopLeft_lght.png differ diff --git a/romfs/img/tbox/tboxCornerTopRight_drk.png b/romfs/img/tbox/tboxCornerTopRight_drk.png new file mode 100644 index 0000000..4fab957 Binary files /dev/null and b/romfs/img/tbox/tboxCornerTopRight_drk.png differ diff --git a/romfs/img/tbox/tboxCornerTopRight_lght.png b/romfs/img/tbox/tboxCornerTopRight_lght.png new file mode 100644 index 0000000..2cf2e1c Binary files /dev/null and b/romfs/img/tbox/tboxCornerTopRight_lght.png differ diff --git a/romfs/img/tbox/tboxHorEdgeBot_drk.data b/romfs/img/tbox/tboxHorEdgeBot_drk.data deleted file mode 100644 index 655268a..0000000 Binary files a/romfs/img/tbox/tboxHorEdgeBot_drk.data and /dev/null differ diff --git a/romfs/img/tbox/tboxHorEdgeBot_drk.png b/romfs/img/tbox/tboxHorEdgeBot_drk.png new file mode 100644 index 0000000..1508a37 Binary files /dev/null and b/romfs/img/tbox/tboxHorEdgeBot_drk.png differ diff --git a/romfs/img/tbox/tboxHorEdgeBot_lght.data b/romfs/img/tbox/tboxHorEdgeBot_lght.data deleted file mode 100644 index 6afd113..0000000 Binary files a/romfs/img/tbox/tboxHorEdgeBot_lght.data and /dev/null differ diff --git a/romfs/img/tbox/tboxHorEdgeBot_lght.png b/romfs/img/tbox/tboxHorEdgeBot_lght.png new file mode 100644 index 0000000..cf44a83 Binary files /dev/null and b/romfs/img/tbox/tboxHorEdgeBot_lght.png differ diff --git a/romfs/img/tbox/tboxHorEdgeTop_drk.data b/romfs/img/tbox/tboxHorEdgeTop_drk.data deleted file mode 100644 index da49943..0000000 Binary files a/romfs/img/tbox/tboxHorEdgeTop_drk.data and /dev/null differ diff --git a/romfs/img/tbox/tboxHorEdgeTop_drk.png b/romfs/img/tbox/tboxHorEdgeTop_drk.png new file mode 100644 index 0000000..b25249d Binary files /dev/null and b/romfs/img/tbox/tboxHorEdgeTop_drk.png differ diff --git a/romfs/img/tbox/tboxHorEdgeTop_lght.data b/romfs/img/tbox/tboxHorEdgeTop_lght.data deleted file mode 100644 index 46f95ba..0000000 Binary files a/romfs/img/tbox/tboxHorEdgeTop_lght.data and /dev/null differ diff --git a/romfs/img/tbox/tboxHorEdgeTop_lght.png b/romfs/img/tbox/tboxHorEdgeTop_lght.png new file mode 100644 index 0000000..2c97608 Binary files /dev/null and b/romfs/img/tbox/tboxHorEdgeTop_lght.png differ diff --git a/romfs/img/tbox/tboxVertEdgeLeft_drk.data b/romfs/img/tbox/tboxVertEdgeLeft_drk.data deleted file mode 100644 index dd080fb..0000000 Binary files a/romfs/img/tbox/tboxVertEdgeLeft_drk.data and /dev/null differ diff --git a/romfs/img/tbox/tboxVertEdgeLeft_drk.png b/romfs/img/tbox/tboxVertEdgeLeft_drk.png new file mode 100644 index 0000000..57b4232 Binary files /dev/null and b/romfs/img/tbox/tboxVertEdgeLeft_drk.png differ diff --git a/romfs/img/tbox/tboxVertEdgeLeft_lght.data b/romfs/img/tbox/tboxVertEdgeLeft_lght.data deleted file mode 100644 index bb6b3bc..0000000 Binary files a/romfs/img/tbox/tboxVertEdgeLeft_lght.data and /dev/null differ diff --git a/romfs/img/tbox/tboxVertEdgeLeft_lght.png b/romfs/img/tbox/tboxVertEdgeLeft_lght.png new file mode 100644 index 0000000..af86410 Binary files /dev/null and b/romfs/img/tbox/tboxVertEdgeLeft_lght.png differ diff --git a/romfs/img/tbox/tboxVertEdgeRight_drk.data b/romfs/img/tbox/tboxVertEdgeRight_drk.data deleted file mode 100644 index f443992..0000000 Binary files a/romfs/img/tbox/tboxVertEdgeRight_drk.data and /dev/null differ diff --git a/romfs/img/tbox/tboxVertEdgeRight_drk.png b/romfs/img/tbox/tboxVertEdgeRight_drk.png new file mode 100644 index 0000000..31d90c2 Binary files /dev/null and b/romfs/img/tbox/tboxVertEdgeRight_drk.png differ diff --git a/romfs/img/tbox/tboxVertEdgeRight_lght.data b/romfs/img/tbox/tboxVertEdgeRight_lght.data deleted file mode 100644 index c37e5b0..0000000 Binary files a/romfs/img/tbox/tboxVertEdgeRight_lght.data and /dev/null differ diff --git a/romfs/img/tbox/tboxVertEdgeRight_lght.png b/romfs/img/tbox/tboxVertEdgeRight_lght.png new file mode 100644 index 0000000..13a122b Binary files /dev/null and b/romfs/img/tbox/tboxVertEdgeRight_lght.png differ diff --git a/romfs/img/topbar_drk.data b/romfs/img/topbar_drk.data deleted file mode 100644 index 4610c25..0000000 Binary files a/romfs/img/topbar_drk.data and /dev/null differ diff --git a/romfs/img/topbar_drk.png b/romfs/img/topbar_drk.png new file mode 100644 index 0000000..af95ed9 Binary files /dev/null and b/romfs/img/topbar_drk.png differ diff --git a/romfs/img/topbar_lght.data b/romfs/img/topbar_lght.data deleted file mode 100644 index 5a65f7d..0000000 Binary files a/romfs/img/topbar_lght.data and /dev/null differ diff --git a/romfs/img/topbar_lght.png b/romfs/img/topbar_lght.png new file mode 100644 index 0000000..2ab0205 Binary files /dev/null and b/romfs/img/topbar_lght.png differ diff --git a/src/gfx.cpp b/src/gfx.cpp index 4124897..6c91bcd 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include #include FT_FREETYPE_H @@ -256,18 +258,59 @@ namespace gfx void tex::loadFromFile(const std::string& path) { - std::fstream dataIn(path, std::ios::in | std::ios::binary); - if(dataIn.is_open()) + FILE *pngIn = fopen(path.c_str(), "rb"); + if(pngIn != NULL) { - dataIn.read((char *)&sz, sizeof(uint32_t)); - dataIn.read((char *)&width, sizeof(uint16_t)); - dataIn.read((char *)&height, sizeof(uint16_t)); + png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if(png == 0) + return; - data = new uint32_t[sz / sizeof(uint32_t)]; - if(data != NULL) - dataIn.read((char *)data, sz); + png_infop pngInfo = png_create_info_struct(png); + if(pngInfo == 0) + return; - dataIn.close(); + int jmp = setjmp(png_jmpbuf(png)); + if(jmp) + return; + + png_init_io(png, pngIn); + + png_read_info(png, pngInfo); + + unsigned clrType = png_get_color_type(png, pngInfo); + if(clrType != PNG_COLOR_TYPE_RGBA) + return; + + width = png_get_image_width(png, pngInfo); + height = png_get_image_height(png, pngInfo); + + data = new uint32_t[width * height]; + + png_bytep *rows = new png_bytep[sizeof(png_bytep) * height]; + for(unsigned i = 0; i < height; i++) + rows[i] = new png_byte[png_get_rowbytes(png, pngInfo)]; + + png_read_image(png, rows); + + for(unsigned y = 0, i = 0; y < height; y++) + { + png_bytep row = rows[y]; + for(unsigned x = 0; x < width; x++, i++) + { + png_bytep px = &(row[x * 4]); + + data[i] = px[3] << 24 | px[2] << 16 | px[1] << 8 | px[0]; + } + } + + for(unsigned i = 0; i < height; i++) + delete rows[i]; + + delete[] rows; + + png_destroy_read_struct(&png, &pngInfo, NULL); + + fclose(pngIn); } } diff --git a/src/ui.cpp b/src/ui.cpp index 494c235..9fd769b 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -52,7 +52,9 @@ static int advMenuCtrl = 0, advPrev = 0; namespace ui { - uint32_t clearClr = 0, mnuTxt = 0, txtClr = 0, rectLt = 0, rectSh = 0, tboxClr = 0; + uint32_t clearClr = 0xFFFFFFFF, mnuTxt = 0xFF000000, txtClr = 0xFF000000, \ + rectLt = 0xFFC0C0C0, rectSh = 0, tboxClr = 0xFFC0C0C0; + void init() { ColorSetId gthm; @@ -61,19 +63,19 @@ namespace ui switch(gthm) { case ColorSetId_Light: - titleBar.loadFromFile("romfs:/img/topbar_lght.data"); + titleBar.loadFromFile("romfs:/img/topbar_lght.png"); //Dark corners - cornerTopLeft.loadFromFile("romfs:/img/tbox/tBoxCornerTopLeft_drk.data"); - cornerTopRight.loadFromFile("romfs:/img/tbox/tBoxCornerTopRight_drk.data"); - cornerBottomLeft.loadFromFile("romfs:/img/tbox/tBoxCornerBotLeft_drk.data"); - cornerBottomRight.loadFromFile("romfs:/img/tbox/tBoxCornerBotRight_drk.data"); + cornerTopLeft.loadFromFile("romfs:/img/tbox/tboxCornerTopLeft_drk.png"); + cornerTopRight.loadFromFile("romfs:/img/tbox/tboxCornerTopRight_drk.png"); + cornerBottomLeft.loadFromFile("romfs:/img/tbox/tboxCornerBotLeft_drk.png"); + cornerBottomRight.loadFromFile("romfs:/img/tbox/tboxCornerBotRight_drk.png"); //Dark edges - horEdgeTop.loadFromFile("romfs:/img/tbox/tboxHorEdgeTop_drk.data"); - horEdgeBot.loadFromFile("romfs:/img/tbox/tboxHorEdgeBot_drk.data"); - vertEdgeLeft.loadFromFile("romfs:/img/tbox/tboxVertEdgeLeft_drk.data"); - vertEdgeRight.loadFromFile("romfs:/img/tbox/tboxVertEdgeRight_drk.data"); + horEdgeTop.loadFromFile("romfs:/img/tbox/tboxHorEdgeTop_drk.png"); + horEdgeBot.loadFromFile("romfs:/img/tbox/tboxHorEdgeBot_drk.png"); + vertEdgeLeft.loadFromFile("romfs:/img/tbox/tboxVertEdgeLeft_drk.png"); + vertEdgeRight.loadFromFile("romfs:/img/tbox/tboxVertEdgeRight_drk.png"); clearClr = 0xFFEBEBEB; mnuTxt = 0xFF000000; @@ -83,21 +85,21 @@ namespace ui tboxClr = 0xFF2D2D2D; break; - default: + default: case ColorSetId_Dark: - titleBar.loadFromFile("romfs:/img/topbar_drk.data"); + titleBar.loadFromFile("romfs:/img/topbar_drk.png"); //Light corners - cornerTopLeft.loadFromFile("romfs:/img/tbox/tBoxCornerTopLeft_lght.data"); - cornerTopRight.loadFromFile("romfs:/img/tbox/tBoxCornerTopRight_lght.data"); - cornerBottomLeft.loadFromFile("romfs:/img/tbox/tBoxCornerBotLeft_lght.data"); - cornerBottomRight.loadFromFile("romfs:/img/tbox/tBoxCornerBotRight_lght.data"); + cornerTopLeft.loadFromFile("romfs:/img/tbox/tboxCornerTopLeft_lght.png"); + cornerTopRight.loadFromFile("romfs:/img/tbox/tboxCornerTopRight_lght.png"); + cornerBottomLeft.loadFromFile("romfs:/img/tbox/tboxCornerBotLeft_lght.png"); + cornerBottomRight.loadFromFile("romfs:/img/tbox/tboxCornerBotRight_lght.png"); //light edges - horEdgeTop.loadFromFile("romfs:/img/tbox/tboxHorEdgeTop_lght.data"); - horEdgeBot.loadFromFile("romfs:/img/tbox/tboxHorEdgeBot_lght.data"); - vertEdgeLeft.loadFromFile("romfs:/img/tbox/tboxVertEdgeLeft_lght.data"); - vertEdgeRight.loadFromFile("romfs:/img/tbox/tboxVertEdgeRight_lght.data"); + horEdgeTop.loadFromFile("romfs:/img/tbox/tboxHorEdgeTop_lght.png"); + horEdgeBot.loadFromFile("romfs:/img/tbox/tboxHorEdgeBot_lght.png"); + vertEdgeLeft.loadFromFile("romfs:/img/tbox/tboxVertEdgeLeft_lght.png"); + vertEdgeRight.loadFromFile("romfs:/img/tbox/tboxVertEdgeRight_lght.png"); clearClr = 0xFF2D2D2D; mnuTxt = 0xFFFFFFFF; @@ -108,10 +110,10 @@ namespace ui break; } - buttonA.loadFromFile("romfs:/img/buttonA.data"); - buttonB.loadFromFile("romfs:/img/buttonB.data"); - buttonX.loadFromFile("romfs:/img/buttonX.data"); - buttonY.loadFromFile("romfs:/img/buttonY.data"); + buttonA.loadFromFile("romfs:/img/buttonA.png"); + buttonB.loadFromFile("romfs:/img/buttonB.png"); + buttonX.loadFromFile("romfs:/img/buttonX.png"); + buttonY.loadFromFile("romfs:/img/buttonY.png"); copyMenu.addOpt("Copy From"); copyMenu.addOpt("Delete"); @@ -600,7 +602,7 @@ namespace ui void drawUI() { gfx::clearBufferColor(clearClr); - ui::drawTitleBar("JKSV - 06/27/2018"); + ui::drawTitleBar("JKSV - 06/28/2018"); switch(mstate) {