From 957c1fa7fced986c821bd7ab9a9ec639a3bc8457 Mon Sep 17 00:00:00 2001 From: shadash Date: Fri, 15 Oct 2021 22:54:04 +0200 Subject: [PATCH 01/54] render extras with z-index higher than the carousel above the carousel Signed-off-by: Sophia Hadash --- es-app/src/views/SystemView.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 8159bacbd..c186960dd 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -402,7 +402,8 @@ void SystemView::render(const glm::mat4& parentTrans) glm::mat4 trans{getTransform() * parentTrans}; - renderExtras(trans, INT16_MIN, INT16_MAX); + // Render the extras that are below the carousel. + renderExtras(trans, INT16_MIN, mCarousel.zIndex); // Fade the screen if we're using fade transitions and we're currently transitioning. // This basically renders a black rectangle on top of the currently visible extras @@ -412,6 +413,9 @@ void SystemView::render(const glm::mat4& parentTrans) // Always render the carousel on top so that it's not faded. renderCarousel(trans); + + // Render the rest of the extras. + renderExtras(trans, mCarousel.zIndex, INT16_MAX); } std::vector SystemView::getHelpPrompts() From 3070a66e2c43970fd92c336d4511be8100074920 Mon Sep 17 00:00:00 2001 From: shadash Date: Sat, 23 Oct 2021 17:34:20 +0200 Subject: [PATCH 02/54] introduce 'legacyZIndexMode' tag in carousel Signed-off-by: Sophia Hadash --- es-app/src/views/SystemView.cpp | 44 ++++++++++++++++++++++++--------- es-app/src/views/SystemView.h | 1 + es-core/src/ThemeData.cpp | 3 ++- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index c186960dd..f60a9a552 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -402,20 +402,35 @@ void SystemView::render(const glm::mat4& parentTrans) glm::mat4 trans{getTransform() * parentTrans}; - // Render the extras that are below the carousel. - renderExtras(trans, INT16_MIN, mCarousel.zIndex); + if (mCarousel.legacyZIndexMode) { + // Render all extras. + renderExtras(trans, INT16_MIN, INT16_MAX); - // Fade the screen if we're using fade transitions and we're currently transitioning. - // This basically renders a black rectangle on top of the currently visible extras - // (and beneath the carousel and help prompts). - if (mExtrasFadeOpacity) - renderFade(trans); + // Fade the screen if we're using fade transitions and we're currently transitioning. + // This basically renders a black rectangle on top of the currently visible extras + // (and beneath the carousel and help prompts). + if (mExtrasFadeOpacity) + renderFade(trans); - // Always render the carousel on top so that it's not faded. - renderCarousel(trans); + // Always render the carousel on top so that it's not faded. + renderCarousel(trans); + } + else { + // Render the extras that are below the carousel. + renderExtras(trans, INT16_MIN, mCarousel.zIndex); - // Render the rest of the extras. - renderExtras(trans, mCarousel.zIndex, INT16_MAX); + // Fade the screen if we're using fade transitions and we're currently transitioning. + // This basically renders a black rectangle on top of the currently visible extras + // (and beneath the carousel and help prompts). + if (mExtrasFadeOpacity) + renderFade(trans); + + // Render the carousel. + renderCarousel(trans); + + // Render the rest of the extras. + renderExtras(trans, mCarousel.zIndex, INT16_MAX); + } } std::vector SystemView::getHelpPrompts() @@ -734,4 +749,11 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) else mCarousel.logoAlignment = ALIGN_CENTER; } + if (elem->has("legacyZIndexMode")) { + mCarousel.legacyZIndexMode = + elem->get("legacyZIndexMode").compare("true") == 0 ? true : false; + } + else { + mCarousel.legacyZIndexMode = true; + } } \ No newline at end of file diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index 6e590c971..5e0178a57 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -47,6 +47,7 @@ struct SystemViewCarousel { int maxLogoCount; // Number of logos shown on the carousel. glm::vec2 logoSize; float zIndex; + bool legacyZIndexMode; }; class SystemView : public IList diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 603a0131b..8c22d1968 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -210,7 +210,8 @@ std::map> The {"logoSize", NORMALIZED_PAIR}, {"logoAlignment", STRING}, {"maxLogoCount", FLOAT}, - {"zIndex", FLOAT}}}}; + {"zIndex", FLOAT}, + {"legacyZIndexMode", STRING}}}}; #define MINIMUM_THEME_FORMAT_VERSION 3 #define CURRENT_THEME_FORMAT_VERSION 7 From 4147c2b98747a35f019a6ab0514005f3b600ec50 Mon Sep 17 00:00:00 2001 From: Sophia Hadash Date: Tue, 26 Oct 2021 16:05:12 +0200 Subject: [PATCH 03/54] documentation for the z-index property --- THEMES-DEV.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/THEMES-DEV.md b/THEMES-DEV.md index e13aea2c4..3bba4fa05 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -977,6 +977,8 @@ ES-DE borrows the concept of "nine patches" from Android (or "9-Slices"). Curren - Default is 3 * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. +* `legacyZIndexMode` - type: BOOLEAN + - If true, the carousel will ignore zIndex and always render on top of other components. The help system is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Keep in mind the "default" settings (including position) are used whenever the user opens a menu. From 3025908b9c8bd72d86b0d3b0c591da2730674c65 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 26 Oct 2021 22:31:01 +0200 Subject: [PATCH 04/54] (rbsimple-DE) Improved the controller graphics for the 'arcade' system. --- .../rbsimple-DE/arcade/images/controller.svg | 685 ++++++++++++++---- 1 file changed, 528 insertions(+), 157 deletions(-) diff --git a/themes/rbsimple-DE/arcade/images/controller.svg b/themes/rbsimple-DE/arcade/images/controller.svg index 81da54282..a1e6c6c55 100644 --- a/themes/rbsimple-DE/arcade/images/controller.svg +++ b/themes/rbsimple-DE/arcade/images/controller.svg @@ -1,4 +1,6 @@ + + + id="svg4925" + inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" + sodipodi:docname="controller.svg"> + + + id="metadata4922"> image/svg+xml + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 444f8fed77b1c45b9e46ec999e1f2e8cd81542ad Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 26 Oct 2021 22:32:40 +0200 Subject: [PATCH 05/54] Added and updated some controller icons. --- .../controllers/gamepad_nintendo_64.svg | 436 ++++++------- .../controllers/gamepad_nintendo_nes.svg | 18 +- .../controllers/gamepad_nintendo_snes.svg | 18 +- .../controllers/gamepad_playstation.svg | 19 +- .../joycon_left_or_right_nintendo.svg | 28 +- .../controllers/joycon_pair_nintendo.svg | 20 +- .../controllers/joystick_arcade_2_buttons.svg | 294 ++++++++- .../controllers/joystick_arcade_3_buttons.svg | 350 ++++++++++- .../controllers/joystick_arcade_4_buttons.svg | 412 ++++++++++++- .../controllers/joystick_arcade_6_buttons.svg | 535 +++++++++++++++- .../graphics/controllers/joystick_generic.svg | 19 +- .../graphics/controllers/mouse_amiga.svg | 21 +- resources/graphics/controllers/unknown.svg | 18 +- .../controllers/wii_remote_nintendo.svg | 433 +++++++------ .../wii_remote_nunchuck_nintendo.svg | 583 +++++++++--------- 15 files changed, 2329 insertions(+), 875 deletions(-) diff --git a/resources/graphics/controllers/gamepad_nintendo_64.svg b/resources/graphics/controllers/gamepad_nintendo_64.svg index 48c9bf4e8..df48b2125 100644 --- a/resources/graphics/controllers/gamepad_nintendo_64.svg +++ b/resources/graphics/controllers/gamepad_nintendo_64.svg @@ -9,9 +9,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733334 67.733334" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" @@ -50,9 +50,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="22.627417" - inkscape:cx="14.408843" - inkscape:cy="35.16371" + inkscape:zoom="2.4942087" + inkscape:cx="4.6339592" + inkscape:cy="120.56837" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -71,7 +71,7 @@ image/svg+xml - + @@ -79,216 +79,220 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26664)"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="g4834" + transform="matrix(5.9344609,0,0,5.9344609,0.89331707,-1466.4279)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/gamepad_nintendo_nes.svg b/resources/graphics/controllers/gamepad_nintendo_nes.svg index e546a52eb..92259e8c8 100644 --- a/resources/graphics/controllers/gamepad_nintendo_nes.svg +++ b/resources/graphics/controllers/gamepad_nintendo_nes.svg @@ -9,9 +9,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733334 67.733334" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" @@ -25,9 +25,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="33.785627" - inkscape:cx="7.8454542" - inkscape:cy="25.685359" + inkscape:zoom="2.3222159" + inkscape:cx="-141.71258" + inkscape:cy="91.156289" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -46,7 +46,7 @@ image/svg+xml - + @@ -54,10 +54,10 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26664)"> + transform="matrix(5.9544334,0,0,5.9544334,0.78234597,-1472.249)"> image/svg+xml - + @@ -54,10 +54,10 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + transform="matrix(6.1525214,0,0,6.1525214,-0.31828098,-1529.9804)"> image/svg+xml - + @@ -78,9 +78,10 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g6486" + transform="matrix(6.0251718,0,0,6.0251718,0.38930592,-1492.5651)"> + id="defs4919"> + + + transform="translate(0,-229.26665)"> + transform="matrix(6.6685423,0,0,6.6685423,-3.1854213,-1673.2278)"> @@ -162,7 +170,7 @@ + transform="matrix(6.6685423,0,0,6.6685423,-3.1854213,-1687.5153)"> diff --git a/resources/graphics/controllers/joycon_pair_nintendo.svg b/resources/graphics/controllers/joycon_pair_nintendo.svg index 649377f0a..71b1e8d15 100644 --- a/resources/graphics/controllers/joycon_pair_nintendo.svg +++ b/resources/graphics/controllers/joycon_pair_nintendo.svg @@ -9,9 +9,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" @@ -33,9 +33,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="14.109375" - inkscape:cx="3.8930481" - inkscape:cy="14.965158" + inkscape:zoom="2.1994829" + inkscape:cx="-13.449812" + inkscape:cy="145.73207" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -53,7 +53,7 @@ image/svg+xml - + @@ -61,10 +61,10 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + transform="matrix(6.6685423,0,0,6.6685423,-3.1854213,-1680.3715)"> @@ -170,7 +170,7 @@ + transform="matrix(6.6685423,0,0,6.6685423,-3.1854213,-1680.3715)"> diff --git a/resources/graphics/controllers/joystick_arcade_2_buttons.svg b/resources/graphics/controllers/joystick_arcade_2_buttons.svg index b6b01c15a..a1b8bfa3f 100644 --- a/resources/graphics/controllers/joystick_arcade_2_buttons.svg +++ b/resources/graphics/controllers/joystick_arcade_2_buttons.svg @@ -9,13 +9,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="joystick_arcade_2_buttons.svg"> + transform="translate(0,-229.26665)"> + + id="g4928" + transform="matrix(0.99990441,0,0,1.0164462,0.00195324,-4.327527)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + id="path12-7" + d="m 20.507225,259.29748 c -2.123437,0 -3.844811,1.72138 -3.844811,3.84482 0,2.12343 1.721374,3.84481 3.844811,3.84481 2.123441,0 3.84481,-1.72138 3.84481,-3.84481 0,-2.12344 -1.721369,-3.84482 -3.84481,-3.84482 z m -0.04741,7.48263 c -2.035291,0 -3.685245,-1.64995 -3.685245,-3.68525 0,-2.03529 1.649954,-3.68524 3.685245,-3.68524 2.035292,0 3.685242,1.64995 3.685242,3.68524 0,2.0353 -1.64995,3.68525 -3.685242,3.68525 z" + inkscape:connector-curvature="0" + style="fill:#c9c9c7;stroke-width:0.13708451" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/joystick_arcade_3_buttons.svg b/resources/graphics/controllers/joystick_arcade_3_buttons.svg index b6b01c15a..6f5105f46 100644 --- a/resources/graphics/controllers/joystick_arcade_3_buttons.svg +++ b/resources/graphics/controllers/joystick_arcade_3_buttons.svg @@ -9,13 +9,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="joystick_arcade_3_buttons.svg"> + transform="translate(0,-229.26665)"> + + id="g4928" + transform="matrix(0.99992566,0,0,1.0164679,0.00174674,-4.333237)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + id="path12-7" + d="m 20.507225,259.29748 c -2.123437,0 -3.844811,1.72138 -3.844811,3.84482 0,2.12343 1.721374,3.84481 3.844811,3.84481 2.123441,0 3.84481,-1.72138 3.84481,-3.84481 0,-2.12344 -1.721369,-3.84482 -3.84481,-3.84482 z m -0.04741,7.48263 c -2.035291,0 -3.685245,-1.64995 -3.685245,-3.68525 0,-2.03529 1.649954,-3.68524 3.685245,-3.68524 2.035292,0 3.685242,1.64995 3.685242,3.68524 0,2.0353 -1.64995,3.68525 -3.685242,3.68525 z" + inkscape:connector-curvature="0" + style="fill:#c9c9c7;stroke-width:0.13708451" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/joystick_arcade_4_buttons.svg b/resources/graphics/controllers/joystick_arcade_4_buttons.svg index b6b01c15a..bff46e70a 100644 --- a/resources/graphics/controllers/joystick_arcade_4_buttons.svg +++ b/resources/graphics/controllers/joystick_arcade_4_buttons.svg @@ -9,13 +9,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="joystick_arcade_4_buttons.svg"> + transform="translate(0,-229.26665)"> + + id="g4928" + transform="matrix(0.99992566,0,0,1.0164679,0.00174674,-4.333237)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + id="path12-7" + d="m 20.507225,259.29748 c -2.123437,0 -3.844811,1.72138 -3.844811,3.84482 0,2.12343 1.721374,3.84481 3.844811,3.84481 2.123441,0 3.84481,-1.72138 3.84481,-3.84481 0,-2.12344 -1.721369,-3.84482 -3.84481,-3.84482 z m -0.04741,7.48263 c -2.035291,0 -3.685245,-1.64995 -3.685245,-3.68525 0,-2.03529 1.649954,-3.68524 3.685245,-3.68524 2.035292,0 3.685242,1.64995 3.685242,3.68524 0,2.0353 -1.64995,3.68525 -3.685242,3.68525 z" + inkscape:connector-curvature="0" + style="fill:#c9c9c7;stroke-width:0.13708451" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/joystick_arcade_6_buttons.svg b/resources/graphics/controllers/joystick_arcade_6_buttons.svg index b6b01c15a..acf6a6726 100644 --- a/resources/graphics/controllers/joystick_arcade_6_buttons.svg +++ b/resources/graphics/controllers/joystick_arcade_6_buttons.svg @@ -9,13 +9,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="joystick_arcade_6_buttons.svg"> + transform="translate(0,-229.26665)"> + + + transform="matrix(0.88758869,0,0,0.90164635,0.54790817,25.880136)" + id="g4928"> + + + + + + + + + + + + + + + + + + + + + + + + + + + id="path12-7" + d="m 20.507225,259.29748 c -2.123437,0 -3.844811,1.72138 -3.844811,3.84482 0,2.12343 1.721374,3.84481 3.844811,3.84481 2.123441,0 3.84481,-1.72138 3.84481,-3.84481 0,-2.12344 -1.721369,-3.84482 -3.84481,-3.84482 z m -0.04741,7.48263 c -2.035291,0 -3.685245,-1.64995 -3.685245,-3.68525 0,-2.03529 1.649954,-3.68524 3.685245,-3.68524 2.035292,0 3.685242,1.64995 3.685242,3.68524 0,2.0353 -1.64995,3.68525 -3.685242,3.68525 z" + inkscape:connector-curvature="0" + style="fill:#c9c9c7;stroke-width:0.13708451" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/joystick_generic.svg b/resources/graphics/controllers/joystick_generic.svg index ebabd7953..59da0c1b1 100644 --- a/resources/graphics/controllers/joystick_generic.svg +++ b/resources/graphics/controllers/joystick_generic.svg @@ -9,9 +9,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" @@ -25,9 +25,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="28.21875" - inkscape:cx="6.1924519" - inkscape:cy="24.290783" + inkscape:zoom="3.1105385" + inkscape:cx="-11.977398" + inkscape:cy="87.435969" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -45,7 +45,7 @@ image/svg+xml - + @@ -53,9 +53,10 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g4868" + transform="matrix(6.1411819,0,0,6.1411819,-0.25527512,-1526.4204)"> image/svg+xml - + @@ -55,9 +55,10 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g5117" + transform="matrix(5.9358241,0,0,5.9358241,0.88574371,-1467.7111)"> + points="-217.8,362 -226.5,362 -227.8,365.6 -206.2,365.6 -207.6,362 -216.2,362 -216.2,360.4 -208.3,360.4 -209,358.4 -216.2,358.4 -216.2,356.8 -209.7,356.8 -210.6,354.4 -216.2,354.4 -216.2,352.8 -211.3,352.8 -212.2,350.4 -222.2,350.4 -223.1,352.8 -217.8,352.8 -217.8,354.4 -223.7,354.4 -224.6,356.8 -217.8,356.8 -217.8,358.4 -225.1,358.4 -225.9,360.4 -217.8,360.4 " /> image/svg+xml - + @@ -53,12 +53,12 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + transform="matrix(4.7799158,0,0,4.7799158,14.931273,-1129.9431)"> image/svg+xml - + @@ -53,16 +53,12 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> - + id="g5049" + transform="translate(-1.0794648,1.6666667e-6)"> - - - - - - - - - - - - - - - - - - - - - - + id="path6" + d="m 28.571974,234.34429 c -0.904753,0 -1.644646,0.74302 -1.644646,1.64775 v 54.28255 c 0,0.90472 0.739893,1.64775 1.644646,1.64775 h 12.748315 c 0.904753,0 1.644646,-0.74303 1.644646,-1.64775 v -54.28255 c 0,-0.90473 -0.739893,-1.64775 -1.644646,-1.64775 z" + style="fill:#f8f8f8;fill-opacity:1;stroke:#000000;stroke-width:0.47573891;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + d="m 30.669123,238.22896 c -0.801939,0 -1.439378,-0.63742 -1.439378,-1.43936 0,-0.80194 0.637439,-1.43935 1.439378,-1.43935 0.801939,0 1.439378,0.63741 1.439378,1.43935 0,0.80194 -0.637439,1.43936 -1.439378,1.43936 z" /> + r="1.3776903" + cy="236.76897" + cx="30.669123" /> + d="m 30.669123,237.59154 c -0.370126,0 -0.658001,-0.28769 -0.658001,-0.65797 0,-0.3704 0.287876,-0.65803 0.658001,-0.65803 0.370126,0 0.658001,0.28769 0.658001,0.65803 0,0.3704 -0.287876,0.65797 -0.658001,0.65797 z m 0,-1.11037 c -0.246749,0 -0.452376,0.20558 -0.452376,0.45252 0,0.24693 0.205627,0.45251 0.452376,0.45251 0.246749,0 0.452376,-0.20558 0.452376,-0.45251 0,-0.24694 -0.205627,-0.45252 -0.452376,-0.45252 z" /> + height="1.2131901" + width="0.45237595" + y="235.92593" + x="30.442936" /> + height="1.0075647" + width="0.20562541" + y="236.00824" + x="30.566309" /> + d="m 34.946132,254.96688 c -1.501065,0 -2.714256,-1.23372 -2.714256,-2.73481 0,-1.50108 1.213191,-2.7348 2.714256,-2.7348 1.501066,0 2.714256,1.23372 2.714256,2.7348 0,1.50109 -1.21319,2.73481 -2.714256,2.73481 z" /> + d="m 34.946131,261.85534 c -0.801939,0 -1.439377,-0.63742 -1.439377,-1.43936 0,-0.80194 0.637438,-1.43941 1.439377,-1.43941 0.801939,0 1.439379,0.63747 1.439379,1.43941 0,0.80194 -0.63744,1.43936 -1.439379,1.43936" /> + d="m 30.689685,261.85534 c -0.801939,0 -1.439378,-0.63742 -1.439378,-1.43936 0,-0.80194 0.637439,-1.43941 1.439378,-1.43941 0.801939,0 1.439378,0.63747 1.439378,1.43941 0,0.80194 -0.658001,1.43936 -1.439378,1.43936 z" /> + d="m 39.202578,261.85534 c -0.801939,0 -1.439378,-0.63742 -1.439378,-1.43936 0,-0.80194 0.637439,-1.43941 1.439378,-1.43941 0.801939,0 1.439378,0.63747 1.439378,1.43941 0,0.80194 -0.637439,1.43936 -1.439378,1.43936 z" /> + d="m 34.946131,277.95584 c -1.130939,0 -2.035691,-0.90479 -2.035691,-2.03571 0,-1.13093 0.904752,-2.03572 2.035691,-2.03572 1.13094,0 2.035692,0.90479 2.035692,2.03572 0,1.13092 -0.904752,2.03571 -2.035692,2.03571 z" /> + d="m 34.946131,283.52823 c -1.130939,0 -2.035691,-0.90473 -2.035691,-2.03565 0,-1.13093 0.904752,-2.03571 2.035691,-2.03571 1.13094,0 2.035692,0.90478 2.035692,2.03571 0,1.13092 -0.904752,2.03565 -2.035692,2.03565 z" /> + height="1.9945667" + width="0.41125083" + y="287.66138" + x="37.146324" /> + height="0.43181336" + width="0.41125083" + y="286.87997" + x="37.146324" /> + height="1.9945667" + width="0.41125083" + y="287.66138" + x="36.13876" /> + height="0.43181336" + width="0.41125083" + y="286.87997" + x="36.13876" /> - - + points="-218.9,516.1 -222.6,529.2 -224.5,529.2 -227.3,519.5 -230.1,529.2 -232,529.2 -235.7,516.1 -233.8,515.5 -231,525.3 -228.2,515.5 -226.3,515.5 -223.6,525.3 -220.8,515.5 " /> diff --git a/resources/graphics/controllers/wii_remote_nunchuck_nintendo.svg b/resources/graphics/controllers/wii_remote_nunchuck_nintendo.svg index d9699c383..319e2028d 100644 --- a/resources/graphics/controllers/wii_remote_nunchuck_nintendo.svg +++ b/resources/graphics/controllers/wii_remote_nunchuck_nintendo.svg @@ -9,9 +9,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" @@ -25,9 +25,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="32" - inkscape:cx="3.7670704" - inkscape:cy="20.243876" + inkscape:zoom="2.7429847" + inkscape:cx="61.039347" + inkscape:cy="138.63342" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -36,8 +36,7 @@ inkscape:window-height="2065" inkscape:window-x="0" inkscape:window-y="0" - inkscape:window-maximized="1" - inkscape:snap-bbox="true" /> + inkscape:window-maximized="1" /> @@ -54,10 +53,283 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + transform="matrix(6.0575792,0,0,6.0575792,-0.67909296,-1502.7706)"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From facc1d4c0aaa18f40be82a223d502d5b0bf71622 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 27 Oct 2021 19:06:37 +0200 Subject: [PATCH 06/54] Fixed an issue where the multi-scraper would not update the filter index. --- es-app/src/guis/GuiScraperMulti.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index 50b8aab67..6c775baac 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -12,6 +12,7 @@ #include "guis/GuiScraperMulti.h" #include "CollectionSystemsManager.h" +#include "FileFilterIndex.h" #include "Gamelist.h" #include "MameNames.h" #include "SystemData.h" @@ -269,10 +270,13 @@ void GuiScraperMulti::acceptResult(const ScraperSearchResult& result) { ScraperSearchParams& search = mSearchQueue.front(); - GuiScraperSearch::saveMetadata(result, search.game->metadata, search.game); + search.system->getIndex()->removeFromIndex(search.game); + GuiScraperSearch::saveMetadata(result, search.game->metadata, search.game); updateGamelist(search.system); + search.system->getIndex()->addToIndex(search.game); + mSearchQueue.pop(); mCurrentGame++; mTotalSuccessful++; From c4a7380d402beea0cc1c7d3442b2c32f27e540f9 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 27 Oct 2021 19:10:48 +0200 Subject: [PATCH 07/54] Added a few more controller types and icons. Also fixed an incorrect name for one controller and made some other name changes. --- es-core/src/components/BadgeComponent.cpp | 55 +- .../controllers/flight_stick_generic.svg | 69 +++ .../controllers/joystick_arcade_1_button.svg | 271 +++++++++ .../controllers/joystick_arcade_5_buttons.svg | 515 ++++++++++++++++++ .../joystick_arcade_no_buttons.svg | 215 ++++++++ ...ric.svg => keyboard_and_mouse_generic.svg} | 0 .../graphics/controllers/lightgun_generic.svg | 10 +- .../graphics/controllers/spinner_generic.svg | 69 +++ ...vg => wii_remote_and_nunchuk_nintendo.svg} | 0 9 files changed, 1174 insertions(+), 30 deletions(-) create mode 100644 resources/graphics/controllers/flight_stick_generic.svg create mode 100644 resources/graphics/controllers/joystick_arcade_1_button.svg create mode 100644 resources/graphics/controllers/joystick_arcade_5_buttons.svg create mode 100644 resources/graphics/controllers/joystick_arcade_no_buttons.svg rename resources/graphics/controllers/{keyboard_mouse_generic.svg => keyboard_and_mouse_generic.svg} (100%) create mode 100644 resources/graphics/controllers/spinner_generic.svg rename resources/graphics/controllers/{wii_remote_nunchuck_nintendo.svg => wii_remote_and_nunchuk_nintendo.svg} (100%) diff --git a/es-core/src/components/BadgeComponent.cpp b/es-core/src/components/BadgeComponent.cpp index abe74f0d7..ac93c37cb 100644 --- a/es-core/src/components/BadgeComponent.cpp +++ b/es-core/src/components/BadgeComponent.cpp @@ -26,31 +26,36 @@ std::vector BadgeComponent::sGameControllers; // The "unknown" controller entry has to be placed last. GameControllers sControllerDefinitions [] = { - // shortName displayName fileName - {"gamepad_generic", "Gamepad (Generic)", ":/graphics/controllers/gamepad_generic.svg"}, - {"gamepad_xbox", "Gamepad (Xbox)", ":/graphics/controllers/gamepad_xbox.svg"}, - {"gamepad_playstation", "Gamepad (PlayStation)", ":/graphics/controllers/gamepad_playstation.svg"}, - {"gamepad_nintendo_nes", "Gamepad (Nintendo NES)", ":/graphics/controllers/gamepad_nintendo_nes.svg"}, - {"gamepad_nintendo_snes", "Gamepad (Nintendo SNES)", ":/graphics/controllers/gamepad_nintendo_snes.svg"}, - {"gamepad_nintendo_64", "Gamepad (Nintendo 64)", ":/graphics/controllers/gamepad_nintendo_64.svg"}, - {"joystick_generic", "Joystick (Generic)", ":/graphics/controllers/joystick_generic.svg"}, - {"joystick_arcade_2_buttons", "Joystick (Arcade 2 Buttons)", ":/graphics/controllers/joystick_arcade_2_buttons.svg"}, - {"joystick_arcade_3_buttons", "Joystick (Arcade 3 Buttons)", ":/graphics/controllers/joystick_arcade_3_buttons.svg"}, - {"joystick_arcade_4_buttons", "Joystick (Arcade 4 Buttons)", ":/graphics/controllers/joystick_arcade_4_buttons.svg"}, - {"joystick_arcade_6_buttons", "Joystick (Arcade 6 Buttons)", ":/graphics/controllers/joystick_arcade_6_buttons.svg"}, - {"trackball_generic", "Trackball (Generic)", ":/graphics/controllers/trackball_generic.svg"}, - {"lightgun_generic", "Lightgun (Generic)", ":/graphics/controllers/lightgun_generic.svg"}, - {"lightgun_nintendo", "Lightgun (Nintendo)", ":/graphics/controllers/lightgun_nintendo.svg"}, - {"keyboard_generic", "Keyboard (Generic)", ":/graphics/controllers/keyboard_generic.svg"}, - {"mouse_generic", "Mouse (Generic)", ":/graphics/controllers/mouse_generic.svg"}, - {"mouse_amiga", "Mouse (Amiga)", ":/graphics/controllers/mouse_amiga.svg"}, - {"keyboard_mouse_generic", "Keyboard and Mouse (Generic)", ":/graphics/controllers/keyboard_mouse_generic.svg"}, - {"steering_wheel_generic", "Steering Wheel (Generic)", ":/graphics/controllers/steering_wheel_generic.svg"}, - {"wii_remote_nintendo", "Wii Remote (Nintendo)", ":/graphics/controllers/wii_remote_nintendo.svg"}, - {"wii_remote_nunchuck_nintendo", "Wii Remote and Nunchuck (Nintendo)", ":/graphics/controllers/wii_remote_nunchuck_nintendo.svg"}, - {"joycon_left_or_right_nintendo", "Joy-Con Left or Right (Nintendo)", ":/graphics/controllers/joycon_left_or_right_nintendo.svg"}, - {"joycon_pair_nintendo", "Joy-Con Pair (Nintendo)", ":/graphics/controllers/joycon_pair_nintendo.svg"}, - {"unknown", "Unknown Controller", ":/graphics/controllers/unknown.svg"} + // shortName displayName fileName + {"gamepad_generic", "Gamepad (Generic)", ":/graphics/controllers/gamepad_generic.svg"}, + {"gamepad_xbox", "Gamepad (Xbox)", ":/graphics/controllers/gamepad_xbox.svg"}, + {"gamepad_playstation", "Gamepad (PlayStation)", ":/graphics/controllers/gamepad_playstation.svg"}, + {"gamepad_nintendo_nes", "Gamepad (Nintendo NES)", ":/graphics/controllers/gamepad_nintendo_nes.svg"}, + {"gamepad_nintendo_snes", "Gamepad (Nintendo SNES)", ":/graphics/controllers/gamepad_nintendo_snes.svg"}, + {"gamepad_nintendo_64", "Gamepad (Nintendo 64)", ":/graphics/controllers/gamepad_nintendo_64.svg"}, + {"joystick_generic", "Joystick (Generic)", ":/graphics/controllers/joystick_generic.svg"}, + {"joystick_arcade_no_buttons", "Joystick (Arcade no Buttons)", ":/graphics/controllers/joystick_arcade_no_buttons.svg"}, + {"joystick_arcade_1_button", "Joystick (Arcade 1 Button)", ":/graphics/controllers/joystick_arcade_1_button.svg"}, + {"joystick_arcade_2_buttons", "Joystick (Arcade 2 Buttons)", ":/graphics/controllers/joystick_arcade_2_buttons.svg"}, + {"joystick_arcade_3_buttons", "Joystick (Arcade 3 Buttons)", ":/graphics/controllers/joystick_arcade_3_buttons.svg"}, + {"joystick_arcade_4_buttons", "Joystick (Arcade 4 Buttons)", ":/graphics/controllers/joystick_arcade_4_buttons.svg"}, + {"joystick_arcade_5_buttons", "Joystick (Arcade 5 Buttons)", ":/graphics/controllers/joystick_arcade_5_buttons.svg"}, + {"joystick_arcade_6_buttons", "Joystick (Arcade 6 Buttons)", ":/graphics/controllers/joystick_arcade_6_buttons.svg"}, + {"flight_stick_generic", "Flight Stick (Generic)", ":/graphics/controllers/flight_stick_generic.svg"}, + {"spinner_generic", "Spinner (Generic)", ":/graphics/controllers/spinner_generic.svg"}, + {"trackball_generic", "Trackball (Generic)", ":/graphics/controllers/trackball_generic.svg"}, + {"lightgun_generic", "Lightgun (Generic)", ":/graphics/controllers/lightgun_generic.svg"}, + {"lightgun_nintendo", "Lightgun (Nintendo)", ":/graphics/controllers/lightgun_nintendo.svg"}, + {"keyboard_generic", "Keyboard (Generic)", ":/graphics/controllers/keyboard_generic.svg"}, + {"mouse_generic", "Mouse (Generic)", ":/graphics/controllers/mouse_generic.svg"}, + {"mouse_amiga", "Mouse (Amiga)", ":/graphics/controllers/mouse_amiga.svg"}, + {"keyboard_and_mouse_generic", "Keyboard and Mouse (Generic)", ":/graphics/controllers/keyboard_and_mouse_generic.svg"}, + {"steering_wheel_generic", "Steering Wheel (Generic)", ":/graphics/controllers/steering_wheel_generic.svg"}, + {"wii_remote_nintendo", "Wii Remote (Nintendo)", ":/graphics/controllers/wii_remote_nintendo.svg"}, + {"wii_remote_and_nunchuk_nintendo", "Wii Remote and Nunchuk (Nintendo)", ":/graphics/controllers/wii_remote_and_nunchuk_nintendo.svg"}, + {"joycon_left_or_right_nintendo", "Joy-Con Left or Right (Nintendo)", ":/graphics/controllers/joycon_left_or_right_nintendo.svg"}, + {"joycon_pair_nintendo", "Joy-Con Pair (Nintendo)", ":/graphics/controllers/joycon_pair_nintendo.svg"}, + {"unknown", "Unknown Controller", ":/graphics/controllers/unknown.svg"} }; // clang-format on diff --git a/resources/graphics/controllers/flight_stick_generic.svg b/resources/graphics/controllers/flight_stick_generic.svg new file mode 100644 index 000000000..2c32c71df --- /dev/null +++ b/resources/graphics/controllers/flight_stick_generic.svg @@ -0,0 +1,69 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/resources/graphics/controllers/joystick_arcade_1_button.svg b/resources/graphics/controllers/joystick_arcade_1_button.svg new file mode 100644 index 000000000..8b6d63b38 --- /dev/null +++ b/resources/graphics/controllers/joystick_arcade_1_button.svg @@ -0,0 +1,271 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/joystick_arcade_5_buttons.svg b/resources/graphics/controllers/joystick_arcade_5_buttons.svg new file mode 100644 index 000000000..fa851a34f --- /dev/null +++ b/resources/graphics/controllers/joystick_arcade_5_buttons.svg @@ -0,0 +1,515 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/joystick_arcade_no_buttons.svg b/resources/graphics/controllers/joystick_arcade_no_buttons.svg new file mode 100644 index 000000000..91ff9b318 --- /dev/null +++ b/resources/graphics/controllers/joystick_arcade_no_buttons.svg @@ -0,0 +1,215 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/keyboard_mouse_generic.svg b/resources/graphics/controllers/keyboard_and_mouse_generic.svg similarity index 100% rename from resources/graphics/controllers/keyboard_mouse_generic.svg rename to resources/graphics/controllers/keyboard_and_mouse_generic.svg diff --git a/resources/graphics/controllers/lightgun_generic.svg b/resources/graphics/controllers/lightgun_generic.svg index b6b01c15a..bc679bf23 100644 --- a/resources/graphics/controllers/lightgun_generic.svg +++ b/resources/graphics/controllers/lightgun_generic.svg @@ -15,7 +15,7 @@ version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="lightgun_generic.svg"> + transform="matrix(0.91316098,0,0,0.91316098,5.0065967,25.308702)"> + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/resources/graphics/controllers/wii_remote_nunchuck_nintendo.svg b/resources/graphics/controllers/wii_remote_and_nunchuk_nintendo.svg similarity index 100% rename from resources/graphics/controllers/wii_remote_nunchuck_nintendo.svg rename to resources/graphics/controllers/wii_remote_and_nunchuk_nintendo.svg From 5ca4b855493633828e6dd4f1fcb56b45ffe6e229 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 27 Oct 2021 19:23:57 +0200 Subject: [PATCH 08/54] Added scraping of controller metadata (arcade systems only). --- es-app/src/guis/GuiMetaDataEd.cpp | 6 ++ es-app/src/guis/GuiScraperMenu.cpp | 27 ++++++++ es-app/src/guis/GuiScraperSearch.cpp | 10 ++- es-app/src/scrapers/ScreenScraper.cpp | 91 +++++++++++++++++++++++++++ es-core/src/Settings.cpp | 1 + 5 files changed, 132 insertions(+), 3 deletions(-) diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 02d713c42..2e71a64d6 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -741,6 +741,12 @@ void GuiMetaDataEd::fetchDone(const ScraperSearchResult& result) // Update the list with the scraped metadata values. for (unsigned int i = 0; i < mEditors.size(); i++) { const std::string& key = mMetaDataDecl.at(i).key; + if (key == "controller" && metadata->get(key) != "") { + std::string displayName = BadgeComponent::getDisplayName(metadata->get(key)); + if (displayName != "unknown") + metadata->set(key, displayName); + } + if (mEditors.at(i)->getValue() != metadata->get(key)) { if (key == "rating") mEditors.at(i)->setOriginalColor(ICONCOLOR_SCRAPERMARKED); diff --git a/es-app/src/guis/GuiScraperMenu.cpp b/es-app/src/guis/GuiScraperMenu.cpp index 7507b0a73..8a9692332 100644 --- a/es-app/src/guis/GuiScraperMenu.cpp +++ b/es-app/src/guis/GuiScraperMenu.cpp @@ -249,6 +249,28 @@ void GuiScraperMenu::openContentOptions() ->setOpacity(DISABLED_OPACITY); } + // Scrape controllers (arcade systems only). + auto scrapeControllers = std::make_shared(mWindow); + scrapeControllers->setState(Settings::getInstance()->getBool("ScrapeControllers")); + s->addWithLabel("SCRAPE CONTROLLERS (ARCADE SYSTEMS ONLY)", scrapeControllers); + s->addSaveFunc([scrapeControllers, s] { + if (scrapeControllers->getState() != + Settings::getInstance()->getBool("ScrapeControllers")) { + Settings::getInstance()->setBool("ScrapeControllers", scrapeControllers->getState()); + s->setNeedsSaving(); + } + }); + + // Controllers are not supported by TheGamesDB, so gray out the option if this scraper is + // selected. + if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { + scrapeControllers->setEnabled(false); + scrapeControllers->setOpacity(DISABLED_OPACITY); + scrapeControllers->getParent() + ->getChild(scrapeControllers->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); + } + // Scrape other metadata. auto scrape_metadata = std::make_shared(mWindow); scrape_metadata->setState(Settings::getInstance()->getBool("ScrapeMetadata")); @@ -845,6 +867,11 @@ void GuiScraperMenu::start() contentToScrape = true; break; } + if (scraperService == "screenscraper" && + Settings::getInstance()->getBool("ScrapeControllers")) { + contentToScrape = true; + break; + } if (Settings::getInstance()->getBool("ScrapeMetadata")) { contentToScrape = true; break; diff --git a/es-app/src/guis/GuiScraperSearch.cpp b/es-app/src/guis/GuiScraperSearch.cpp index bf7aba7b9..83f0cb6fe 100644 --- a/es-app/src/guis/GuiScraperSearch.cpp +++ b/es-app/src/guis/GuiScraperSearch.cpp @@ -873,15 +873,19 @@ bool GuiScraperSearch::saveMetadata(const ScraperSearchResult& result, const std::string& key = mMetaDataDecl.at(i).key; // Skip element if the setting to not scrape metadata has been set, - // unless its type is rating or name. + // unless its type is rating, controller or name. if (!Settings::getInstance()->getBool("ScrapeMetadata") && - (key != "rating" && key != "name")) + (key != "rating" && key != "controller" && key != "name")) continue; - // Skip saving of rating if the corresponding option has been set to false. + // Skip saving of rating metadata if the corresponding option has been set to false. if (key == "rating" && !Settings::getInstance()->getBool("ScrapeRatings")) continue; + // Skip saving of controller metadata if the corresponding option has been set to false. + if (key == "controller" && !Settings::getInstance()->getBool("ScrapeControllers")) + continue; + // Skip saving of game name if the corresponding option has been set to false. if (key == "name" && !Settings::getInstance()->getBool("ScrapeGameNames")) continue; diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index ea4cb1cab..d6caa4885 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -426,6 +426,97 @@ void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, << result.mdl.get("players"); } + // Controller (only for the Arcade and SNK Neo Geo systems). + pugi::xml_node system = game.child("systeme"); + int platformID = system.attribute("parentid").as_int(); + + if (platformID == 75 || platformID == 142) { + std::string controller = Utils::String::toLower(game.child("controles").text().get()); + if (!controller.empty()) { + std::string controllerDescription = "Other"; + // Place the steering wheel entry first as some games support both joysticks and + // and steering wheels and it's likely more interesting to capture the steering + // wheel option in this case. + if (controller.find("steering wheel") != std::string::npos || + controller.find("paddle") != std::string::npos || + controller.find("pedal") != std::string::npos) { + result.mdl.set("controller", "steering_wheel_generic"); + controllerDescription = "Steering wheel"; + } + else if (controller.find("control type=\"joy") != std::string::npos || + controller.find("joystick") != std::string::npos) { + std::string buttonEntry; + std::string buttonCount; + if (controller.find("p1numbuttons=") != std::string::npos) + buttonEntry = controller.substr(controller.find("p1numbuttons=") + 13, 4); + else if (controller.find("buttons=") != std::string::npos) + buttonEntry = controller.substr(controller.find("buttons=") + 8, 5); + + bool foundDigit = false; + for (unsigned char character : buttonEntry) { + if (std::isdigit(character)) { + buttonCount.push_back(character); + foundDigit = true; + } + else if (foundDigit == true) { + break; + } + } + + if (buttonCount == "0") { + result.mdl.set("controller", "joystick_arcade_no_buttons"); + controllerDescription = "Joystick (no buttons)"; + } + else if (buttonCount == "1") { + result.mdl.set("controller", "joystick_arcade_1_button"); + controllerDescription = "Joystick (1 button)"; + } + else if (buttonCount == "2") { + result.mdl.set("controller", "joystick_arcade_2_buttons"); + controllerDescription = "Joystick (2 buttons)"; + } + else if (buttonCount == "3") { + result.mdl.set("controller", "joystick_arcade_3_buttons"); + controllerDescription = "Joystick (3 buttons)"; + } + else if (buttonCount == "4") { + result.mdl.set("controller", "joystick_arcade_4_buttons"); + controllerDescription = "Joystick (4 buttons)"; + } + else if (buttonCount == "5") { + result.mdl.set("controller", "joystick_arcade_5_buttons"); + controllerDescription = "Joystick (5 buttons)"; + } + else if (buttonCount == "6") { + result.mdl.set("controller", "joystick_arcade_6_buttons"); + controllerDescription = "Joystick (6 buttons)"; + } + else { + controllerDescription = "Joystick (other)"; + } + } + else if (controller.find("spinner") != std::string::npos) { + result.mdl.set("controller", "spinner_generic"); + controllerDescription = "Spinner"; + } + else if (controller.find("trackball") != std::string::npos) { + result.mdl.set("controller", "trackball_generic"); + controllerDescription = "Trackball"; + } + else if (controller.find("gun") != std::string::npos) { + result.mdl.set("controller", "lightgun_generic"); + controllerDescription = "Lightgun"; + } + else if (controller.find("stick") != std::string::npos) { + result.mdl.set("controller", "flight_stick_generic"); + controllerDescription = "Flight stick"; + } + + LOG(LogDebug) << "ScreenScraperRequest::processGame(): Controller: " + << controllerDescription; + } + } + // Media super-node. pugi::xml_node media_list = game.child("medias"); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 34c3a8c8b..2d4d406c8 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -104,6 +104,7 @@ void Settings::setDefaults() mBoolMap["ScrapeGameNames"] = {true, true}; mBoolMap["ScrapeRatings"] = {true, true}; + mBoolMap["ScrapeControllers"] = {true, true}; mBoolMap["ScrapeMetadata"] = {true, true}; mBoolMap["ScrapeVideos"] = {true, true}; mBoolMap["ScrapeScreenshots"] = {true, true}; From 56362af7f8f2f1c74262b40d5f8a4a151b843657 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 27 Oct 2021 20:00:40 +0200 Subject: [PATCH 09/54] Changed 'controller badge' to 'controller' in the metadata editor and filter GUI. --- es-app/src/FileFilterIndex.cpp | 2 +- es-app/src/MetaData.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index ec4384c18..b7a0bb5fa 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -51,7 +51,7 @@ FileFilterIndex::FileFilterIndex() {KIDGAME_FILTER, &mKidGameIndexAllKeys, &mFilterByKidGame, &mKidGameIndexFilteredKeys, "kidgame", false, "", "KIDGAME"}, {HIDDEN_FILTER, &mHiddenIndexAllKeys, &mFilterByHidden, &mHiddenIndexFilteredKeys, "hidden", false, "", "HIDDEN"}, {BROKEN_FILTER, &mBrokenIndexAllKeys, &mFilterByBroken, &mBrokenIndexFilteredKeys, "broken", false, "", "BROKEN"}, - {CONTROLLER_FILTER, &mControllerIndexAllKeys, &mFilterByController, &mControllerIndexFilteredKeys, "controller", false, "", "CONTROLLER BADGE"}, + {CONTROLLER_FILTER, &mControllerIndexAllKeys, &mFilterByController, &mControllerIndexFilteredKeys, "controller", false, "", "CONTROLLER"}, {ALTEMULATOR_FILTER, &mAltemulatorIndexAllKeys, &mFilterByAltemulator, &mAltemulatorIndexFilteredKeys, "altemulator", false, "", "ALTERNATIVE EMULATOR"} }; // clang-format on diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 1dc7a10e1..ed52670fd 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -37,7 +37,7 @@ MetaDataDecl gameDecls[] = { {"nomultiscrape", MD_BOOL, "false", false, "exclude from multi-scraper", "enter no multi-scrape off/on", false}, {"hidemetadata", MD_BOOL, "false", false, "hide metadata fields", "enter hide metadata off/on", false}, {"playcount", MD_INT, "0", false, "times played", "enter number of times played", false}, -{"controller", MD_CONTROLLER, "", false, "controller badge", "select controller badge", false}, +{"controller", MD_CONTROLLER, "", false, "controller", "select controller", true}, {"altemulator", MD_ALT_EMULATOR, "", false, "alternative emulator", "select alternative emulator", false}, {"lastplayed", MD_TIME, "0", true, "last played", "enter last played date", false} }; @@ -58,7 +58,7 @@ MetaDataDecl folderDecls[] = { {"broken", MD_BOOL, "false", false, "broken/not working", "enter broken off/on", false}, {"nomultiscrape", MD_BOOL, "false", false, "exclude from multi-scraper", "enter no multi-scrape off/on", false}, {"hidemetadata", MD_BOOL, "false", false, "hide metadata fields", "enter hide metadata off/on", false}, -{"controller", MD_CONTROLLER, "", false, "controller badge", "select controller badge", false}, +{"controller", MD_CONTROLLER, "", false, "controller", "select controller", true}, {"lastplayed", MD_TIME, "0", true, "last played", "enter last played date", false} }; // clang-format on From d21688ebda72426f5b807a39b8837522725d301b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 27 Oct 2021 20:05:48 +0200 Subject: [PATCH 10/54] Documentation update. --- CHANGELOG.md | 7 +++++-- THEMES-DEV.md | 4 ++-- USERGUIDE-DEV.md | 33 +++++++++++++++++++-------------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af4d4a9f2..a5a2c38e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,16 +14,17 @@ * Populated the bundled es_systems.xml files with alternative emulator entries for most RetroArch cores * Added a virtual keyboard, partly based on code from batocera-emulationstation * Added badges that indicate favorite/completed/broken games as well as games suitable for children and those with a selected alternative emulator -* Added game-specific controller images that are selectable via the metadata editor and displayed as a controller badge +* Added game-specific controllers that are selectable via the metadata editor and displayed as a controller badge * Added the ability to make complementary game system customizations without having to replace the entire bundled es_systems.xml file * Added support for an optional \ tag for es_systems.xml that can be used to override the default \ systems sorting * Added menu scroll indicators showing if there are additional entries available below or above what's currently shown on screen +* Added scraping of controller metadata (only for ScreenScraper and only for arcade systems) * Improved the layout of the scraper GUIs (single-game scraper and multi-scraper) * Added horizontal scrolling of long game names to the scraper GUIs * Improved the gamelist filter screen to not allow filtering of values where there is no actual data to filter, e.g. Favorites for a system with no favorite games * Grayed out all fields in the gamelist filter screen where there is no data to filter, previously some fields were removed entirely and some could still be used * Added the ability to filter on blank/unknown values for Genre, Player, Developer, Publisher and Alternative emulator. -* Added filters for "Alternative emulator" and "Controller badges" and sorted the filters in the same order as the metadata editor fields +* Added filters for "Controller" and "Alternative emulator" and sorted the filters in the same order as the metadata editor fields * Added a menu option to change the application exit key combination * Added an option to preload the gamelists on startup which leads to smoother navigation when first entering each gamelist * Lowered the minimum supported screen resolution from 640x480 to 224x224 to support arcade cabinet displays such as those running at 384x224 and 224x384 @@ -81,6 +82,7 @@ * When scraping in interactive mode, the game counter was not decreased when skipping games, making it impossible to skip the final games in the queue * When scraping in interactive mode, "No games found" results could be accepted using the "A" button * When scraping in interactive mode, any refining done using the "Y" button shortcut would not be shown when doing another refine using the "Refine search" button +* The multi-scraper did not update the filter index * Fixed multiple minor rendering issues where graphics would be slightly cut off or incorrectly resized * Under some circumstances ScrollableContainer (used for the game descriptions) would contain a partially rendered bottom line * If the TextListComponent height was not evenly dividable by the font height + line spacing, a partial bottom row would get rendered @@ -104,6 +106,7 @@ * Really long theme set names would not get abbreviated in the UI settings menu, leading to a garbled "Theme set" setting row * Disabling a collection while its gamelist was displayed would lead to a slide transition from a black screen if a gamelist on startup had been set * When marking a game to not be counted in the metadata editor and the game was part of a custom collection, no collection disabling notification was displayed +* When running really low on texture memory, the menu texture would not get rendered correctly * SliderComponent had very inconsistent widths at different screen aspect ratios * SliderComponent did not properly align the knob and bar vertically * Resizing in SwitchComponent did not reposition the image properly leading to a non-centered image diff --git a/THEMES-DEV.md b/THEMES-DEV.md index bbe13b521..980d12dae 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -947,7 +947,7 @@ It's strongly recommended to use the same image dimensions for all badges as var - A badge icon override. Specify the badge type in the attribute `badge`. The available badges are the ones listed above. * `customControllerIcon` - type: PATH. - A controller icon override. Specify the controller type in the attribute `controller`. These are the available types: - - `gamepad_generic`, `gamepad_xbox`, `gamepad_playstation`, `gamepad_nintendo_nes`, `gamepad_nintendo_snes`, `gamepad_nintendo_64`, `joystick_generic`, `joystick_arcade_2_buttons`, `joystick_arcade_3_buttons`, `joystick_arcade_4_buttons`, `joystick_arcade_6_buttons`, `trackball_generic`, `lightgun_generic`, `lightgun_nintendo`, `keyboard_generic`, `mouse_generic`, `mouse_amiga`, `keyboard_mouse_generic`, `steering_wheel_generic`, `wii_remote_nintendo`, `wii_remote_nunchuck_nintendo`, `joycon_left_or_right_nintendo`, `joycon_pair_nintendo`, `unknown`. + - `gamepad_generic`, `gamepad_xbox`, `gamepad_playstation`, `gamepad_nintendo_nes`, `gamepad_nintendo_snes`, `gamepad_nintendo_64`, `joystick_generic`, `joystick_arcade_no_buttons`, `joystick_arcade_1_button`, `joystick_arcade_2_buttons`, `joystick_arcade_3_buttons`, `joystick_arcade_4_buttons`, `joystick_arcade_5_buttons`, `joystick_arcade_6_buttons`, `flight_stick_generic`, `spinner_generic`, `trackball_generic`, `lightgun_generic`, `lightgun_nintendo`, `keyboard_generic`, `mouse_generic`, `mouse_amiga`, `keyboard_and_mouse_generic`, `steering_wheel_generic`, `wii_remote_nintendo`, `wii_remote_and_nunchuk_nintendo`, `joycon_left_or_right_nintendo`, `joycon_pair_nintendo`, `unknown`. * `visible` - type: BOOLEAN. - If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view. * `zIndex` - type: FLOAT. @@ -988,7 +988,7 @@ It's strongly recommended to use the same image dimensions for all badges as var * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. * `legacyZIndexMode` - type: BOOLEAN - - If true, the carousel will ignore zIndex and always render on top of other components. + - If true, the carousel will ignore zIndex and always render on top of other components. Default is `true`. The help system is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Keep in mind the "default" settings (including position) are used whenever the user opens a menu. diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index d56306a2a..eac9f9c62 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -626,18 +626,19 @@ ES-DE supports the two scrapers [ScreenScraper.fr](https://www.screenscraper.fr) Here's an overview of what's supported when using these scrapers: -| Media type or option | ScreenScraper | TheGamesDB | -| :----------------------- | :-----------: | :--------: | -| Region (EU/JP/US/WOR) | Yes | No | -| Multi-language | Yes | No | -| Game names | Yes | Yes | -| Ratings | Yes | No | -| Other game metadata | Yes | Yes | -| Videos | Yes | No | -| Screenshots | Yes | Yes | -| Box covers (2D) | Yes | Yes | -| Marquees/wheels | Yes | Yes | -| 3D boxes | Yes | No | +| Media type or option | ScreenScraper | TheGamesDB | +| :-------------------------------- | :-----------: | :--------: | +| Region (EU/JP/US/WOR) | Yes | No | +| Multi-language | Yes | No | +| Game names | Yes | Yes | +| Ratings | Yes | No | +| Controllers (arcade systems only) | Yes | No | +| Other game metadata | Yes | Yes | +| Videos | Yes | No | +| Screenshots | Yes | Yes | +| Box covers (2D) | Yes | Yes | +| Marquees/wheels | Yes | Yes | +| 3D boxes | Yes | No | The category **Other game metadata** includes Description, Release date, Developer, Publisher, Genre and Players. @@ -778,6 +779,10 @@ Whether to scrape the names of the games. This does not affect the actual files Downloads game ratings. +**Scrape controllers (arcade systems only)** _(ScreenScraper only)_ + +Scrapes controller metadata which is used to set the correct controller badge. This is only available for MAME arcade games, for systems such as _arcade_, _mame_, _neogeo_, _fba_ etc. This is so because ScreenScraper does not seem to provide controller information for other platforms. The type of controllers that are scraped are _joystick_ (separated into entries from no buttons up to 6 buttons), _steering wheel_, _flight stick_, _spinner_, _trackball_ and _lightgun_. + **Scrape other metadata** This includes the game description, release date, developer, publisher, genre and the number of players. @@ -1376,7 +1381,7 @@ The following filters can be applied: **Broken** -**Controller badge** +**Controller** **Alternative emulator** @@ -1482,7 +1487,7 @@ This option will hide most metadata fields as well as any badges. The intention A statistics counter that tracks how many times you have played the game. You normally don't need to touch this, but if you want to, the possibility is there. -**Controller badge** +**Controller** This entry provides a selection of controller icons that are built into ES-DE (although the theme set can override the actual graphics files). The selected icon will be displayed as a badge if the current theme set support badges. This functionality is only cosmetic and will not affect the actual emulators. From d5fa6bc82c05eb8db769d2fd4d9d1b554246a253 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 28 Oct 2021 21:00:23 +0200 Subject: [PATCH 11/54] Added support for scraping title screens, box back covers and physical media images. --- es-app/src/FileData.cpp | 45 +++++++--- es-app/src/FileData.h | 5 +- es-app/src/MediaViewer.cpp | 20 ++++- es-app/src/MediaViewer.h | 3 +- es-app/src/guis/GuiMediaViewerOptions.cpp | 4 +- es-app/src/guis/GuiScraperMenu.cpp | 90 ++++++++++++++++--- es-app/src/guis/GuiScraperSearch.cpp | 3 + es-app/src/scrapers/GamesDBJSONScraper.cpp | 4 + es-app/src/scrapers/Scraper.cpp | 74 +++++++++++++++ es-app/src/scrapers/Scraper.h | 6 ++ es-app/src/scrapers/ScreenScraper.cpp | 11 ++- es-app/src/scrapers/ScreenScraper.h | 3 + .../src/views/gamelist/BasicGameListView.cpp | 21 +++++ .../src/views/gamelist/GridGameListView.cpp | 21 +++++ es-core/src/Settings.cpp | 3 + 15 files changed, 283 insertions(+), 30 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index cc205a940..8174cdde2 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -208,7 +208,7 @@ const std::string FileData::getMediaDirectory() return mediaDirPath; } -const std::string FileData::getMediafilePath(std::string subdirectory, std::string mediatype) const +const std::string FileData::getMediafilePath(std::string subdirectory) const { const std::vector extList = {".png", ".jpg"}; std::string subFolders; @@ -234,53 +234,76 @@ const std::string FileData::getMediafilePath(std::string subdirectory, std::stri const std::string FileData::getImagePath() const { // Look for a mix image (a combination of screenshot, 2D/3D box and marquee). - std::string image = getMediafilePath("miximages", "miximage"); + std::string image = getMediafilePath("miximages"); if (image != "") return image; // If no mix image was found, try screenshot instead. - image = getMediafilePath("screenshots", "screenshot"); + image = getMediafilePath("screenshots"); + if (image != "") + return image; + + // If no screenshot image was found, try title screen instead. + image = getMediafilePath("titlescreens"); if (image != "") return image; // If no screenshot was found either, try cover. - return getMediafilePath("covers", "cover"); + return getMediafilePath("covers"); } const std::string FileData::get3DBoxPath() const { // Return path to the 3D box image. - return getMediafilePath("3dboxes", "3dbox"); + return getMediafilePath("3dboxes"); +} + +const std::string FileData::getBackCoverPath() const +{ + // Return path to the box back cover image. + return getMediafilePath("backcovers"); } const std::string FileData::getCoverPath() const { - // Return path to the cover image. - return getMediafilePath("covers", "cover"); + // Return path to the box cover image. + return getMediafilePath("covers"); } const std::string FileData::getMarqueePath() const { // Return path to the marquee image. - return getMediafilePath("marquees", "marquee"); + return getMediafilePath("marquees"); +} + +const std::string FileData::getPhysicalMediaPath() const +{ + // Return path to the physical media image. + return getMediafilePath("physicalmedia"); } const std::string FileData::getMiximagePath() const { // Return path to the miximage. - return getMediafilePath("miximages", "miximage"); + return getMediafilePath("miximages"); } const std::string FileData::getScreenshotPath() const { // Return path to the screenshot image. - return getMediafilePath("screenshots", "screenshot"); + return getMediafilePath("screenshots"); +} + +const std::string FileData::getTitleScreenPath() const +{ + // Return path to the title screen image. + return getMediafilePath("titlescreens"); } const std::string FileData::getThumbnailPath() const { // Return path to the thumbnail image. - return getMediafilePath("thumbnails", "thumbnail"); + return getMediafilePath("thumbnails"); } const std::string FileData::getVideoPath() const diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 9621fd006..2411a4dd6 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -60,13 +60,16 @@ public: const bool getHasFoldersFlag() { return mHasFolders; } static const std::string getROMDirectory(); static const std::string getMediaDirectory(); - const std::string getMediafilePath(std::string subdirectory, std::string mediatype) const; + const std::string getMediafilePath(std::string subdirectory) const; const std::string getImagePath() const; const std::string get3DBoxPath() const; + const std::string getBackCoverPath() const; const std::string getCoverPath() const; const std::string getMarqueePath() const; + const std::string getPhysicalMediaPath() const; const std::string getMiximagePath() const; const std::string getScreenshotPath() const; + const std::string getTitleScreenPath() const; const std::string getThumbnailPath() const; const std::string getVideoPath() const; diff --git a/es-app/src/MediaViewer.cpp b/es-app/src/MediaViewer.cpp index 06f59e515..c24e9cf1c 100644 --- a/es-app/src/MediaViewer.cpp +++ b/es-app/src/MediaViewer.cpp @@ -41,7 +41,8 @@ bool MediaViewer::startMediaViewer(FileData* game) mHasVideo = false; mHasImages = false; mCurrentImageIndex = 0; - mScreenShotIndex = -1; + mScreenshotIndex = -1; + mTitleScreenIndex = -1; mGame = game; @@ -125,9 +126,12 @@ void MediaViewer::render(const glm::mat4& /*parentTrans*/) mImage->render(trans); #if defined(USE_OPENGL_21) - if (mCurrentImageIndex == mScreenShotIndex && + if (mCurrentImageIndex == mScreenshotIndex && Settings::getInstance()->getBool("MediaViewerScreenshotScanlines")) Renderer::shaderPostprocessing(Renderer::SHADER_SCANLINES); + else if (mCurrentImageIndex == mTitleScreenIndex && + Settings::getInstance()->getBool("MediaViewerScreenshotScanlines")) + Renderer::shaderPostprocessing(Renderer::SHADER_SCANLINES); #endif // This is necessary so that the video loops if viewing an image when @@ -164,15 +168,23 @@ void MediaViewer::findMedia() if (!mHasVideo && (mediaFile = mGame->getScreenshotPath()) != "") { mImageFiles.push_back(mediaFile); - mScreenShotIndex = 0; + mScreenshotIndex = 0; } if ((mediaFile = mGame->getCoverPath()) != "") mImageFiles.push_back(mediaFile); + if ((mediaFile = mGame->getBackCoverPath()) != "") + mImageFiles.push_back(mediaFile); + + if ((mediaFile = mGame->getTitleScreenPath()) != "") { + mImageFiles.push_back(mediaFile); + mTitleScreenIndex = static_cast(mImageFiles.size() - 1); + } + if (mHasVideo && (mediaFile = mGame->getScreenshotPath()) != "") { mImageFiles.push_back(mediaFile); - mScreenShotIndex = static_cast(mImageFiles.size() - 1); + mScreenshotIndex = static_cast(mImageFiles.size() - 1); } if ((mediaFile = mGame->getMiximagePath()) != "") diff --git a/es-app/src/MediaViewer.h b/es-app/src/MediaViewer.h index d60481a27..e84c696e0 100644 --- a/es-app/src/MediaViewer.h +++ b/es-app/src/MediaViewer.h @@ -44,7 +44,8 @@ private: bool mDisplayingImage; int mCurrentImageIndex; - int mScreenShotIndex; + int mScreenshotIndex; + int mTitleScreenIndex; std::string mVideoFile; std::vector mImageFiles; diff --git a/es-app/src/guis/GuiMediaViewerOptions.cpp b/es-app/src/guis/GuiMediaViewerOptions.cpp index 38468beca..8732b7359 100644 --- a/es-app/src/guis/GuiMediaViewerOptions.cpp +++ b/es-app/src/guis/GuiMediaViewerOptions.cpp @@ -66,11 +66,11 @@ GuiMediaViewerOptions::GuiMediaViewerOptions(Window* window, const std::string& } }); - // Render scanlines for screenshots using a shader. + // Render scanlines for screenshots and title screens using a shader. auto screenshot_scanlines = std::make_shared(mWindow); screenshot_scanlines->setState( Settings::getInstance()->getBool("MediaViewerScreenshotScanlines")); - addWithLabel("RENDER SCANLINES FOR SCREENSHOTS", screenshot_scanlines); + addWithLabel("RENDER SCANLINES FOR SCREENSHOTS AND TITLES", screenshot_scanlines); addSaveFunc([screenshot_scanlines, this] { if (screenshot_scanlines->getState() != Settings::getInstance()->getBool("MediaViewerScreenshotScanlines")) { diff --git a/es-app/src/guis/GuiScraperMenu.cpp b/es-app/src/guis/GuiScraperMenu.cpp index 8a9692332..a792bc7ac 100644 --- a/es-app/src/guis/GuiScraperMenu.cpp +++ b/es-app/src/guis/GuiScraperMenu.cpp @@ -221,7 +221,7 @@ void GuiScraperMenu::openContentOptions() // Scrape game names. auto scrape_game_names = std::make_shared(mWindow); scrape_game_names->setState(Settings::getInstance()->getBool("ScrapeGameNames")); - s->addWithLabel("SCRAPE GAME NAMES", scrape_game_names); + s->addWithLabel("GAME NAMES", scrape_game_names); s->addSaveFunc([scrape_game_names, s] { if (scrape_game_names->getState() != Settings::getInstance()->getBool("ScrapeGameNames")) { Settings::getInstance()->setBool("ScrapeGameNames", scrape_game_names->getState()); @@ -232,7 +232,7 @@ void GuiScraperMenu::openContentOptions() // Scrape ratings. auto scrape_ratings = std::make_shared(mWindow); scrape_ratings->setState(Settings::getInstance()->getBool("ScrapeRatings")); - s->addWithLabel("SCRAPE RATINGS", scrape_ratings); + s->addWithLabel("RATINGS", scrape_ratings); s->addSaveFunc([scrape_ratings, s] { if (scrape_ratings->getState() != Settings::getInstance()->getBool("ScrapeRatings")) { Settings::getInstance()->setBool("ScrapeRatings", scrape_ratings->getState()); @@ -252,7 +252,7 @@ void GuiScraperMenu::openContentOptions() // Scrape controllers (arcade systems only). auto scrapeControllers = std::make_shared(mWindow); scrapeControllers->setState(Settings::getInstance()->getBool("ScrapeControllers")); - s->addWithLabel("SCRAPE CONTROLLERS (ARCADE SYSTEMS ONLY)", scrapeControllers); + s->addWithLabel("CONTROLLERS (ARCADE SYSTEMS ONLY)", scrapeControllers); s->addSaveFunc([scrapeControllers, s] { if (scrapeControllers->getState() != Settings::getInstance()->getBool("ScrapeControllers")) { @@ -274,7 +274,7 @@ void GuiScraperMenu::openContentOptions() // Scrape other metadata. auto scrape_metadata = std::make_shared(mWindow); scrape_metadata->setState(Settings::getInstance()->getBool("ScrapeMetadata")); - s->addWithLabel("SCRAPE OTHER METADATA", scrape_metadata); + s->addWithLabel("OTHER METADATA", scrape_metadata); s->addSaveFunc([scrape_metadata, s] { if (scrape_metadata->getState() != Settings::getInstance()->getBool("ScrapeMetadata")) { Settings::getInstance()->setBool("ScrapeMetadata", scrape_metadata->getState()); @@ -285,7 +285,7 @@ void GuiScraperMenu::openContentOptions() // Scrape videos. auto scrape_videos = std::make_shared(mWindow); scrape_videos->setState(Settings::getInstance()->getBool("ScrapeVideos")); - s->addWithLabel("SCRAPE VIDEOS", scrape_videos); + s->addWithLabel("VIDEOS", scrape_videos); s->addSaveFunc([scrape_videos, s] { if (scrape_videos->getState() != Settings::getInstance()->getBool("ScrapeVideos")) { Settings::getInstance()->setBool("ScrapeVideos", scrape_videos->getState()); @@ -305,7 +305,7 @@ void GuiScraperMenu::openContentOptions() // Scrape screenshots images. auto scrape_screenshots = std::make_shared(mWindow); scrape_screenshots->setState(Settings::getInstance()->getBool("ScrapeScreenshots")); - s->addWithLabel("SCRAPE SCREENSHOT IMAGES", scrape_screenshots); + s->addWithLabel("SCREENSHOT IMAGES", scrape_screenshots); s->addSaveFunc([scrape_screenshots, s] { if (scrape_screenshots->getState() != Settings::getInstance()->getBool("ScrapeScreenshots")) { @@ -314,10 +314,22 @@ void GuiScraperMenu::openContentOptions() } }); - // Scrape cover images. + // Scrape title screen images. + auto scrapeTitleScreens = std::make_shared(mWindow); + scrapeTitleScreens->setState(Settings::getInstance()->getBool("ScrapeTitleScreens")); + s->addWithLabel("TITLE SCREEN IMAGES", scrapeTitleScreens); + s->addSaveFunc([scrapeTitleScreens, s] { + if (scrapeTitleScreens->getState() != + Settings::getInstance()->getBool("ScrapeTitleScreens")) { + Settings::getInstance()->setBool("ScrapeTitleScreens", scrapeTitleScreens->getState()); + s->setNeedsSaving(); + } + }); + + // Scrape box cover images. auto scrape_covers = std::make_shared(mWindow); scrape_covers->setState(Settings::getInstance()->getBool("ScrapeCovers")); - s->addWithLabel("SCRAPE BOX COVER IMAGES", scrape_covers); + s->addWithLabel("BOX COVER IMAGES", scrape_covers); s->addSaveFunc([scrape_covers, s] { if (scrape_covers->getState() != Settings::getInstance()->getBool("ScrapeCovers")) { Settings::getInstance()->setBool("ScrapeCovers", scrape_covers->getState()); @@ -325,10 +337,31 @@ void GuiScraperMenu::openContentOptions() } }); + // Scrape box back cover images. + auto scrapeBackCovers = std::make_shared(mWindow); + scrapeBackCovers->setState(Settings::getInstance()->getBool("ScrapeBackCovers")); + s->addWithLabel("BOX BACK COVER IMAGES", scrapeBackCovers); + s->addSaveFunc([scrapeBackCovers, s] { + if (scrapeBackCovers->getState() != Settings::getInstance()->getBool("ScrapeBackCovers")) { + Settings::getInstance()->setBool("ScrapeBackCovers", scrapeBackCovers->getState()); + s->setNeedsSaving(); + } + }); + + // Box back cover images are not supported by TheGamesDB, so gray out the option if this + // scraper is selected. + if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { + scrapeBackCovers->setEnabled(false); + scrapeBackCovers->setOpacity(DISABLED_OPACITY); + scrapeBackCovers->getParent() + ->getChild(scrapeBackCovers->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); + } + // Scrape marquee images. auto scrape_marquees = std::make_shared(mWindow); scrape_marquees->setState(Settings::getInstance()->getBool("ScrapeMarquees")); - s->addWithLabel("SCRAPE MARQUEE (WHEEL) IMAGES", scrape_marquees); + s->addWithLabel("MARQUEE (WHEEL) IMAGES", scrape_marquees); s->addSaveFunc([scrape_marquees, s] { if (scrape_marquees->getState() != Settings::getInstance()->getBool("ScrapeMarquees")) { Settings::getInstance()->setBool("ScrapeMarquees", scrape_marquees->getState()); @@ -339,7 +372,7 @@ void GuiScraperMenu::openContentOptions() // Scrape 3D box images. auto scrape_3dboxes = std::make_shared(mWindow); scrape_3dboxes->setState(Settings::getInstance()->getBool("Scrape3DBoxes")); - s->addWithLabel("SCRAPE 3D BOX IMAGES", scrape_3dboxes); + s->addWithLabel("3D BOX IMAGES", scrape_3dboxes); s->addSaveFunc([scrape_3dboxes, s] { if (scrape_3dboxes->getState() != Settings::getInstance()->getBool("Scrape3DBoxes")) { Settings::getInstance()->setBool("Scrape3DBoxes", scrape_3dboxes->getState()); @@ -357,6 +390,29 @@ void GuiScraperMenu::openContentOptions() ->setOpacity(DISABLED_OPACITY); } + // Scrape physical media images. + auto scrapePhysicalMedia = std::make_shared(mWindow); + scrapePhysicalMedia->setState(Settings::getInstance()->getBool("ScrapePhysicalMedia")); + s->addWithLabel("PHYSICAL MEDIA IMAGES", scrapePhysicalMedia); + s->addSaveFunc([scrapePhysicalMedia, s] { + if (scrapePhysicalMedia->getState() != + Settings::getInstance()->getBool("ScrapePhysicalMedia")) { + Settings::getInstance()->setBool("ScrapePhysicalMedia", + scrapePhysicalMedia->getState()); + s->setNeedsSaving(); + } + }); + + // Physical media images are not supported by TheGamesDB, so gray out the option if this + // scraper is selected. + if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { + scrapePhysicalMedia->setEnabled(false); + scrapePhysicalMedia->setOpacity(DISABLED_OPACITY); + scrapePhysicalMedia->getParent() + ->getChild(scrapePhysicalMedia->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); + } + mWindow->pushGui(s); } @@ -884,10 +940,19 @@ void GuiScraperMenu::start() contentToScrape = true; break; } + if (Settings::getInstance()->getBool("ScrapeTitleScreens")) { + contentToScrape = true; + break; + } if (Settings::getInstance()->getBool("ScrapeCovers")) { contentToScrape = true; break; } + if (scraperService == "screenscraper" && + Settings::getInstance()->getBool("ScrapeBackCovers")) { + contentToScrape = true; + break; + } if (Settings::getInstance()->getBool("ScrapeMarquees")) { contentToScrape = true; break; @@ -897,6 +962,11 @@ void GuiScraperMenu::start() contentToScrape = true; break; } + if (scraperService == "screenscraper" && + Settings::getInstance()->getBool("ScrapePhysicalMedia")) { + contentToScrape = true; + break; + } } while (0); if (!contentToScrape) { diff --git a/es-app/src/guis/GuiScraperSearch.cpp b/es-app/src/guis/GuiScraperSearch.cpp index 83f0cb6fe..840fc2b4f 100644 --- a/es-app/src/guis/GuiScraperSearch.cpp +++ b/es-app/src/guis/GuiScraperSearch.cpp @@ -678,9 +678,12 @@ void GuiScraperSearch::update(int deltaTime) for (unsigned int i = 0; i < results_scrape.size(); i++) { if (results_scrape[i].gameID == it->gameID) { results_scrape[i].box3DUrl = it->box3DUrl; + results_scrape[i].backcoverUrl = it->backcoverUrl; results_scrape[i].coverUrl = it->coverUrl; results_scrape[i].marqueeUrl = it->marqueeUrl; results_scrape[i].screenshotUrl = it->screenshotUrl; + results_scrape[i].titlescreenUrl = it->titlescreenUrl; + results_scrape[i].physicalmediaUrl = it->physicalmediaUrl; results_scrape[i].videoUrl = it->videoUrl; results_scrape[i].scraperRequestAllowance = it->scraperRequestAllowance; results_scrape[i].mediaURLFetch = COMPLETED; diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index 12a4b7047..046009f70 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -378,6 +378,7 @@ void processMediaURLs(const Value& images, result.coverUrl = ""; result.marqueeUrl = ""; result.screenshotUrl = ""; + result.titlescreenUrl = ""; // Quite excessive testing for valid values, but you never know what the server has // returned and we don't want to crash the program due to malformed data. @@ -399,6 +400,9 @@ void processMediaURLs(const Value& images, if (mediatype == "screenshot") if (gameMedia[i]["filename"].IsString()) result.screenshotUrl = base_url + gameMedia[i]["filename"].GetString(); + if (mediatype == "titlescreen") + if (gameMedia[i]["filename"].IsString()) + result.titlescreenUrl = base_url + gameMedia[i]["filename"].GetString(); } } result.mediaURLFetch = COMPLETED; diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index c889f54b2..aa54264a3 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -185,6 +185,14 @@ MDResolveHandle::MDResolveHandle(const ScraperSearchResult& result, mediaFileInfo.resizeFile = true; scrapeFiles.push_back(mediaFileInfo); } + if (Settings::getInstance()->getBool("ScrapeBackCovers") && result.backcoverUrl != "") { + mediaFileInfo.fileURL = result.backcoverUrl; + mediaFileInfo.fileFormat = result.backcoverFormat; + mediaFileInfo.subDirectory = "backcovers"; + mediaFileInfo.existingMediaFile = search.game->getBackCoverPath(); + mediaFileInfo.resizeFile = true; + scrapeFiles.push_back(mediaFileInfo); + } if (Settings::getInstance()->getBool("ScrapeCovers") && result.coverUrl != "") { mediaFileInfo.fileURL = result.coverUrl; mediaFileInfo.fileFormat = result.coverFormat; @@ -193,6 +201,14 @@ MDResolveHandle::MDResolveHandle(const ScraperSearchResult& result, mediaFileInfo.resizeFile = true; scrapeFiles.push_back(mediaFileInfo); } + if (Settings::getInstance()->getBool("ScrapePhysicalMedia") && result.physicalmediaUrl != "") { + mediaFileInfo.fileURL = result.physicalmediaUrl; + mediaFileInfo.fileFormat = result.physicalmediaFormat; + mediaFileInfo.subDirectory = "physicalmedia"; + mediaFileInfo.existingMediaFile = search.game->getPhysicalMediaPath(); + mediaFileInfo.resizeFile = true; + scrapeFiles.push_back(mediaFileInfo); + } if (Settings::getInstance()->getBool("ScrapeMarquees") && result.marqueeUrl != "") { mediaFileInfo.fileURL = result.marqueeUrl; mediaFileInfo.fileFormat = result.marqueeFormat; @@ -209,6 +225,14 @@ MDResolveHandle::MDResolveHandle(const ScraperSearchResult& result, mediaFileInfo.resizeFile = true; scrapeFiles.push_back(mediaFileInfo); } + if (Settings::getInstance()->getBool("ScrapeTitleScreens") && result.titlescreenUrl != "") { + mediaFileInfo.fileURL = result.titlescreenUrl; + mediaFileInfo.fileFormat = result.titlescreenFormat; + mediaFileInfo.subDirectory = "titlescreens"; + mediaFileInfo.existingMediaFile = search.game->getTitleScreenPath(); + mediaFileInfo.resizeFile = true; + scrapeFiles.push_back(mediaFileInfo); + } if (Settings::getInstance()->getBool("ScrapeVideos") && result.videoUrl != "") { mediaFileInfo.fileURL = result.videoUrl; mediaFileInfo.fileFormat = result.videoFormat; @@ -401,6 +425,56 @@ void MediaDownloadHandle::update() // Download is done, save it to disk. + // There's an incredibly annoying issue where some box back covers at ScreenScraper only contain + // a single color, like pure black or more commonly pure green. The hack below checks if the + // same pixel value is set throughout the image and if so skips the file saving. This is not + // very efficient but these images are not technically corrupt so the actual pixel values need + // to be read and compared. + if (Settings::getInstance()->getString("Scraper") == "screenscraper" && + mMediaType == "backcovers") { + bool emptyImage = false; + FREE_IMAGE_FORMAT imageFormat = FIF_UNKNOWN; + std::string imageData = mReq->getContent(); + FIMEMORY* memoryStream = FreeImage_OpenMemory(reinterpret_cast(&imageData.at(0)), + static_cast(imageData.size())); + imageFormat = FreeImage_GetFileTypeFromMemory(memoryStream, 0); + + if (imageFormat != FIF_UNKNOWN) { + emptyImage = true; + + FIBITMAP* tempImage = FreeImage_LoadFromMemory(imageFormat, memoryStream); + RGBQUAD firstPixel; + RGBQUAD currPixel; + + FreeImage_GetPixelColor(tempImage, 0, 0, &firstPixel); + + for (unsigned int x = 0; x < FreeImage_GetWidth(tempImage); x++) { + if (!emptyImage) + break; + for (unsigned int y = 0; y < FreeImage_GetHeight(tempImage); y++) { + FreeImage_GetPixelColor(tempImage, x, y, &currPixel); + if (currPixel.rgbBlue != firstPixel.rgbBlue || + currPixel.rgbGreen != firstPixel.rgbGreen || + currPixel.rgbRed != firstPixel.rgbRed) { + emptyImage = false; + break; + } + } + } + + FreeImage_Unload(tempImage); + } + FreeImage_CloseMemory(memoryStream); + + if (emptyImage) { + LOG(LogWarning) << "ScreenScraper: Image does not seem to contain any data, not saving " + "it to disk: \"" + << mSavePath << "\""; + setStatus(ASYNC_DONE); + return; + } + } + // This is just a temporary workaround to avoid saving media files to disk that are // actually just containing error messages from the scraper service. The proper solution // is to implement file checksum checks to determine if the server response contains valid diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index 4218effc4..81dde8c60 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -60,16 +60,22 @@ struct ScraperSearchResult { std::string thumbnailImageUrl; std::string box3DUrl; + std::string backcoverUrl; std::string coverUrl; std::string marqueeUrl; + std::string physicalmediaUrl; std::string screenshotUrl; + std::string titlescreenUrl; std::string videoUrl; // Needed to pre-set the image type. std::string box3DFormat; + std::string backcoverFormat; std::string coverFormat; std::string marqueeFormat; + std::string physicalmediaFormat; std::string screenshotFormat; + std::string titlescreenFormat; std::string videoFormat; // Indicates whether any new media files were downloaded and saved. diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index d6caa4885..8fa80b582 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -524,15 +524,24 @@ void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, // 3D box. processMedia(result, media_list, ssConfig.media_3dbox, result.box3DUrl, result.box3DFormat, region); - // Cover. + // Box back cover. + processMedia(result, media_list, ssConfig.media_backcover, result.backcoverUrl, + result.backcoverFormat, region); + // Box cover. processMedia(result, media_list, ssConfig.media_cover, result.coverUrl, result.coverFormat, region); // Marquee (wheel). processMedia(result, media_list, ssConfig.media_marquee, result.marqueeUrl, result.marqueeFormat, region); + // Physical media. + processMedia(result, media_list, ssConfig.media_physicalmedia, result.physicalmediaUrl, + result.physicalmediaFormat, region); // Screenshot. processMedia(result, media_list, ssConfig.media_screenshot, result.screenshotUrl, result.screenshotFormat, region); + // Title screen. + processMedia(result, media_list, ssConfig.media_titlescreen, result.titlescreenUrl, + result.titlescreenFormat, region); // Video. processMedia(result, media_list, ssConfig.media_video, result.videoUrl, result.videoFormat, region); diff --git a/es-app/src/scrapers/ScreenScraper.h b/es-app/src/scrapers/ScreenScraper.h index 3e07bf61b..68e509733 100644 --- a/es-app/src/scrapers/ScreenScraper.h +++ b/es-app/src/scrapers/ScreenScraper.h @@ -71,9 +71,12 @@ public: // std::string media_3dbox = "box-3D"; + std::string media_backcover = "box-2D-back"; std::string media_cover = "box-2D"; std::string media_marquee = "wheel"; + std::string media_physicalmedia = "support-2D"; std::string media_screenshot = "ss"; + std::string media_titlescreen = "sstitle"; std::string media_video = "video"; bool isArcadeSystem; diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index f6d2a4002..632b89d61 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -250,6 +250,13 @@ void BasicGameListView::removeMedia(FileData* game) removeEmptyDirFunc(systemMediaDir, mediaType, path); } + if (Utils::FileSystem::exists(game->getTitleScreenPath())) { + mediaType = "titlescreens"; + path = game->getTitleScreenPath(); + Utils::FileSystem::removeFile(path); + removeEmptyDirFunc(systemMediaDir, mediaType, path); + } + if (Utils::FileSystem::exists(game->getCoverPath())) { mediaType = "covers"; path = game->getCoverPath(); @@ -257,6 +264,13 @@ void BasicGameListView::removeMedia(FileData* game) removeEmptyDirFunc(systemMediaDir, mediaType, path); } + if (Utils::FileSystem::exists(game->getBackCoverPath())) { + mediaType = "backcovers"; + path = game->getBackCoverPath(); + Utils::FileSystem::removeFile(path); + removeEmptyDirFunc(systemMediaDir, mediaType, path); + } + if (Utils::FileSystem::exists(game->getMarqueePath())) { mediaType = "marquees"; path = game->getMarqueePath(); @@ -271,6 +285,13 @@ void BasicGameListView::removeMedia(FileData* game) removeEmptyDirFunc(systemMediaDir, mediaType, path); } + if (Utils::FileSystem::exists(game->getPhysicalMediaPath())) { + mediaType = "physicalmedia"; + path = game->getPhysicalMediaPath(); + Utils::FileSystem::removeFile(path); + removeEmptyDirFunc(systemMediaDir, mediaType, path); + } + if (Utils::FileSystem::exists(game->getThumbnailPath())) { mediaType = "thumbnails"; path = game->getThumbnailPath(); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 284762deb..af429a7ce 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -600,6 +600,13 @@ void GridGameListView::removeMedia(FileData* game) removeEmptyDirFunc(systemMediaDir, mediaType, path); } + if (Utils::FileSystem::exists(game->getTitleScreenPath())) { + mediaType = "titlescreens"; + path = game->getTitleScreenPath(); + Utils::FileSystem::removeFile(path); + removeEmptyDirFunc(systemMediaDir, mediaType, path); + } + if (Utils::FileSystem::exists(game->getCoverPath())) { mediaType = "covers"; path = game->getCoverPath(); @@ -607,6 +614,13 @@ void GridGameListView::removeMedia(FileData* game) removeEmptyDirFunc(systemMediaDir, mediaType, path); } + if (Utils::FileSystem::exists(game->getBackCoverPath())) { + mediaType = "backcovers"; + path = game->getBackCoverPath(); + Utils::FileSystem::removeFile(path); + removeEmptyDirFunc(systemMediaDir, mediaType, path); + } + if (Utils::FileSystem::exists(game->getMarqueePath())) { mediaType = "marquees"; path = game->getMarqueePath(); @@ -621,6 +635,13 @@ void GridGameListView::removeMedia(FileData* game) removeEmptyDirFunc(systemMediaDir, mediaType, path); } + if (Utils::FileSystem::exists(game->getPhysicalMediaPath())) { + mediaType = "physicalmedia"; + path = game->getPhysicalMediaPath(); + Utils::FileSystem::removeFile(path); + removeEmptyDirFunc(systemMediaDir, mediaType, path); + } + if (Utils::FileSystem::exists(game->getThumbnailPath())) { mediaType = "thumbnails"; path = game->getThumbnailPath(); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 2d4d406c8..fc31311f7 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -108,9 +108,12 @@ void Settings::setDefaults() mBoolMap["ScrapeMetadata"] = {true, true}; mBoolMap["ScrapeVideos"] = {true, true}; mBoolMap["ScrapeScreenshots"] = {true, true}; + mBoolMap["ScrapeTitleScreens"] = {true, true}; mBoolMap["ScrapeCovers"] = {true, true}; + mBoolMap["ScrapeBackCovers"] = {true, true}; mBoolMap["ScrapeMarquees"] = {true, true}; mBoolMap["Scrape3DBoxes"] = {true, true}; + mBoolMap["ScrapePhysicalMedia"] = {true, true}; mStringMap["MiximageResolution"] = {"1280x960", "1280x960"}; mStringMap["MiximageScreenshotScaling"] = {"sharp", "sharp"}; From 2c34a33ece4a7504a33b98eeefeeb625cd3b222b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 28 Oct 2021 21:04:37 +0200 Subject: [PATCH 12/54] Documentation update. --- CHANGELOG.md | 3 +++ USERGUIDE-DEV.md | 50 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5a2c38e5..a41f032a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,12 +15,15 @@ * Added a virtual keyboard, partly based on code from batocera-emulationstation * Added badges that indicate favorite/completed/broken games as well as games suitable for children and those with a selected alternative emulator * Added game-specific controllers that are selectable via the metadata editor and displayed as a controller badge +* Added scraping of title screens, box back covers and physical media images +* Updated the media viewer to display title screens and box back cover images * Added the ability to make complementary game system customizations without having to replace the entire bundled es_systems.xml file * Added support for an optional \ tag for es_systems.xml that can be used to override the default \ systems sorting * Added menu scroll indicators showing if there are additional entries available below or above what's currently shown on screen * Added scraping of controller metadata (only for ScreenScraper and only for arcade systems) * Improved the layout of the scraper GUIs (single-game scraper and multi-scraper) * Added horizontal scrolling of long game names to the scraper GUIs +* Removed the "Scrape" text prefix from the scraper content settings * Improved the gamelist filter screen to not allow filtering of values where there is no actual data to filter, e.g. Favorites for a system with no favorite games * Grayed out all fields in the gamelist filter screen where there is no data to filter, previously some fields were removed entirely and some could still be used * Added the ability to filter on blank/unknown values for Genre, Player, Developer, Publisher and Alternative emulator. diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index eac9f9c62..6444d3fe0 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -636,14 +636,21 @@ Here's an overview of what's supported when using these scrapers: | Other game metadata | Yes | Yes | | Videos | Yes | No | | Screenshots | Yes | Yes | -| Box covers (2D) | Yes | Yes | +| Title screens | Yes | Yes | +| Box covers | Yes | Yes | +| Box back covers | Yes | No | | Marquees/wheels | Yes | Yes | | 3D boxes | Yes | No | +| Physical media | Yes | No | The category **Other game metadata** includes Description, Release date, Developer, Publisher, Genre and Players. The **Multi-language** support includes translated game genres and game descriptions for a number of languages. +**Controllers** is metadata indicating the controller type (it's not images of controllers). + +**Physical media** means images of cartridges, diskettes, tapes, CD-ROMs etc. that were used to distribute the games. + There are two approaches to scraping, either for a single game from the metadata editor, or for many games and systems using the multi-scraper. ![alt text](images/es-de_scraper_running.png "ES-DE Scraper Running") @@ -695,10 +702,13 @@ C:\Users\Myusername\.emulationstation\downloaded_media\c64\screenshots\ The media directories per game system are: * 3dboxes +* backcovers * covers * marquees * miximages +* physicalmedia * screenshots +* titlescreens * videos The miximages are generated by ES-DE. Normally that takes place automatically when scraping, but in this example of manually copying existing media files, the miximage offline generator should be used instead. This tool can generate the miximages for the complete game collection in one go. How that works is explained elsewhere in this guide. @@ -771,41 +781,53 @@ The password as registered on screenscraper.fr. This is masked using asterisks o Describes the content types to include in the scraping. -**Scrape game names** +**Game names** Whether to scrape the names of the games. This does not affect the actual files on the filesystem and the game name is primarily used for appearance and sorting purposes. The downloaded media files are matched against the physical game files on the filesystem, and not against this metadata. See the comments under _Overwrite files and data_ below to understand some additional implications regarding game names. -**Scrape ratings** _(ScreenScraper only)_ +**Ratings** _(ScreenScraper only)_ Downloads game ratings. -**Scrape controllers (arcade systems only)** _(ScreenScraper only)_ +**Controllers (arcade systems only)** _(ScreenScraper only)_ Scrapes controller metadata which is used to set the correct controller badge. This is only available for MAME arcade games, for systems such as _arcade_, _mame_, _neogeo_, _fba_ etc. This is so because ScreenScraper does not seem to provide controller information for other platforms. The type of controllers that are scraped are _joystick_ (separated into entries from no buttons up to 6 buttons), _steering wheel_, _flight stick_, _spinner_, _trackball_ and _lightgun_. -**Scrape other metadata** +**Other metadata** This includes the game description, release date, developer, publisher, genre and the number of players. -**Scrape videos** _(ScreenScraper only)_ +**Videos** _(ScreenScraper only)_ Videos of actual gameplay. -**Scrape screenshot images** +**Screenshot images** Screenshot images of actual gameplay. -**Scrape box cover images** +**Title screen images** -Cover art. +Screenshot images of the title screen. -**Scrape marquee (wheel) images** +**Box cover images** + +Cover art, front of box/case. + +**Box back cover images** _(ScreenScraper only)_ + +Back of box/case. + +**Marquee (wheel) images** Logotype for the game. -**Scrape 3D box images** _(ScreenScraper only)_ +**3D box images** _(ScreenScraper only)_ -These are primarily used for generating miximages. +These are only used for generating miximages. + +**Physical media images** _(ScreenScraper only)_ + +Images of cartridges, diskettes, tapes, CD-ROMs etc. that were used to distribute the games. These are only used for generating miximages. #### Miximage settings @@ -1027,9 +1049,9 @@ Whether to use a shader to render scanlines for the videos. Be aware that this i Whether to use a shader to render a slight horizontal blur which somewhat simulates a well-used CRT monitor. Be aware that this is quite demanding for the GPU. -**Render scanlines for screenshots** _(OpenGL renderer only)_ +**Render scanlines for screenshots and titles** _(OpenGL renderer only)_ -Whether to use a shader to render scanlines for the screenshot images. +Whether to use a shader to render scanlines for the screenshot and title screen images. #### Screensaver settings From ee0fe9a8d1be09b98cd0a711e9fd11b1d3bdedb0 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 28 Oct 2021 22:58:04 +0200 Subject: [PATCH 13/54] Fixed an issue where the system carousel would get the wrong zIndex value. --- es-app/src/views/SystemView.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index f60a9a552..55fb6d81f 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -686,6 +686,7 @@ void SystemView::getDefaultElements(void) mCarousel.logoSize.y = 0.155f * mSize.y; mCarousel.maxLogoCount = 3; mCarousel.zIndex = 40.0f; + mCarousel.legacyZIndexMode = true; // System info bar. mSystemInfo.setSize(mSize.x, mSystemInfo.getFont()->getLetterHeight() * 2.2f); From a6f72ff934b764238b6dd1cb61e249d58b41f220 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 29 Oct 2021 19:38:45 +0200 Subject: [PATCH 14/54] Replaced a hack in NinePatchComponent with a proper solution. --- es-core/src/components/NinePatchComponent.cpp | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index e1b62b366..9755892b0 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -47,19 +47,19 @@ void NinePatchComponent::updateColors() void NinePatchComponent::buildVertices() { + if (mSize.x == 0.0f || mSize.y == 0.0f) + return; + if (mVertices != nullptr) delete[] mVertices; - // Scale the corner size relative to the screen resolution, but keep the scale factor - // within reason as extreme resolutions may cause artifacts. Any "normal" resolution - // (e.g. from 720p to 4K) will be within these boundaries though. - float scaleFactor; - if (Renderer::getScreenWidth() > Renderer::getScreenHeight()) - scaleFactor = glm::clamp(Renderer::getScreenHeightModifier(), 0.4f, 3.0f); - else - scaleFactor = glm::clamp(Renderer::getScreenWidthModifier(), 0.4f, 3.0f); + // Scale the corner size relative to the screen resolution. + glm::vec2 relCornerSize = glm::round(mCornerSize * Renderer::getScreenHeightModifier()); - mTexture = TextureResource::get(mPath, false, false, false, true, true, scaleFactor); + mTexture = TextureResource::get(mPath, false, false, false); + glm::vec2 texSize = relCornerSize * 3.0f; + + mTexture->rasterizeAt(texSize.x, texSize.y); if (mTexture->getSize() == glm::ivec2{}) { mVertices = nullptr; @@ -69,19 +69,16 @@ void NinePatchComponent::buildVertices() mVertices = new Renderer::Vertex[6 * 9]; - glm::vec2 texSize{static_cast(mTexture->getSize().x), - static_cast(mTexture->getSize().y)}; - - const float imgSizeX[3]{mCornerSize.x, mSize.x - mCornerSize.x * 2.0f, mCornerSize.x}; - const float imgSizeY[3]{mCornerSize.y, mSize.y - mCornerSize.y * 2.0f, mCornerSize.y}; + const float imgSizeX[3]{relCornerSize.x, mSize.x - relCornerSize.x * 2.0f, relCornerSize.x}; + const float imgSizeY[3]{relCornerSize.y, mSize.y - relCornerSize.y * 2.0f, relCornerSize.y}; const float imgPosX[3]{0, imgSizeX[0], imgSizeX[0] + imgSizeX[1]}; const float imgPosY[3]{0, imgSizeY[0], imgSizeY[0] + imgSizeY[1]}; // The "1 +" in posY and "-" in sizeY is to deal with texture coordinates having a bottom // left corner origin vs. verticies having a top left origin. // clang-format off - const float texSizeX[3]{mCornerSize.x / texSize.x, (texSize.x - mCornerSize.x * 2.0f) / texSize.x, mCornerSize.x / texSize.x}; - const float texSizeY[3]{-mCornerSize.y / texSize.y, -(texSize.y - mCornerSize.y * 2.0f) / texSize.y, -mCornerSize.y / texSize.y}; + const float texSizeX[3]{relCornerSize.x / texSize.x, (texSize.x - relCornerSize.x * 2.0f) / texSize.x, relCornerSize.x / texSize.x}; + const float texSizeY[3]{-relCornerSize.y / texSize.y, -(texSize.y - relCornerSize.y * 2.0f) / texSize.y, -relCornerSize.y / texSize.y}; const float texPosX[3]{0.0f, texSizeX[0], texSizeX[0] + texSizeX[1]}; const float texPosY[3]{1.0f, 1.0f + texSizeY[0], 1.0f + texSizeY[0] + texSizeY[1]}; From 0dc6f1e17ae769ba4e753c979d3eea44cbbe63d6 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 29 Oct 2021 19:43:07 +0200 Subject: [PATCH 15/54] Removed the deprecated SVG scaleDuringLoad functionality. --- es-core/src/resources/TextureData.cpp | 22 ++++++------------- es-core/src/resources/TextureData.h | 3 --- es-core/src/resources/TextureResource.cpp | 26 +++++++++-------------- es-core/src/resources/TextureResource.h | 10 ++------- 4 files changed, 19 insertions(+), 42 deletions(-) diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index e9c05e198..28d1dc154 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -15,6 +15,7 @@ #include "Log.h" #include "renderers/Renderer.h" #include "resources/ResourceManager.h" +#include "utils/StringUtil.h" #include "nanosvg.h" #include "nanosvgrast.h" @@ -31,7 +32,6 @@ TextureData::TextureData(bool tile) , mHeight{0} , mSourceWidth{0.0f} , mSourceHeight{0.0f} - , mScaleDuringLoad{1.0f} , mScalable{false} , mLinearMagnify{false} , mForceRasterization{false} @@ -71,7 +71,7 @@ bool TextureData::initSVGFromMemory(const std::string& fileData) bool rasterize{true}; // If there is no image size defined yet, then don't rasterize unless mForceRasterization has - // been set (this is only used by NinePatchComponent to avoid flickering menus). + // been set. if (mSourceWidth == 0.0f && mSourceHeight == 0.0f) { if (!mForceRasterization) rasterize = false; @@ -80,8 +80,8 @@ bool TextureData::initSVGFromMemory(const std::string& fileData) mSourceHeight = 64.0f * (svgImage->height / svgImage->width); } - mWidth = static_cast(std::round(mSourceWidth * mScaleDuringLoad)); - mHeight = static_cast(std::round(mSourceHeight * mScaleDuringLoad)); + mWidth = static_cast(std::round(mSourceWidth)); + mHeight = static_cast(std::round(mSourceHeight)); if (mWidth == 0) { // Auto scale width to keep aspect ratio. @@ -176,7 +176,7 @@ bool TextureData::load() std::shared_ptr& rm = ResourceManager::getInstance(); const ResourceData& data = rm->getFileData(mPath); // Is it an SVG? - if (mPath.substr(mPath.size() - 4, std::string::npos) == ".svg") { + if (Utils::String::toLower(mPath.substr(mPath.size() - 4, std::string::npos)) == ".svg") { mScalable = true; std::string dataString; dataString.assign(std::string(reinterpret_cast(data.ptr.get()), data.length)); @@ -243,22 +243,14 @@ size_t TextureData::width() { if (mWidth == 0) load(); - // If it's an SVG image, the size was correctly set to the scaled-up values during the - // rasterization, so only multiply by the scale factor if it's a raster file. - if (!mScalable) - return static_cast(mWidth * mScaleDuringLoad); - else - return mWidth; + return static_cast(mWidth); } size_t TextureData::height() { if (mHeight == 0) load(); - if (!mScalable) - return static_cast(mHeight * mScaleDuringLoad); - else - return mHeight; + return static_cast(mHeight); } float TextureData::sourceWidth() diff --git a/es-core/src/resources/TextureData.h b/es-core/src/resources/TextureData.h index 1717bf101..6562643c1 100644 --- a/es-core/src/resources/TextureData.h +++ b/es-core/src/resources/TextureData.h @@ -57,8 +57,6 @@ public: void setSourceSize(float width, float height); glm::vec2 getSize() { return glm::vec2{mWidth, mHeight}; } - // Define a factor for scaling the file when loading it (1.0f = no scaling). - void setScaleDuringLoad(float scale) { mScaleDuringLoad = scale; } // Whether to use linear filtering when magnifying the texture. void setLinearMagnify(bool setting) { mLinearMagnify = setting; } // Whether to rasterize the image even if a size has not been set yet. @@ -81,7 +79,6 @@ private: int mHeight; float mSourceWidth; float mSourceHeight; - float mScaleDuringLoad; bool mScalable; bool mLinearMagnify; bool mReloadable; diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index 8217a9f58..9d35d964b 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -16,12 +16,8 @@ std::map> TextureResource::sTextureMap; std::set TextureResource::sAllTextures; -TextureResource::TextureResource(const std::string& path, - bool tile, - bool dynamic, - bool linearMagnify, - bool forceRasterization, - float scaleDuringLoad) +TextureResource::TextureResource( + const std::string& path, bool tile, bool dynamic, bool linearMagnify, bool forceRasterization) : mTextureData(nullptr) , mForceLoad(false) { @@ -33,8 +29,6 @@ TextureResource::TextureResource(const std::string& path, if (dynamic) { data = sTextureDataManager.add(this, tile); data->initFromPath(path); - if (scaleDuringLoad != 1.0f) - data->setScaleDuringLoad(scaleDuringLoad); data->setLinearMagnify(linearMagnify); data->setForceRasterization(forceRasterization); // Force the texture manager to load it using a blocking load. @@ -44,8 +38,6 @@ TextureResource::TextureResource(const std::string& path, mTextureData = std::shared_ptr(new TextureData(tile)); data = mTextureData; data->initFromPath(path); - if (scaleDuringLoad != 1.0f) - data->setScaleDuringLoad(scaleDuringLoad); data->setLinearMagnify(linearMagnify); data->setForceRasterization(forceRasterization); // Load it so we can read the width/height. @@ -154,15 +146,14 @@ std::shared_ptr TextureResource::get(const std::string& path, bool forceLoad, bool dynamic, bool linearMagnify, - bool forceRasterization, - float scaleDuringLoad) + bool forceRasterization) { std::shared_ptr& rm = ResourceManager::getInstance(); const std::string canonicalPath = Utils::FileSystem::getCanonicalPath(path); if (canonicalPath.empty()) { - std::shared_ptr tex(new TextureResource( - "", tile, false, linearMagnify, forceRasterization, scaleDuringLoad)); + std::shared_ptr tex( + new TextureResource("", tile, false, linearMagnify, forceRasterization)); // Make sure we get properly deinitialized even though we do nothing on reinitialization. rm->addReloadable(tex); return tex; @@ -178,8 +169,8 @@ std::shared_ptr TextureResource::get(const std::string& path, // Need to create it. std::shared_ptr tex; - tex = std::shared_ptr(new TextureResource( - key.first, tile, dynamic, linearMagnify, forceRasterization, scaleDuringLoad)); + tex = std::shared_ptr( + new TextureResource(key.first, tile, dynamic, linearMagnify, forceRasterization)); std::shared_ptr data = sTextureDataManager.get(tex.get()); // Is it an SVG? @@ -219,6 +210,9 @@ void TextureResource::rasterizeAt(float width, float height) data->setSourceSize(static_cast(width), static_cast(height)); if (mForceLoad || mTextureData != nullptr) data->load(); + + mSize.x = width; + mSize.y = height; } size_t TextureResource::getTotalMemUsage() diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index 7ae64728b..b36118f2f 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -31,8 +31,7 @@ public: bool forceLoad = false, bool dynamic = true, bool linearMagnify = false, - bool forceRasterization = false, - float scaleDuringLoad = 1.0f); + bool forceRasterization = false); void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); virtual void initFromMemory(const char* data, size_t length); static void manualUnload(std::string path, bool tile); @@ -48,10 +47,6 @@ public: std::string getTextureFilePath(); - // For SVG graphics this function effectively rescales the image to the defined size. - // It does unload and re-rasterize the texture though which may cause flickering in some - // situations. An alternative is to set a scaling factor directly when loading the texture - // using get(), by using the scaleDuringLoad parameter (which also works for raster graphics). void rasterizeAt(float width, float height); glm::vec2 getSourceImageSize() const { return mSourceSize; } @@ -72,8 +67,7 @@ protected: bool tile, bool dynamic, bool linearMagnify, - bool forceRasterization, - float scaleDuringLoad); + bool forceRasterization); virtual void unload(std::shared_ptr& rm); virtual void reload(std::shared_ptr& rm); From 59839546a504579b2a338a2811ed1d06b9a9fad9 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 29 Oct 2021 19:44:27 +0200 Subject: [PATCH 16/54] Fixed an issue where ComponentList elements would not get correctly centered vertically. --- es-core/src/components/ComponentList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index cee1ab3bb..c9d4d7b38 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -448,7 +448,7 @@ void ComponentList::updateElementPosition(const ComponentListRow& row) const auto comp = row.elements.at(i).component; // Center vertically. - comp->setPosition(x, (rowHeight - comp->getSize().y) / 2.0f + yOffset); + comp->setPosition(x, std::round((rowHeight - comp->getSize().y) / 2.0f + yOffset)); x += comp->getSize().x; } } From 28f0f8549c26576985a5a34c07ae571fb1d7a2f9 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 29 Oct 2021 19:45:46 +0200 Subject: [PATCH 17/54] Fixed an issue where the OptionList arrows would not get correctly centered vertically. --- es-core/src/components/OptionListComponent.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 181b8693a..509235ad1 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -91,11 +91,11 @@ public: mText.getFont()->getHeight()); // Position. - mLeftArrow.setPosition(0.0f, (mSize.y - mLeftArrow.getSize().y) / 2.0f); + mLeftArrow.setPosition(0.0f, std::round((mSize.y - mLeftArrow.getSize().y) / 2.0f)); mText.setPosition(mLeftArrow.getPosition().x + mLeftArrow.getSize().x, (mSize.y - mText.getSize().y) / 2.0f); mRightArrow.setPosition(mText.getPosition().x + mText.getSize().x, - (mSize.y - mRightArrow.getSize().y) / 2.0f); + std::round((mSize.y - mRightArrow.getSize().y) / 2.0f)); } bool input(InputConfig* config, Input input) override From 063ffd719524b10dc05b3551bd19ddf572b0caa1 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 29 Oct 2021 19:48:07 +0200 Subject: [PATCH 18/54] Fixed an issue where the system carousel and info bar would glitch during slide transitions. --- es-app/src/views/SystemView.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 55fb6d81f..152e946ee 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -501,9 +501,10 @@ void SystemView::renderCarousel(const glm::mat4& trans) mCarousel.origin.y * mCarousel.size.y * -1.0f, 0.0f}); glm::vec2 clipPos{carouselTrans[3].x, carouselTrans[3].y}; - Renderer::pushClipRect( - glm::ivec2{static_cast(clipPos.x), static_cast(clipPos.y)}, - glm::ivec2{static_cast(mCarousel.size.x), static_cast(mCarousel.size.y)}); + Renderer::pushClipRect(glm::ivec2{static_cast(std::round(clipPos.x)), + static_cast(std::round(clipPos.y))}, + glm::ivec2{static_cast(std::round(mCarousel.size.x)), + static_cast(std::round(mCarousel.size.y))}); Renderer::setMatrix(carouselTrans); Renderer::drawRect(0.0f, 0.0f, mCarousel.size.x, mCarousel.size.y, mCarousel.color, From 1c7972389408ca6d2241a2a9c766f0f3745cb2e2 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 29 Oct 2021 20:10:15 +0200 Subject: [PATCH 19/54] Improved the NinePatchComponent corner sizing for screens in portrait orientation. --- es-core/src/components/NinePatchComponent.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index 9755892b0..555ec7805 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -54,7 +54,9 @@ void NinePatchComponent::buildVertices() delete[] mVertices; // Scale the corner size relative to the screen resolution. - glm::vec2 relCornerSize = glm::round(mCornerSize * Renderer::getScreenHeightModifier()); + glm::vec2 relCornerSize = glm::round( + mCornerSize * + ((Renderer::getScreenHeightModifier() + Renderer::getScreenWidthModifier()) / 2.0f)); mTexture = TextureResource::get(mPath, false, false, false); glm::vec2 texSize = relCornerSize * 3.0f; From ee80792e0fd1ee0aadad7120d61a958892308d59 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 29 Oct 2021 20:10:43 +0200 Subject: [PATCH 20/54] (Windows) Fixed two MSVC compiler warnings. --- es-core/src/resources/TextureResource.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index 9d35d964b..c1f8afa13 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -211,8 +211,8 @@ void TextureResource::rasterizeAt(float width, float height) if (mForceLoad || mTextureData != nullptr) data->load(); - mSize.x = width; - mSize.y = height; + mSize.x = static_cast(width); + mSize.y = static_cast(height); } size_t TextureResource::getTotalMemUsage() From 5c54e52ecd8185b8e36946bd1cabfb086a9151c8 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 30 Oct 2021 10:23:55 +0200 Subject: [PATCH 21/54] Improved the detection of invalid ScreenScraper box back covers. --- es-app/src/scrapers/Scraper.cpp | 51 ++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index aa54264a3..84fec4752 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -425,11 +425,10 @@ void MediaDownloadHandle::update() // Download is done, save it to disk. - // There's an incredibly annoying issue where some box back covers at ScreenScraper only contain - // a single color, like pure black or more commonly pure green. The hack below checks if the - // same pixel value is set throughout the image and if so skips the file saving. This is not - // very efficient but these images are not technically corrupt so the actual pixel values need - // to be read and compared. + // There are multiple issues with box back covers at ScreenScraper. Some only contain a single + // color like pure black or more commonly pure green, and some are mostly transparent with just + // a few black lines at the bottom. The following code attempts to detect such broken images + // and skip them so they're not saved to disk. if (Settings::getInstance()->getString("Scraper") == "screenscraper" && mMediaType == "backcovers") { bool emptyImage = false; @@ -446,22 +445,42 @@ void MediaDownloadHandle::update() RGBQUAD firstPixel; RGBQUAD currPixel; - FreeImage_GetPixelColor(tempImage, 0, 0, &firstPixel); + unsigned int width = FreeImage_GetWidth(tempImage); + unsigned int height = FreeImage_GetHeight(tempImage); - for (unsigned int x = 0; x < FreeImage_GetWidth(tempImage); x++) { - if (!emptyImage) - break; - for (unsigned int y = 0; y < FreeImage_GetHeight(tempImage); y++) { - FreeImage_GetPixelColor(tempImage, x, y, &currPixel); - if (currPixel.rgbBlue != firstPixel.rgbBlue || - currPixel.rgbGreen != firstPixel.rgbGreen || - currPixel.rgbRed != firstPixel.rgbRed) { - emptyImage = false; + // Skip really small images as they're obviously not valid. + if (width < 50) { + emptyImage = true; + } + else if (height < 50) { + emptyImage = true; + } + else { + // Remove the alpha channel which will convert fully transparent pixels to black. + if (FreeImage_GetBPP(tempImage) != 24) { + FIBITMAP* convertImage = FreeImage_ConvertTo24Bits(tempImage); + FreeImage_Unload(tempImage); + tempImage = convertImage; + } + + // Skip the first line as this can apparently lead to false positives. + FreeImage_GetPixelColor(tempImage, 0, 1, &firstPixel); + + for (unsigned int x = 0; x < width; x++) { + if (!emptyImage) break; + // Skip the last line as well. + for (unsigned int y = 1; y < height - 1; y++) { + FreeImage_GetPixelColor(tempImage, x, y, &currPixel); + if (currPixel.rgbBlue != firstPixel.rgbBlue || + currPixel.rgbGreen != firstPixel.rgbGreen || + currPixel.rgbRed != firstPixel.rgbRed) { + emptyImage = false; + break; + } } } } - FreeImage_Unload(tempImage); } FreeImage_CloseMemory(memoryStream); From 190b3ba054d005d9c372d590f52305382d0fba4d Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 30 Oct 2021 13:07:07 +0200 Subject: [PATCH 22/54] Fixed an issue where rasterized window corners would look excessively pixelated. --- es-core/src/components/NinePatchComponent.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index 555ec7805..0f28b8635 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -53,10 +53,18 @@ void NinePatchComponent::buildVertices() if (mVertices != nullptr) delete[] mVertices; - // Scale the corner size relative to the screen resolution. - glm::vec2 relCornerSize = glm::round( - mCornerSize * - ((Renderer::getScreenHeightModifier() + Renderer::getScreenWidthModifier()) / 2.0f)); + glm::vec2 relCornerSize{}; + + // Don't scale the rasterized version of the frame as it would look bad. + if (mPath.substr(mPath.size() - 4, std::string::npos) == ".png") { + relCornerSize = mCornerSize; + } + else { + // Scale the corner size relative to the screen resolution. + relCornerSize = glm::round( + mCornerSize * + ((Renderer::getScreenHeightModifier() + Renderer::getScreenWidthModifier()) / 2.0f)); + } mTexture = TextureResource::get(mPath, false, false, false); glm::vec2 texSize = relCornerSize * 3.0f; From 2f09c21d3f97dc707f6544fa0b6942462467dd87 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 30 Oct 2021 17:05:04 +0200 Subject: [PATCH 23/54] Reversed a previous change that caused multiple texturing issues. --- es-core/src/resources/TextureResource.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index c1f8afa13..8b1990100 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -210,9 +210,6 @@ void TextureResource::rasterizeAt(float width, float height) data->setSourceSize(static_cast(width), static_cast(height)); if (mForceLoad || mTextureData != nullptr) data->load(); - - mSize.x = static_cast(width); - mSize.y = static_cast(height); } size_t TextureResource::getTotalMemUsage() From 7606e9cad6f4450b8c88f0c038e6e0e73ecf511f Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 30 Oct 2021 19:01:58 +0200 Subject: [PATCH 24/54] Added the physical media images to the miximages. Also added an option to rotate horizontally oriented game boxes and size options for the box and physical media files. --- es-app/src/MiximageGenerator.cpp | 176 +++++++++++++++++++++++++++-- es-app/src/MiximageGenerator.h | 4 +- es-app/src/guis/GuiScraperMenu.cpp | 70 ++++++++++++ es-core/src/Settings.cpp | 4 + 4 files changed, 242 insertions(+), 12 deletions(-) diff --git a/es-app/src/MiximageGenerator.cpp b/es-app/src/MiximageGenerator.cpp index 1d52a78a4..6769b23e3 100644 --- a/es-app/src/MiximageGenerator.cpp +++ b/es-app/src/MiximageGenerator.cpp @@ -17,13 +17,14 @@ #include MiximageGenerator::MiximageGenerator(FileData* game, std::string& resultMessage) - : mGame(game) - , mResultMessage(resultMessage) - , mWidth(1280) - , mHeight(960) - , mMarquee(false) - , mBox3D(false) - , mCover(false) + : mGame{game} + , mResultMessage{resultMessage} + , mWidth{1280} + , mHeight{960} + , mMarquee{false} + , mBox3D{false} + , mCover{false} + , mPhysicalMedia{false} { } @@ -79,6 +80,16 @@ void MiximageGenerator::startThread(std::promise* miximagePromise) } } + if (Settings::getInstance()->getBool("MiximageIncludePhysicalMedia")) { + if ((mPhysicalMediaPath = mGame->getPhysicalMediaPath()) != "") { + mPhysicalMedia = true; + } + else { + LOG(LogDebug) + << "MiximageGenerator::MiximageGenerator(): No physical media image found"; + } + } + const auto startTime = std::chrono::system_clock::now(); if (generateImage()) { @@ -106,6 +117,7 @@ bool MiximageGenerator::generateImage() FIBITMAP* screenshotFile = nullptr; FIBITMAP* marqueeFile = nullptr; FIBITMAP* boxFile = nullptr; + FIBITMAP* physicalMediaFile = nullptr; unsigned int fileWidth = 0; unsigned int fileHeight = 0; @@ -269,6 +281,46 @@ bool MiximageGenerator::generateImage() } } + if (mPhysicalMedia) { +#if defined(_WIN64) + fileFormat = + FreeImage_GetFileTypeU(Utils::String::stringToWideString(mPhysicalMediaPath).c_str()); +#else + fileFormat = FreeImage_GetFileType(mPhysicalMediaPath.c_str()); +#endif + + if (fileFormat == FIF_UNKNOWN) +#if defined(_WIN64) + fileFormat = FreeImage_GetFIFFromFilenameU( + Utils::String::stringToWideString(mPhysicalMediaPath).c_str()); +#else + fileFormat = FreeImage_GetFIFFromFilename(mPhysicalMediaPath.c_str()); +#endif + + if (fileFormat == FIF_UNKNOWN) { + LOG(LogDebug) << "Physical media in unknown format, skipping image"; + mPhysicalMedia = false; + } + + if (!FreeImage_FIFSupportsReading(fileFormat)) { + LOG(LogDebug) << "Physical media file format not supported, skipping image"; + mPhysicalMedia = false; + } + else { +#if defined(_WIN64) + physicalMediaFile = FreeImage_LoadU( + fileFormat, Utils::String::stringToWideString(mPhysicalMediaPath).c_str()); +#else + physicalMediaFile = FreeImage_Load(fileFormat, mPhysicalMediaPath.c_str()); +#endif + if (!physicalMediaFile) { + LOG(LogError) << "Couldn't load physical media image, corrupt file?"; + mMessage = "Error loading physical media image, corrupt file?"; + mPhysicalMedia = false; + } + } + } + unsigned int resolutionMultiplier = 0; if (Settings::getInstance()->getString("MiximageResolution") == "640x480") { @@ -295,12 +347,44 @@ bool MiximageGenerator::generateImage() // These sizes are increased slightly when adding the drop shadow. const unsigned int marqueeTargetWidth = 310 * resolutionMultiplier; const unsigned int marqueeTargetHeight = 230 * resolutionMultiplier; - const unsigned int boxTargetWidth = 330 * resolutionMultiplier; - const unsigned int boxTargetHeight = 300 * resolutionMultiplier; - const unsigned int coverTargetWidth = 250 * resolutionMultiplier; + unsigned int boxTargetWidth = 0; + unsigned int boxTargetHeight = 0; + unsigned int coverTargetWidth = 0; + unsigned int physicalMediaTargetWidth = 0; + unsigned int physicalMediaTargetHeight = 0; + + if (Settings::getInstance()->getString("MiximageBoxSize") == "small") { + boxTargetWidth = 264 * resolutionMultiplier; + boxTargetHeight = 254 * resolutionMultiplier; + coverTargetWidth = 212 * resolutionMultiplier; + } + else if (Settings::getInstance()->getString("MiximageBoxSize") == "large") { + boxTargetWidth = 372 * resolutionMultiplier; + boxTargetHeight = 360 * resolutionMultiplier; + coverTargetWidth = 300 * resolutionMultiplier; + } + else { // Medium size. + boxTargetWidth = 310 * resolutionMultiplier; + boxTargetHeight = 300 * resolutionMultiplier; + coverTargetWidth = 250 * resolutionMultiplier; + } + + if (Settings::getInstance()->getString("MiximagePhysicalMediaSize") == "small") { + physicalMediaTargetWidth = 120 * resolutionMultiplier; + physicalMediaTargetHeight = 96 * resolutionMultiplier; + } + else if (Settings::getInstance()->getString("MiximagePhysicalMediaSize") == "large") { + physicalMediaTargetWidth = 196 * resolutionMultiplier; + physicalMediaTargetHeight = 156 * resolutionMultiplier; + } + else { // Medium size. + physicalMediaTargetWidth = 150 * resolutionMultiplier; + physicalMediaTargetHeight = 120 * resolutionMultiplier; + } const unsigned int marqueeShadowSize = 6 * resolutionMultiplier; const unsigned int boxShadowSize = 6 * resolutionMultiplier; + const unsigned int physicalMediaShadowSize = 6 * resolutionMultiplier; if (FreeImage_GetBPP(screenshotFile) != 32) { FIBITMAP* screenshotTemp = FreeImage_ConvertTo32Bits(screenshotFile); @@ -354,6 +438,9 @@ bool MiximageGenerator::generateImage() int xPosBox = 0; int yPosBox = 0; + int xPosPhysicalMedia = 0; + int yPosPhysicalMedia = 0; + CImg canvasImage(mWidth, mHeight, 1, 4, 0); CImg marqueeImage; @@ -364,6 +451,10 @@ bool MiximageGenerator::generateImage() CImg boxImageRGB; CImg boxImageAlpha; + CImg physicalMediaImage; + CImg physicalMediaImageRGB; + CImg physicalMediaImageAlpha; + CImg frameImage(mWidth, mHeight, 1, 4, 0); xPosScreenshot = canvasImage.width() / 2 - screenshotImage.width() / 2 + screenshotOffset; @@ -433,6 +524,12 @@ bool MiximageGenerator::generateImage() Utils::CImg::convertRGBAToCImg(boxVector, boxImage); Utils::CImg::removeTransparentPadding(boxImage); + float sizeRatio = + static_cast(boxImage.width()) / static_cast(boxImage.height()); + + if (sizeRatio > 1.14f && Settings::getInstance()->getBool("MiximageRotateHorizontalBoxes")) + boxImage.rotate(90.0f); + float scaleFactor = static_cast(boxTargetHeight) / static_cast(boxImage.height()); unsigned int width = static_cast(static_cast(boxImage.width()) * scaleFactor); @@ -466,8 +563,60 @@ bool MiximageGenerator::generateImage() boxImageAlpha = CImg(boxImage.get_shared_channel(3)); } + if (mPhysicalMedia) { + if (FreeImage_GetBPP(physicalMediaFile) != 32) { + FIBITMAP* physicalMediaTemp = FreeImage_ConvertTo32Bits(physicalMediaFile); + FreeImage_Unload(physicalMediaFile); + physicalMediaFile = physicalMediaTemp; + } + + fileWidth = FreeImage_GetWidth(physicalMediaFile); + fileHeight = FreeImage_GetHeight(physicalMediaFile); + filePitch = FreeImage_GetPitch(physicalMediaFile); + + std::vector physicalMediaVector(fileWidth * fileHeight * 4); + + FreeImage_ConvertToRawBits(reinterpret_cast(&physicalMediaVector.at(0)), + physicalMediaFile, filePitch, 32, FI_RGBA_RED, FI_RGBA_GREEN, + FI_RGBA_BLUE, 1); + + physicalMediaImage = CImg(FreeImage_GetWidth(physicalMediaFile), + FreeImage_GetHeight(physicalMediaFile), 1, 4, 0); + + Utils::CImg::convertRGBAToCImg(physicalMediaVector, physicalMediaImage); + Utils::CImg::removeTransparentPadding(physicalMediaImage); + + // Make sure the image size is not exceeding either the target width or height. + float scaleFactorX = static_cast(physicalMediaTargetWidth) / + static_cast(physicalMediaImage.width()); + float scaleFactorY = static_cast(physicalMediaTargetHeight) / + static_cast(physicalMediaImage.height()); + float scaleFactor = std::min(scaleFactorX, scaleFactorY); + + unsigned int width = + static_cast(static_cast(physicalMediaImage.width()) * scaleFactor); + unsigned int height = + static_cast(static_cast(physicalMediaImage.height()) * scaleFactor); + + // We use Lanczos3 which is the highest quality resampling method available. + physicalMediaImage.resize(width, height, 1, 4, 6); + + // Add a drop shadow using 4 iterations of box blur. + Utils::CImg::addDropShadow(physicalMediaImage, physicalMediaShadowSize, 0.6f, 4); + + // Place it to the right of the 3D box or cover with a small margin in between. + xPosPhysicalMedia = xPosBox + boxImage.width() + 12 * resolutionMultiplier; + yPosPhysicalMedia = canvasImage.height() - physicalMediaImage.height(); + + // Only RGB channels for the image. + physicalMediaImageRGB = CImg(physicalMediaImage.get_shared_channels(0, 2)); + // Only alpha channel for the image. + physicalMediaImageAlpha = CImg(physicalMediaImage.get_shared_channel(3)); + } + CImg frameImageAlpha(frameImage.get_shared_channel(3)); frameImageAlpha.draw_image(xPosBox, yPosBox, boxImageAlpha); + frameImageAlpha.draw_image(xPosPhysicalMedia, yPosPhysicalMedia, physicalMediaImageAlpha); frameImageAlpha.draw_image(xPosMarquee, yPosMarquee, marqueeImageAlpha); // Set a frame color based on an average of the screenshot contents. @@ -515,6 +664,10 @@ bool MiximageGenerator::generateImage() if (mBox3D || mCover) canvasImage.draw_image(xPosBox, yPosBox, boxImageRGB, boxImageAlpha, 1, 255); + if (mPhysicalMedia) + canvasImage.draw_image(xPosPhysicalMedia, yPosPhysicalMedia, physicalMediaImageRGB, + physicalMediaImageAlpha, 1, 255); + std::vector canvasVector; // Convert the image from CImg internal format. @@ -540,6 +693,7 @@ bool MiximageGenerator::generateImage() FreeImage_Unload(screenshotFile); FreeImage_Unload(marqueeFile); FreeImage_Unload(boxFile); + FreeImage_Unload(physicalMediaFile); FreeImage_Unload(mixImage); // Success. @@ -645,7 +799,7 @@ void MiximageGenerator::sampleFrameColor(CImg& screenshotImage, frameColor[3] = 255; } -std::string MiximageGenerator::getSavePath() +std::string MiximageGenerator::getSavePath() const { const std::string name = Utils::FileSystem::getStem(mGame->getPath()); std::string subFolders; diff --git a/es-app/src/MiximageGenerator.h b/es-app/src/MiximageGenerator.h index 5da3dbca8..805cc825e 100644 --- a/es-app/src/MiximageGenerator.h +++ b/es-app/src/MiximageGenerator.h @@ -35,7 +35,7 @@ private: unsigned int& height); void sampleFrameColor(CImg& screenshotImage, unsigned char (&frameColor)[4]); - std::string getSavePath(); + std::string getSavePath() const; FileData* mGame; std::string& mResultMessage; @@ -46,6 +46,7 @@ private: std::string mMarqueePath; std::string mBox3DPath; std::string mCoverPath; + std::string mPhysicalMediaPath; int mWidth; int mHeight; @@ -53,6 +54,7 @@ private: bool mMarquee; bool mBox3D; bool mCover; + bool mPhysicalMedia; }; #endif // ES_APP_SCRAPERS_MIXIMAGE_GENERATOR_H diff --git a/es-app/src/guis/GuiScraperMenu.cpp b/es-app/src/guis/GuiScraperMenu.cpp index a792bc7ac..ca7e5398a 100644 --- a/es-app/src/guis/GuiScraperMenu.cpp +++ b/es-app/src/guis/GuiScraperMenu.cpp @@ -461,6 +461,48 @@ void GuiScraperMenu::openMiximageOptions() } }); + // Box/cover size. + auto miximageBoxSize = std::make_shared>( + mWindow, getHelpStyle(), "BOX SIZE", false); + std::string selectedBoxSize = Settings::getInstance()->getString("MiximageBoxSize"); + miximageBoxSize->add("small", "small", selectedBoxSize == "small"); + miximageBoxSize->add("medium", "medium", selectedBoxSize == "medium"); + miximageBoxSize->add("large", "large", selectedBoxSize == "large"); + // If there are no objects returned, then there must be a manually modified entry in the + // configuration file. Simply set the box size to "medium" in this case. + if (miximageBoxSize->getSelectedObjects().size() == 0) + miximageBoxSize->selectEntry(0); + s->addWithLabel("BOX SIZE", miximageBoxSize); + s->addSaveFunc([miximageBoxSize, s] { + if (miximageBoxSize->getSelected() != + Settings::getInstance()->getString("MiximageBoxSize")) { + Settings::getInstance()->setString("MiximageBoxSize", miximageBoxSize->getSelected()); + s->setNeedsSaving(); + } + }); + + // Physical media size. + auto miximagePhysicalMediaSize = std::make_shared>( + mWindow, getHelpStyle(), "PHYSICAL MEDIA SIZE", false); + std::string selectedPhysicalMediaSize = + Settings::getInstance()->getString("MiximagePhysicalMediaSize"); + miximagePhysicalMediaSize->add("small", "small", selectedPhysicalMediaSize == "small"); + miximagePhysicalMediaSize->add("medium", "medium", selectedPhysicalMediaSize == "medium"); + miximagePhysicalMediaSize->add("large", "large", selectedPhysicalMediaSize == "large"); + // If there are no objects returned, then there must be a manually modified entry in the + // configuration file. Simply set the physical media size to "medium" in this case. + if (miximagePhysicalMediaSize->getSelectedObjects().size() == 0) + miximagePhysicalMediaSize->selectEntry(0); + s->addWithLabel("PHYSICAL MEDIA SIZE", miximagePhysicalMediaSize); + s->addSaveFunc([miximagePhysicalMediaSize, s] { + if (miximagePhysicalMediaSize->getSelected() != + Settings::getInstance()->getString("MiximagePhysicalMediaSize")) { + Settings::getInstance()->setString("MiximagePhysicalMediaSize", + miximagePhysicalMediaSize->getSelected()); + s->setNeedsSaving(); + } + }); + // Whether to generate miximages when scraping. auto miximage_generate = std::make_shared(mWindow); miximage_generate->setState(Settings::getInstance()->getBool("MiximageGenerate")); @@ -510,6 +552,20 @@ void GuiScraperMenu::openMiximageOptions() } }); + // Whether to rotate horizontally oriented boxes. + auto miximageRotateBoxes = std::make_shared(mWindow); + miximageRotateBoxes->setState( + Settings::getInstance()->getBool("MiximageRotateHorizontalBoxes")); + s->addWithLabel("ROTATE HORIZONTALLY ORIENTED BOXES", miximageRotateBoxes); + s->addSaveFunc([miximageRotateBoxes, s] { + if (miximageRotateBoxes->getState() != + Settings::getInstance()->getBool("MiximageRotateHorizontalBoxes")) { + Settings::getInstance()->setBool("MiximageRotateHorizontalBoxes", + miximageRotateBoxes->getState()); + s->setNeedsSaving(); + } + }); + // Whether to include marquee images. auto miximage_marquee = std::make_shared(mWindow); miximage_marquee->setState(Settings::getInstance()->getBool("MiximageIncludeMarquee")); @@ -547,6 +603,20 @@ void GuiScraperMenu::openMiximageOptions() } }); + // Whether to include physical media images. + auto miximagePhysicalMedia = std::make_shared(mWindow); + miximagePhysicalMedia->setState( + Settings::getInstance()->getBool("MiximageIncludePhysicalMedia")); + s->addWithLabel("INCLUDE PHYSICAL MEDIA IMAGE", miximagePhysicalMedia); + s->addSaveFunc([miximagePhysicalMedia, s] { + if (miximagePhysicalMedia->getState() != + Settings::getInstance()->getBool("MiximageIncludePhysicalMedia")) { + Settings::getInstance()->setBool("MiximageIncludePhysicalMedia", + miximagePhysicalMedia->getState()); + s->setNeedsSaving(); + } + }); + // Miximage offline generator. ComponentListRow offline_generator_row; offline_generator_row.elements.clear(); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index fc31311f7..ea25a2dcb 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -117,13 +117,17 @@ void Settings::setDefaults() mStringMap["MiximageResolution"] = {"1280x960", "1280x960"}; mStringMap["MiximageScreenshotScaling"] = {"sharp", "sharp"}; + mStringMap["MiximageBoxSize"] = {"medium", "medium"}; + mStringMap["MiximagePhysicalMediaSize"] = {"medium", "medium"}; mBoolMap["MiximageGenerate"] = {true, true}; mBoolMap["MiximageOverwrite"] = {true, true}; mBoolMap["MiximageRemoveLetterboxes"] = {true, true}; mBoolMap["MiximageRemovePillarboxes"] = {true, true}; + mBoolMap["MiximageRotateHorizontalBoxes"] = {true, true}; mBoolMap["MiximageIncludeMarquee"] = {true, true}; mBoolMap["MiximageIncludeBox"] = {true, true}; mBoolMap["MiximageCoverFallback"] = {true, true}; + mBoolMap["MiximageIncludePhysicalMedia"] = {true, true}; mStringMap["ScraperRegion"] = {"eu", "eu"}; mStringMap["ScraperLanguage"] = {"en", "en"}; From 1e5efc251ad07558a47f7e395fa8a7f292b8d1eb Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 30 Oct 2021 19:11:25 +0200 Subject: [PATCH 25/54] Documentation update. --- CHANGELOG.md | 4 ++++ USERGUIDE-DEV.md | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a41f032a0..b31116484 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,9 @@ * Added game-specific controllers that are selectable via the metadata editor and displayed as a controller badge * Added scraping of title screens, box back covers and physical media images * Updated the media viewer to display title screens and box back cover images +* Added physical media images to the generated miximages +* Added an option to rotate horizontally oriented game boxes when generating miximages +* Added size options (small/medium/large) for the boxes/covers and physical media images when generating miximages * Added the ability to make complementary game system customizations without having to replace the entire bundled es_systems.xml file * Added support for an optional \ tag for es_systems.xml that can be used to override the default \ systems sorting * Added menu scroll indicators showing if there are additional entries available below or above what's currently shown on screen @@ -110,6 +113,7 @@ * Disabling a collection while its gamelist was displayed would lead to a slide transition from a black screen if a gamelist on startup had been set * When marking a game to not be counted in the metadata editor and the game was part of a custom collection, no collection disabling notification was displayed * When running really low on texture memory, the menu texture would not get rendered correctly +* There was a tiny and randomly occuring gap between the system carousel and systemInfo bar during slide transitions between the System and Gamelist views * SliderComponent had very inconsistent widths at different screen aspect ratios * SliderComponent did not properly align the knob and bar vertically * Resizing in SwitchComponent did not reposition the image properly leading to a non-centered image diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 6444d3fe0..61e8be362 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -841,6 +841,14 @@ It's possible to select betweeen the 1280x960, 1920x1440 and 640x480 resolutions The _sharp_ scaling method uses nearest-neighbor interpolation which retains sharp pixels and looks better for most low-resolution retro games. The _smooth_ scaling method uses the Lanczos algorithm and produces smoother pixels. This may look better on some more modern games at higher resolutions. If unsure, use the _sharp_ method. +**Box size** + +The size of the 3D game box, or the cover image if there is no 3D box and the _Use cover image if 3D box is missing_ setting has been enabled. The available options are _medium, small_ and _large_. + +**Physical media size** + +The size of the physical media image. The available options are _medium, small_ and _large_. + **Generate miximages when scraping** Enables or disables the miximage generator when scraping. Applies to both the single-game scraper and the multi-scraper. @@ -857,6 +865,10 @@ With this option enabled, any horizontal pure black areas at the top and bottom With this option enabled, any vertical pure black areas at the left and right sides of the screenshots are automatically cropped. +**Rotate horizontally oriented boxes** + +Some consoles such as Super Nintendo have game boxes with the cover printed horizontally rather than using the more common vertical format. If enabling this setting, those images will be rotated 90 degrees so they stand up like the box images for most other systems. + **Incude marquee image** Whether to include the marquee (wheel) image in the composite miximage. @@ -869,6 +881,10 @@ Whether to include the box image in the composite miximage. If a 3D box exists f Whether to use the 2D box cover as fallback if the 3D box image is missing for the game. +**Include physical media image** + +Whether to include the image of the physical media used to distribute the game, for example a cartridge, diskette, tape, CD-ROM etc. + **Offline generator** This is not a setting, but instead a GUI to generate miximages offline without going via the scraper. This tool uses the same game system selections as the scraper, so you need to select at least one system on the scraper menu before attempting to run it. All the miximage settings are applied in the same way as when generating images via the scraper. The prerequisite is that at least a screenshot exists for each game. If there is no screenshot, or if the screenshot is unreadable for some reason, the generation for that specific game will fail. There is statistics shown in the tool displaying the number of generated, overwritten, skipped and failed images. Any error message is also shown on screen as well as being saved to the es_log.txt file. From 488db7b5f7ef5f40375b165ace4363bdc786697a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 31 Oct 2021 09:47:05 +0100 Subject: [PATCH 26/54] Small adjustment of the physical image placement on the miximage. --- es-app/src/MiximageGenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/MiximageGenerator.cpp b/es-app/src/MiximageGenerator.cpp index 6769b23e3..20eee9b2b 100644 --- a/es-app/src/MiximageGenerator.cpp +++ b/es-app/src/MiximageGenerator.cpp @@ -605,7 +605,7 @@ bool MiximageGenerator::generateImage() Utils::CImg::addDropShadow(physicalMediaImage, physicalMediaShadowSize, 0.6f, 4); // Place it to the right of the 3D box or cover with a small margin in between. - xPosPhysicalMedia = xPosBox + boxImage.width() + 12 * resolutionMultiplier; + xPosPhysicalMedia = xPosBox + boxImage.width() + 16 * resolutionMultiplier; yPosPhysicalMedia = canvasImage.height() - physicalMediaImage.height(); // Only RGB channels for the image. From b802854bc77b532d7e0843b92e5fae5b734826fa Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 31 Oct 2021 19:19:12 +0100 Subject: [PATCH 27/54] Added some more controller icons. --- .../joystick_arcade_no_buttons.svg | 8 +- .../graphics/controllers/keyboard_generic.svg | 1622 ++++++++++++++++- .../graphics/controllers/spinner_generic.svg | 110 +- .../controllers/steering_wheel_generic.svg | 563 +++++- .../controllers/trackball_generic.svg | 53 +- 5 files changed, 2280 insertions(+), 76 deletions(-) diff --git a/resources/graphics/controllers/joystick_arcade_no_buttons.svg b/resources/graphics/controllers/joystick_arcade_no_buttons.svg index 91ff9b318..740976fda 100644 --- a/resources/graphics/controllers/joystick_arcade_no_buttons.svg +++ b/resources/graphics/controllers/joystick_arcade_no_buttons.svg @@ -25,9 +25,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="2.9254477" - inkscape:cx="296.85138" - inkscape:cy="194.43876" + inkscape:zoom="3.217236" + inkscape:cx="21.772411" + inkscape:cy="189.73631" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -65,7 +65,7 @@ rx="4.2912331" /> + transform="matrix(1.6286027,0,0,1.6555452,0.48106317,-173.26496)"> + sodipodi:docname="keyboard_generic.svg"> + inkscape:window-maximized="1" + inkscape:snap-global="false" /> @@ -53,17 +54,1604 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g5726" + transform="translate(-1.2715658e-7,-5.0954183e-6)"> + + + + + sodipodi:nodetypes="sscsscssssscsss" + inkscape:connector-curvature="0" + id="rect6543-2-0-5-0-2" + d="m 45.065162,267.49726 c -0.03721,0 -0.116497,0.0162 -0.116497,0.14908 v 2.04808 h -2.060222 c -0.108082,0 -0.195284,0.10983 -0.195284,0.24625 v 2.01599 c -3e-6,0.1364 0.08719,0.24623 0.195284,0.24623 h 6.444451 c 0.108082,0 0.1948,-0.10983 0.1948,-0.24623 v -2.01599 c 0,-0.13642 -0.08672,-0.24625 -0.1948,-0.24625 h -2.032046 v -2.03474 c 0,-0.13284 -0.09231,-0.16242 -0.129512,-0.16242 z" + style="opacity:1;vector-effect:none;fill:#494947;fill-opacity:1;stroke:none;stroke-width:0.0451914;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/spinner_generic.svg b/resources/graphics/controllers/spinner_generic.svg index 2c32c71df..5b46cdcce 100644 --- a/resources/graphics/controllers/spinner_generic.svg +++ b/resources/graphics/controllers/spinner_generic.svg @@ -7,6 +7,7 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="256" @@ -15,9 +16,54 @@ version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="spinner_generic.svg"> + id="defs4919"> + + + + + + + + + + + + inkscape:window-maximized="1" + showguides="false" /> @@ -45,7 +92,7 @@ image/svg+xml - + @@ -54,16 +101,43 @@ inkscape:groupmode="layer" id="layer1" transform="translate(0,-229.26665)"> - - - + + + + + diff --git a/resources/graphics/controllers/steering_wheel_generic.svg b/resources/graphics/controllers/steering_wheel_generic.svg index b6b01c15a..c38bba47a 100644 --- a/resources/graphics/controllers/steering_wheel_generic.svg +++ b/resources/graphics/controllers/steering_wheel_generic.svg @@ -7,17 +7,48 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="steering_wheel_generic_2.svg"> + id="defs4919"> + + + + + + + + inkscape:window-maximized="1" + inkscape:snap-global="true" + inkscape:snap-bbox="true" /> @@ -53,17 +86,511 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + + + + id="g5301" + transform="matrix(0.97078132,0,0,0.97078132,0.98954121,7.6883904)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inkscape:connector-curvature="0" + id="path4955" + d="m 33.866688,257.26975 a 6.4726676,6.4726676 0 0 0 -6.472742,6.47274 6.4726676,6.4726676 0 0 0 6.472742,6.47276 6.4726676,6.4726676 0 0 0 6.472746,-6.47276 6.4726676,6.4726676 0 0 0 -6.472746,-6.47274 z m 0,1.53925 a 4.933052,4.933052 0 0 1 4.932833,4.93349 4.933052,4.933052 0 0 1 -4.932833,4.93284 4.933052,4.933052 0 0 1 -4.932831,-4.93284 4.933052,4.933052 0 0 1 4.932831,-4.93349 z" + style="opacity:1;vector-effect:none;fill:#383838;fill-opacity:1;stroke:#2e2e2e;stroke-width:0.43980473;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> + + + + + + diff --git a/resources/graphics/controllers/trackball_generic.svg b/resources/graphics/controllers/trackball_generic.svg index b6b01c15a..a491ee1f3 100644 --- a/resources/graphics/controllers/trackball_generic.svg +++ b/resources/graphics/controllers/trackball_generic.svg @@ -9,13 +9,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="trackball_generic.svg"> - - - + transform="translate(0,-229.26665)"> + + + From 098dd7eedc7b45ed88bb931b0512af9654963f0f Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 31 Oct 2021 21:00:27 +0100 Subject: [PATCH 28/54] Added a few more controller icons. Also modified an existing icon slightly. --- .../keyboard_and_mouse_generic.svg | 1729 ++++++++- .../graphics/controllers/keyboard_generic.svg | 3098 ++++++++--------- .../graphics/controllers/mouse_generic.svg | 138 +- .../controllers/steering_wheel_generic.svg | 30 +- 4 files changed, 3392 insertions(+), 1603 deletions(-) diff --git a/resources/graphics/controllers/keyboard_and_mouse_generic.svg b/resources/graphics/controllers/keyboard_and_mouse_generic.svg index b6b01c15a..cdbb57209 100644 --- a/resources/graphics/controllers/keyboard_and_mouse_generic.svg +++ b/resources/graphics/controllers/keyboard_and_mouse_generic.svg @@ -7,17 +7,40 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="keyboard_and_mouse_generic.svg"> + id="defs4919"> + + + + + + image/svg+xml - + @@ -53,17 +76,1687 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g6130"> + + + + + sodipodi:nodetypes="sscsscssssscsss" + inkscape:connector-curvature="0" + id="rect6543-2-0-5-0-2" + d="m 44.719591,255.26328 c -0.03606,0 -0.112902,0.0157 -0.112902,0.14448 v 1.98488 h -1.996646 c -0.104747,0 -0.189258,0.10644 -0.189258,0.23865 v 1.95378 c -3e-6,0.13219 0.0845,0.23863 0.189258,0.23863 h 6.245584 c 0.104746,0 0.188788,-0.10644 0.188788,-0.23863 v -1.95378 c 0,-0.13221 -0.08404,-0.23865 -0.188788,-0.23865 h -1.96934 v -1.97195 c 0,-0.12874 -0.08946,-0.15741 -0.125516,-0.15741 z" + style="opacity:1;vector-effect:none;fill:#494947;fill-opacity:1;stroke:none;stroke-width:0.04379685;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/keyboard_generic.svg b/resources/graphics/controllers/keyboard_generic.svg index ea2531650..b0c7ec6cb 100644 --- a/resources/graphics/controllers/keyboard_generic.svg +++ b/resources/graphics/controllers/keyboard_generic.svg @@ -25,9 +25,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="5.2667753" - inkscape:cx="116.13729" - inkscape:cy="120.47769" + inkscape:zoom="4.6444317" + inkscape:cx="-52.556182" + inkscape:cy="171.55721" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -55,1603 +55,1599 @@ inkscape:groupmode="layer" id="layer1" transform="translate(0,-229.26665)"> + + + + + + - - - - + id="g8208" + transform="matrix(0.96071617,0,0,0.96071617,1.3663278,10.310258)"> + style="fill:#a1a1a1;fill-opacity:1;stroke-width:0.08643198" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + style="fill:#cecfce;fill-opacity:1;stroke-width:0.08643198" /> + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + style="fill:#9b9a9a" /> + style="fill:#cfd0cf" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="g6887"> + id="XMLID_248_-4" /> + id="XMLID_246_-6" /> + id="g6887-4" + transform="translate(2.3000234)"> + id="XMLID_248_-4-3" /> + id="XMLID_246_-6-51" /> + id="g6887-4-7" + transform="translate(4.6000466)"> + id="XMLID_248_-4-3-4" /> + id="XMLID_246_-6-51-3" /> + id="g6887-4-7-1" + transform="translate(6.9000698)"> + id="XMLID_248_-4-3-4-4" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="XMLID_246_-6-51-3-6" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/mouse_generic.svg b/resources/graphics/controllers/mouse_generic.svg index b6b01c15a..17fea329f 100644 --- a/resources/graphics/controllers/mouse_generic.svg +++ b/resources/graphics/controllers/mouse_generic.svg @@ -7,17 +7,40 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="mouse_generic.svg"> + id="defs4919"> + + + + + + + inkscape:window-maximized="1" + showguides="false" + inkscape:snap-bbox="false" + inkscape:snap-global="false" /> @@ -45,7 +71,7 @@ image/svg+xml - + @@ -53,17 +79,89 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> - + id="g7883"> + + + + + + + + + + + diff --git a/resources/graphics/controllers/steering_wheel_generic.svg b/resources/graphics/controllers/steering_wheel_generic.svg index c38bba47a..082b823b5 100644 --- a/resources/graphics/controllers/steering_wheel_generic.svg +++ b/resources/graphics/controllers/steering_wheel_generic.svg @@ -16,7 +16,7 @@ version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="steering_wheel_generic_2.svg"> + sodipodi:docname="steering_wheel_generic.svg"> + inkscape:connector-curvature="0" + transform="matrix(0.26458333,0,0,0.26458333,0,229.26665)" /> + transform="matrix(0.26458333,0,0,0.26458333,0,229.26665)" /> Date: Sun, 31 Oct 2021 21:20:33 +0100 Subject: [PATCH 29/54] (rbsimple-DE) Changed the controller graphics for the 'dos' and 'pc' systems. Also modified the controller graphics for the 'c64' system. --- themes/rbsimple-DE/c64/images/controller.svg | 9 +- themes/rbsimple-DE/dos/images/controller.svg | 1412 ++++++++++++++++-- themes/rbsimple-DE/pc/images/controller.svg | 1412 ++++++++++++++++-- 3 files changed, 2589 insertions(+), 244 deletions(-) diff --git a/themes/rbsimple-DE/c64/images/controller.svg b/themes/rbsimple-DE/c64/images/controller.svg index c30aa519d..8d4806d87 100644 --- a/themes/rbsimple-DE/c64/images/controller.svg +++ b/themes/rbsimple-DE/c64/images/controller.svg @@ -62,16 +62,17 @@ inkscape:window-height="2065" id="namedview39" showgrid="true" - inkscape:zoom="5.1595302" - inkscape:cx="76.462702" - inkscape:cy="125.63998" + inkscape:zoom="4.5498592" + inkscape:cx="-97.4551" + inkscape:cy="154.4801" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="Layer_1" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +image/svg+xml + + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/pc/images/controller.svg b/themes/rbsimple-DE/pc/images/controller.svg index 205361d74..9a1d17455 100644 --- a/themes/rbsimple-DE/pc/images/controller.svg +++ b/themes/rbsimple-DE/pc/images/controller.svg @@ -1,120 +1,1292 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +image/svg+xml + + + + \ No newline at end of file From d0b030b93623da8cd899fb600344f8adb3a12a09 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 1 Nov 2021 18:24:20 +0100 Subject: [PATCH 30/54] Added some controller icons. --- .../graphics/controllers/gamepad_xbox.svg | 679 +++++++++++++- .../graphics/controllers/lightgun_generic.svg | 886 +++++++++++++++++- .../controllers/lightgun_nintendo.svg | 186 +++- .../controllers/steering_wheel_generic.svg | 12 +- 4 files changed, 1702 insertions(+), 61 deletions(-) diff --git a/resources/graphics/controllers/gamepad_xbox.svg b/resources/graphics/controllers/gamepad_xbox.svg index b6b01c15a..0a8656e85 100644 --- a/resources/graphics/controllers/gamepad_xbox.svg +++ b/resources/graphics/controllers/gamepad_xbox.svg @@ -7,17 +7,80 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="gamepad_xbox.svg"> + id="defs4919"> + + + + + + + + + + + + + + + inkscape:window-maximized="1" + inkscape:snap-global="false" /> @@ -53,17 +117,596 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g4010" + transform="matrix(0.28433921,0,0,0.28246003,-64.333532,229.1746)"> + + + + inkscape:connector-curvature="0" + id="path4759" + d="m 21.126876,246.08872 c -0.301103,-0.002 -0.605207,0.0105 -0.908988,0.0248 -1.098211,0.0791 -2.655197,0.5375 -3.899503,1.05368 -0.912215,0.42125 -2.971038,1.26942 -3.31401,1.6459 -0.365384,0.31876 -1.293988,2.34627 -1.766817,3.55275 -0.540745,1.37977 -0.935229,2.75314 -1.3130982,4.18683 -1.447945,5.49364 -2.4866023,12.07485 -2.1068482,18.12757 0.12714,2.02649 0.559386,4.19373 1.846399,5.80998 1.0444894,1.31168 2.9418964,1.36756 4.3263504,0.6997 2.261039,-1.09071 3.803235,-3.22117 5.6441,-4.88859 1.966195,-1.78095 4.027534,-3.53232 6.858496,-3.99459 1.820151,-0.29721 4.781206,-0.59796 7.340637,-0.59996 2.559431,0.002 5.520487,0.30275 7.340637,0.59996 2.830963,0.46227 4.892302,2.21364 6.858498,3.99459 1.840865,1.66742 3.38306,3.79788 5.644099,4.88859 1.384454,0.66786 3.28186,0.61198 4.32635,-0.6997 1.287013,-1.61625 1.71926,-3.78349 1.846398,-5.80998 0.379754,-6.05272 -0.658903,-12.63393 -2.106848,-18.12757 -0.37787,-1.43369 -0.772353,-2.80706 -1.313098,-4.18683 -0.472829,-1.20648 -1.401432,-3.23399 -1.766816,-3.55275 -0.342972,-0.37648 -2.401795,-1.22465 -3.31401,-1.6459 -1.244306,-0.51618 -2.801291,-0.97456 -3.899503,-1.05368 -0.303781,-0.0143 -0.607885,-0.0273 -0.908989,-0.0248 -0.903314,0.007 -1.781302,0.15 -2.555399,0.78703 -0.889307,0.84744 -1.769128,1.71057 -2.703711,2.50682 -1.739206,1.28628 -5.272889,1.08788 -7.447608,1.05678 -2.174719,0.0311 -5.708401,0.2295 -7.447607,-1.05678 -0.934582,-0.79625 -1.814404,-1.65938 -2.703711,-2.50682 -0.774096,-0.63703 -1.652085,-0.78003 -2.5554,-0.78703 z" + style="fill:#1c1c1c;fill-opacity:1;stroke:#000000;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/lightgun_generic.svg b/resources/graphics/controllers/lightgun_generic.svg index bc679bf23..9def4cfca 100644 --- a/resources/graphics/controllers/lightgun_generic.svg +++ b/resources/graphics/controllers/lightgun_generic.svg @@ -7,17 +7,253 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" - version="1.1" - id="svg4925" + sodipodi:docname="lightgun_generic.svg" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="lightgun_generic.svg"> + id="svg4925" + version="1.1" + viewBox="0 0 67.733333 67.733333" + height="256" + width="256"> + id="defs4919"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inkscape:window-maximized="1" + inkscape:snap-global="true" /> @@ -53,17 +290,626 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g5072" + transform="matrix(-1,0,0,1,67.733333,0.61876746)"> + inkscape:connector-curvature="0" + id="rect4842" + d="m 7.9993861,247.63193 v 2.70342 l 0.6200999,-0.0322 0.065274,-0.0574 c 0.093616,-0.0817 20.325922,-0.13697 29.221339,-0.13697 h 0.125108 1.908266 v -0.87477 h 12.424248 v -0.29571 h 0.514277 v -0.34021 h -0.514277 v -0.001 H 9.6786997 v -0.96427 z" + style="opacity:1;vector-effect:none;fill:#3d4e4e;fill-opacity:1;stroke:none;stroke-width:1.76429069;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/lightgun_nintendo.svg b/resources/graphics/controllers/lightgun_nintendo.svg index b6b01c15a..b8609c7bd 100644 --- a/resources/graphics/controllers/lightgun_nintendo.svg +++ b/resources/graphics/controllers/lightgun_nintendo.svg @@ -9,13 +9,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="lightgun_nintendo.svg"> + inkscape:window-maximized="1" + inkscape:snap-bbox="true" + inkscape:snap-global="false" + showguides="false" /> @@ -53,17 +56,166 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g5776" + transform="matrix(1.0413714,0,0,1.0413714,-2.1512041,-10.886191)"> + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect4757" + d="m 29.364774,252.27701 h 28.506047 l 2.234438,3.92733 H 29.364774 Z" + style="opacity:1;vector-effect:none;fill:#60615b;fill-opacity:1;stroke:#000000;stroke-width:0.13626042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/steering_wheel_generic.svg b/resources/graphics/controllers/steering_wheel_generic.svg index 082b823b5..bfd966392 100644 --- a/resources/graphics/controllers/steering_wheel_generic.svg +++ b/resources/graphics/controllers/steering_wheel_generic.svg @@ -56,9 +56,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="2.1330399" - inkscape:cx="-174.8671" - inkscape:cy="164.39714" + inkscape:zoom="1.8809912" + inkscape:cx="-30.113005" + inkscape:cy="206.50808" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -88,19 +88,19 @@ id="layer1" transform="translate(0,-229.26665)"> Date: Mon, 1 Nov 2021 18:31:39 +0100 Subject: [PATCH 31/54] (rbsimple-DE) Added controller graphics for the 'xbox360' system. --- .../rbsimple-DE/xbox360/images/controller.svg | 686 +++++++++++++++++- 1 file changed, 684 insertions(+), 2 deletions(-) diff --git a/themes/rbsimple-DE/xbox360/images/controller.svg b/themes/rbsimple-DE/xbox360/images/controller.svg index 345a518f0..2bc21d31c 100644 --- a/themes/rbsimple-DE/xbox360/images/controller.svg +++ b/themes/rbsimple-DE/xbox360/images/controller.svg @@ -1,3 +1,685 @@ - - + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From aaf828d9b7c20d0e089d1f57135f7bc070f4af5d Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 2 Nov 2021 18:23:34 +0100 Subject: [PATCH 32/54] Added the remaining controller icons. --- .../controllers/flight_stick_generic.svg | 498 +++++++- .../graphics/controllers/gamepad_generic.svg | 255 ++++- .../controllers/gamepad_sega_md_3_buttons.svg | 798 +++++++++++++ .../controllers/gamepad_sega_md_6_buttons.svg | 862 ++++++++++++++ .../graphics/controllers/gamepad_xbox.svg | 10 +- .../controllers/lightgun_nintendo.svg | 8 +- .../controllers/steering_wheel_generic.svg | 1009 +++++++++-------- 7 files changed, 2894 insertions(+), 546 deletions(-) create mode 100644 resources/graphics/controllers/gamepad_sega_md_3_buttons.svg create mode 100644 resources/graphics/controllers/gamepad_sega_md_6_buttons.svg diff --git a/resources/graphics/controllers/flight_stick_generic.svg b/resources/graphics/controllers/flight_stick_generic.svg index 2c32c71df..477d13c57 100644 --- a/resources/graphics/controllers/flight_stick_generic.svg +++ b/resources/graphics/controllers/flight_stick_generic.svg @@ -15,7 +15,7 @@ version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="flight_stick_generic.svg"> + inkscape:window-maximized="1" + inkscape:snap-global="false" /> @@ -45,7 +46,7 @@ image/svg+xml - + @@ -54,16 +55,483 @@ inkscape:groupmode="layer" id="layer1" transform="translate(0,-229.26665)"> + + + + + + + + + + + + - + id="g5202" + transform="matrix(0.97820547,0,0,0.97820547,2.5902401,5.5515936)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/gamepad_generic.svg b/resources/graphics/controllers/gamepad_generic.svg index b6b01c15a..6a0343579 100644 --- a/resources/graphics/controllers/gamepad_generic.svg +++ b/resources/graphics/controllers/gamepad_generic.svg @@ -9,15 +9,34 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="42" - height="42" - viewBox="0 0 11.1125 11.1125" + width="256" + height="256" + viewBox="0 0 67.733333 67.733333" version="1.1" id="svg4925" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" - sodipodi:docname="unknown.svg"> + sodipodi:docname="gamepad_generic.svg"> + id="defs4919"> + + + + + inkscape:window-maximized="1" + inkscape:snap-global="false" /> @@ -53,17 +73,216 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-285.88748)"> + transform="translate(0,-229.26665)"> + id="g4010" + transform="matrix(0.28433921,0,0,0.28246003,-64.333532,229.1746)"> + + + + sodipodi:nodetypes="sssscccscccccccsccccs" + inkscape:connector-curvature="0" + id="path4759" + d="m 29.181122,245.34777 c -4.341201,0.0132 -9.211015,0.21165 -12.906706,1.17564 -0.675744,0.17626 -1.36604,0.40725 -1.925464,0.82527 -1.237993,0.92507 -2.273346,2.18427 -2.958993,3.56929 -2.4488935,4.94681 -3.1817478,10.64444 -3.7294877,16.1339 -0.1762514,3.71709 -0.6833116,8.43045 1.0555475,11.88232 0.8238667,2.06457 3.5909572,2.56777 5.3805502,1.40302 3.655352,-2.25203 6.000631,-7.93955 10.158755,-9.48085 2.948442,-1.09291 6.203568,-1.03412 9.33328,-1.11776 0.09937,0.003 0.20017,0.006 0.299722,0.009 0.09955,-0.003 0.200356,-0.006 0.299725,-0.009 3.129712,0.0836 6.356427,0.10479 9.333281,1.11776 4.127878,1.62056 6.383107,7.22882 10.038461,9.48085 1.789591,1.16475 4.556683,0.66155 5.380548,-1.40302 1.73886,-3.45187 1.352094,-8.16523 1.175842,-11.88232 -0.54774,-5.48946 -1.280594,-11.18709 -3.729487,-16.1339 -0.685646,-1.38502 -1.721001,-2.64422 -2.958994,-3.56929 -0.559422,-0.41802 -1.24972,-0.64901 -1.925463,-0.82527 -3.695692,-0.96399 -8.565504,-1.16244 -12.906705,-1.17564 -1.684235,-0.005 -3.270859,-0.0465 -4.696574,-0.0297 -1.425713,-0.0168 -3.033604,0.0246 -4.717838,0.0297 z" + style="fill:#373737;fill-opacity:1;stroke:#000000;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/gamepad_sega_md_3_buttons.svg b/resources/graphics/controllers/gamepad_sega_md_3_buttons.svg new file mode 100644 index 000000000..fe32cdf40 --- /dev/null +++ b/resources/graphics/controllers/gamepad_sega_md_3_buttons.svg @@ -0,0 +1,798 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/gamepad_sega_md_6_buttons.svg b/resources/graphics/controllers/gamepad_sega_md_6_buttons.svg new file mode 100644 index 000000000..a2d924a69 --- /dev/null +++ b/resources/graphics/controllers/gamepad_sega_md_6_buttons.svg @@ -0,0 +1,862 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/graphics/controllers/gamepad_xbox.svg b/resources/graphics/controllers/gamepad_xbox.svg index 0a8656e85..d639c90b0 100644 --- a/resources/graphics/controllers/gamepad_xbox.svg +++ b/resources/graphics/controllers/gamepad_xbox.svg @@ -88,9 +88,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="7.0546876" - inkscape:cx="133.1382" - inkscape:cy="71.476394" + inkscape:zoom="2.1994829" + inkscape:cx="-120.68498" + inkscape:cy="206.97956" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -125,7 +125,7 @@ id="g3951" /> + id="g5055"> + transform="matrix(1.0413714,0,0,1.0413714,-1.3431313,-10.886191)"> @@ -87,511 +87,512 @@ inkscape:groupmode="layer" id="layer1" transform="translate(0,-229.26665)"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="g4902"> + + id="path5345-6-2" + d="m 51.628679,273.1973 5.006948,2.81317 c 2.624779,-4.63933 3.789565,-10.01164 3.263614,-15.40086 -0.532984,-5.29328 -2.663341,-10.24724 -6.038667,-14.2426 l -4.298847,3.71472 a 20.459247,20.459247 0 0 1 4.648926,10.99358 20.459247,20.459247 0 0 1 -2.581974,12.12199 z" + style="opacity:1;vector-effect:none;fill:#275fff;fill-opacity:1;stroke:#303030;stroke-width:0.38527879;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> + + transform="matrix(0.97078132,0,0,0.97078132,0.98954121,7.6883904)" + id="g5301"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + style="opacity:1;vector-effect:none;fill:#383838;fill-opacity:1;stroke:#2e2e2e;stroke-width:0.43980473;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" + d="m 33.866688,257.26975 a 6.4726676,6.4726676 0 0 0 -6.472742,6.47274 6.4726676,6.4726676 0 0 0 6.472742,6.47276 6.4726676,6.4726676 0 0 0 6.472746,-6.47276 6.4726676,6.4726676 0 0 0 -6.472746,-6.47274 z m 0,1.53925 a 4.933052,4.933052 0 0 1 4.932833,4.93349 4.933052,4.933052 0 0 1 -4.932833,4.93284 4.933052,4.933052 0 0 1 -4.932831,-4.93284 4.933052,4.933052 0 0 1 4.932831,-4.93349 z" + id="path4955" + inkscape:connector-curvature="0" /> + + + + + + From f7643e96a423795e01503f68aad99afaeab0f44a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 2 Nov 2021 19:01:00 +0100 Subject: [PATCH 33/54] Added support for two more controller icons. --- es-core/src/components/BadgeComponent.cpp | 62 ++++++++++++----------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/es-core/src/components/BadgeComponent.cpp b/es-core/src/components/BadgeComponent.cpp index ac93c37cb..b7309c9d3 100644 --- a/es-core/src/components/BadgeComponent.cpp +++ b/es-core/src/components/BadgeComponent.cpp @@ -26,36 +26,38 @@ std::vector BadgeComponent::sGameControllers; // The "unknown" controller entry has to be placed last. GameControllers sControllerDefinitions [] = { - // shortName displayName fileName - {"gamepad_generic", "Gamepad (Generic)", ":/graphics/controllers/gamepad_generic.svg"}, - {"gamepad_xbox", "Gamepad (Xbox)", ":/graphics/controllers/gamepad_xbox.svg"}, - {"gamepad_playstation", "Gamepad (PlayStation)", ":/graphics/controllers/gamepad_playstation.svg"}, - {"gamepad_nintendo_nes", "Gamepad (Nintendo NES)", ":/graphics/controllers/gamepad_nintendo_nes.svg"}, - {"gamepad_nintendo_snes", "Gamepad (Nintendo SNES)", ":/graphics/controllers/gamepad_nintendo_snes.svg"}, - {"gamepad_nintendo_64", "Gamepad (Nintendo 64)", ":/graphics/controllers/gamepad_nintendo_64.svg"}, - {"joystick_generic", "Joystick (Generic)", ":/graphics/controllers/joystick_generic.svg"}, - {"joystick_arcade_no_buttons", "Joystick (Arcade no Buttons)", ":/graphics/controllers/joystick_arcade_no_buttons.svg"}, - {"joystick_arcade_1_button", "Joystick (Arcade 1 Button)", ":/graphics/controllers/joystick_arcade_1_button.svg"}, - {"joystick_arcade_2_buttons", "Joystick (Arcade 2 Buttons)", ":/graphics/controllers/joystick_arcade_2_buttons.svg"}, - {"joystick_arcade_3_buttons", "Joystick (Arcade 3 Buttons)", ":/graphics/controllers/joystick_arcade_3_buttons.svg"}, - {"joystick_arcade_4_buttons", "Joystick (Arcade 4 Buttons)", ":/graphics/controllers/joystick_arcade_4_buttons.svg"}, - {"joystick_arcade_5_buttons", "Joystick (Arcade 5 Buttons)", ":/graphics/controllers/joystick_arcade_5_buttons.svg"}, - {"joystick_arcade_6_buttons", "Joystick (Arcade 6 Buttons)", ":/graphics/controllers/joystick_arcade_6_buttons.svg"}, - {"flight_stick_generic", "Flight Stick (Generic)", ":/graphics/controllers/flight_stick_generic.svg"}, - {"spinner_generic", "Spinner (Generic)", ":/graphics/controllers/spinner_generic.svg"}, - {"trackball_generic", "Trackball (Generic)", ":/graphics/controllers/trackball_generic.svg"}, - {"lightgun_generic", "Lightgun (Generic)", ":/graphics/controllers/lightgun_generic.svg"}, - {"lightgun_nintendo", "Lightgun (Nintendo)", ":/graphics/controllers/lightgun_nintendo.svg"}, - {"keyboard_generic", "Keyboard (Generic)", ":/graphics/controllers/keyboard_generic.svg"}, - {"mouse_generic", "Mouse (Generic)", ":/graphics/controllers/mouse_generic.svg"}, - {"mouse_amiga", "Mouse (Amiga)", ":/graphics/controllers/mouse_amiga.svg"}, - {"keyboard_and_mouse_generic", "Keyboard and Mouse (Generic)", ":/graphics/controllers/keyboard_and_mouse_generic.svg"}, - {"steering_wheel_generic", "Steering Wheel (Generic)", ":/graphics/controllers/steering_wheel_generic.svg"}, - {"wii_remote_nintendo", "Wii Remote (Nintendo)", ":/graphics/controllers/wii_remote_nintendo.svg"}, - {"wii_remote_and_nunchuk_nintendo", "Wii Remote and Nunchuk (Nintendo)", ":/graphics/controllers/wii_remote_and_nunchuk_nintendo.svg"}, - {"joycon_left_or_right_nintendo", "Joy-Con Left or Right (Nintendo)", ":/graphics/controllers/joycon_left_or_right_nintendo.svg"}, - {"joycon_pair_nintendo", "Joy-Con Pair (Nintendo)", ":/graphics/controllers/joycon_pair_nintendo.svg"}, - {"unknown", "Unknown Controller", ":/graphics/controllers/unknown.svg"} + // shortName displayName fileName + {"gamepad_generic", "Gamepad (Generic)", ":/graphics/controllers/gamepad_generic.svg"}, + {"gamepad_nintendo_nes", "Gamepad (Nintendo NES)", ":/graphics/controllers/gamepad_nintendo_nes.svg"}, + {"gamepad_nintendo_snes", "Gamepad (Nintendo SNES)", ":/graphics/controllers/gamepad_nintendo_snes.svg"}, + {"gamepad_nintendo_64", "Gamepad (Nintendo 64)", ":/graphics/controllers/gamepad_nintendo_64.svg"}, + {"gamepad_playstation", "Gamepad (PlayStation)", ":/graphics/controllers/gamepad_playstation.svg"}, + {"gamepad_sega_md_3_buttons", "Gamepad (Sega Mega Drive/Genesis 3 Buttons)", ":/graphics/controllers/gamepad_sega_md_3_buttons.svg"}, + {"gamepad_sega_md_6_buttons", "Gamepad (Sega Mega Drive/Genesis 6 Buttons)", ":/graphics/controllers/gamepad_sega_md_6_buttons.svg"}, + {"gamepad_xbox", "Gamepad (Xbox)", ":/graphics/controllers/gamepad_xbox.svg"}, + {"joystick_generic", "Joystick (Generic)", ":/graphics/controllers/joystick_generic.svg"}, + {"joystick_arcade_no_buttons", "Joystick (Arcade No Buttons)", ":/graphics/controllers/joystick_arcade_no_buttons.svg"}, + {"joystick_arcade_1_button", "Joystick (Arcade 1 Button)", ":/graphics/controllers/joystick_arcade_1_button.svg"}, + {"joystick_arcade_2_buttons", "Joystick (Arcade 2 Buttons)", ":/graphics/controllers/joystick_arcade_2_buttons.svg"}, + {"joystick_arcade_3_buttons", "Joystick (Arcade 3 Buttons)", ":/graphics/controllers/joystick_arcade_3_buttons.svg"}, + {"joystick_arcade_4_buttons", "Joystick (Arcade 4 Buttons)", ":/graphics/controllers/joystick_arcade_4_buttons.svg"}, + {"joystick_arcade_5_buttons", "Joystick (Arcade 5 Buttons)", ":/graphics/controllers/joystick_arcade_5_buttons.svg"}, + {"joystick_arcade_6_buttons", "Joystick (Arcade 6 Buttons)", ":/graphics/controllers/joystick_arcade_6_buttons.svg"}, + {"keyboard_generic", "Keyboard (Generic)", ":/graphics/controllers/keyboard_generic.svg"}, + {"keyboard_and_mouse_generic", "Keyboard and Mouse (Generic)", ":/graphics/controllers/keyboard_and_mouse_generic.svg"}, + {"mouse_generic", "Mouse (Generic)", ":/graphics/controllers/mouse_generic.svg"}, + {"mouse_amiga", "Mouse (Amiga)", ":/graphics/controllers/mouse_amiga.svg"}, + {"lightgun_generic", "Lightgun (Generic)", ":/graphics/controllers/lightgun_generic.svg"}, + {"lightgun_nintendo", "Lightgun (Nintendo)", ":/graphics/controllers/lightgun_nintendo.svg"}, + {"steering_wheel_generic", "Steering Wheel (Generic)", ":/graphics/controllers/steering_wheel_generic.svg"}, + {"flight_stick_generic", "Flight Stick (Generic)", ":/graphics/controllers/flight_stick_generic.svg"}, + {"spinner_generic", "Spinner (Generic)", ":/graphics/controllers/spinner_generic.svg"}, + {"trackball_generic", "Trackball (Generic)", ":/graphics/controllers/trackball_generic.svg"}, + {"wii_remote_nintendo", "Wii Remote (Nintendo)", ":/graphics/controllers/wii_remote_nintendo.svg"}, + {"wii_remote_and_nunchuk_nintendo", "Wii Remote and Nunchuk (Nintendo)", ":/graphics/controllers/wii_remote_and_nunchuk_nintendo.svg"}, + {"joycon_left_or_right_nintendo", "Joy-Con Left or Right (Nintendo)", ":/graphics/controllers/joycon_left_or_right_nintendo.svg"}, + {"joycon_pair_nintendo", "Joy-Con Pair (Nintendo)", ":/graphics/controllers/joycon_pair_nintendo.svg"}, + {"unknown", "Unknown Controller", ":/graphics/controllers/unknown.svg"} }; // clang-format on From 1a897a1f0fa8bf1444fbf01eb9e94a4d9e40906e Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 2 Nov 2021 19:07:39 +0100 Subject: [PATCH 34/54] (rbsimple-DE) Updated the controller graphics for a few systems. --- .../megadrive/images/controller.svg | 900 +++++++++--------- .../rbsimple-DE/sega32x/images/controller.svg | 801 +++++++++------- .../rbsimple-DE/xbox360/images/controller.svg | 852 +++++++++-------- 3 files changed, 1367 insertions(+), 1186 deletions(-) diff --git a/themes/rbsimple-DE/megadrive/images/controller.svg b/themes/rbsimple-DE/megadrive/images/controller.svg index 93bf50f49..b51afe99f 100644 --- a/themes/rbsimple-DE/megadrive/images/controller.svg +++ b/themes/rbsimple-DE/megadrive/images/controller.svg @@ -13,7 +13,7 @@ xml:space="preserve" version="1.1" id="svg2" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" sodipodi:docname="controller.svg">image/svg+xml \ No newline at end of file + id="g6184" + transform="rotate(-0.62514897,96.132474,208.54153)"> \ No newline at end of file diff --git a/themes/rbsimple-DE/sega32x/images/controller.svg b/themes/rbsimple-DE/sega32x/images/controller.svg index 8e66b2744..3baa95304 100644 --- a/themes/rbsimple-DE/sega32x/images/controller.svg +++ b/themes/rbsimple-DE/sega32x/images/controller.svg @@ -5,15 +5,38 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" viewBox="0 0 173.7225 329.69626" height="329.69626" width="173.7225" xml:space="preserve" version="1.1" - id="svg2">image/svg+xml \ No newline at end of file + d="m 60.0079,29.299 0.96,0 0,-0.94 -0.96,0 0,0.94 z" /> \ No newline at end of file diff --git a/themes/rbsimple-DE/xbox360/images/controller.svg b/themes/rbsimple-DE/xbox360/images/controller.svg index 2bc21d31c..54751023a 100644 --- a/themes/rbsimple-DE/xbox360/images/controller.svg +++ b/themes/rbsimple-DE/xbox360/images/controller.svg @@ -69,95 +69,93 @@ fit-margin-top="0" fit-margin-left="0" fit-margin-bottom="0" - inkscape:zoom="15.412961" - inkscape:cx="197.52817" - inkscape:cy="222.53423" + inkscape:zoom="2.6423446" + inkscape:cx="-105.60194" + inkscape:cy="140.23289" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg2" /> - - - - - - - - - - - - + id="g5404"> + + + + + + + + + + + + + transform="matrix(0,1.2333223,-1.2251713,0,189.93394,168.89511)"> - - - - - - - - - - - - - - - - - - - - - - - + r="15.70541" + cy="-214.99683" + cx="299.68781" + id="path4758-0-3" + style="opacity:1;vector-effect:none;fill:#7e97c5;fill-opacity:0.41030537;stroke:none;stroke-width:1.29701149;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + r="19.118801" + cy="-214.99683" + cx="299.68781" + id="path4758-14" + style="opacity:1;vector-effect:none;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:1.57890224;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" /> + r="15.70541" + cy="-214.99683" + cx="299.68781" + id="path4758-0-1-6-9" + style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.29701149;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" /> + r="12.015255" + cy="-214.99683" + cx="299.68781" + id="path4758-0-4-20" + style="opacity:1;vector-effect:none;fill:#005ece;fill-opacity:1;stroke:none;stroke-width:0.99226469;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - From 8b5386df799f2134b5c3c28d654f5ad84296bd77 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 17:26:19 +0100 Subject: [PATCH 35/54] Fixed an issue where corrupt SVG graphics could crash the application. --- es-core/src/resources/TextureData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index 28d1dc154..e51908489 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -63,7 +63,7 @@ bool TextureData::initSVGFromMemory(const std::string& fileData) NSVGimage* svgImage{nsvgParse(const_cast(fileData.c_str()), "px", DPI)}; - if (!svgImage) { + if (!svgImage || svgImage->width == 0 || svgImage->height == 0) { LOG(LogError) << "Couldn't parse SVG image"; return false; } From 0bb019a8f9244e1897b24cea1d2f5df917908806 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 17:28:39 +0100 Subject: [PATCH 36/54] (rbsimple-DE) Improved some graphics for the dos, pc, residualvm and scummvm systems. --- themes/rbsimple-DE/dos/images/console.svg | 2221 ++++++++++++-- themes/rbsimple-DE/dos/images/consolegame.svg | 2490 ++++++++++++++-- themes/rbsimple-DE/dos/images/controller.svg | 159 +- themes/rbsimple-DE/dos/images/game.svg | 262 +- themes/rbsimple-DE/dos/images/game2.svg | 83 - themes/rbsimple-DE/pc/images/console.svg | 2221 ++++++++++++-- themes/rbsimple-DE/pc/images/consolegame.svg | 2492 ++++++++++++++-- themes/rbsimple-DE/pc/images/game.svg | 262 +- themes/rbsimple-DE/pc/images/game2.svg | 83 - .../rbsimple-DE/residualvm/images/console.svg | 2052 ++++++++++++- .../residualvm/images/consolegame.svg | 2346 ++++++++++++++- .../residualvm/images/controller.svg | 1298 +++++++- themes/rbsimple-DE/residualvm/images/game.svg | 375 +++ themes/rbsimple-DE/scummvm/images/console.svg | 2306 +++++++++++++-- .../scummvm/images/consolegame.svg | 2619 ++++++++++++++--- .../rbsimple-DE/scummvm/images/controller.svg | 1499 ++++++++-- themes/rbsimple-DE/scummvm/images/game.svg | 315 +- 17 files changed, 20816 insertions(+), 2267 deletions(-) delete mode 100644 themes/rbsimple-DE/dos/images/game2.svg delete mode 100644 themes/rbsimple-DE/pc/images/game2.svg create mode 100644 themes/rbsimple-DE/residualvm/images/game.svg diff --git a/themes/rbsimple-DE/dos/images/console.svg b/themes/rbsimple-DE/dos/images/console.svg index a96aee5f6..c3b528830 100644 --- a/themes/rbsimple-DE/dos/images/console.svg +++ b/themes/rbsimple-DE/dos/images/console.svg @@ -1,170 +1,2051 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/dos/images/consolegame.svg b/themes/rbsimple-DE/dos/images/consolegame.svg index 21e89d697..b6d02a161 100644 --- a/themes/rbsimple-DE/dos/images/consolegame.svg +++ b/themes/rbsimple-DE/dos/images/consolegame.svg @@ -1,314 +1,2226 @@ + + + + + + + + + + + image/svg+xml + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file + d="m 113.86288,856.71208 h 28.8325 v 54.09 h -28.8325 z m -61.57,-11.055 v 67.1275 l 1.94375,1.49625 h 103.18625 l 1.71,-1.885 v -66.735 H 52.29663 l -0.004,-0.004 z" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/dos/images/controller.svg b/themes/rbsimple-DE/dos/images/controller.svg index 9a1d17455..6b24ff32c 100644 --- a/themes/rbsimple-DE/dos/images/controller.svg +++ b/themes/rbsimple-DE/dos/images/controller.svg @@ -22,11 +22,11 @@ height="521.49103">image/svg+xml \ No newline at end of file + style="fill:#cecfce;fill-opacity:1;stroke-width:0.09733336" /> \ No newline at end of file diff --git a/themes/rbsimple-DE/dos/images/game.svg b/themes/rbsimple-DE/dos/images/game.svg index 27dd5da99..965ebb914 100644 --- a/themes/rbsimple-DE/dos/images/game.svg +++ b/themes/rbsimple-DE/dos/images/game.svg @@ -1,107 +1,263 @@ + + + + + + + + + + - + inkscape:snap-global="false" + showguides="false" /> + id="metadata5"> image/svg+xml - + + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-247.78748)"> + transform="matrix(0.18439354,0,0,0.18439396,58.49949,102.93963)" + id="layer1-1"> + style="fill:#3b3b3b;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 181.76913,1030.0746 h 11.28375 v 7.3612 H 181.76913 Z M 2.1478797,845.89083 l -1.20499996,1.1075 -0.3875,1.39875 0.19375,201.53002 0.46624996,1.0325 1.03,0.6587 196.1087503,0.1738 1.305,-0.7338 0.65875,-1.225 -0.2725,-179.79497 h -1.39875 v -8.19875 l 1.10625,0.2725 v -2.7975 l -15.095,-13.25 -2.99125,-0.175 -0.9325,0.835 h -16.04625 l -1.39875,1.39875 -3.26375,0.0975 H 52.23163 l 10e-4,-0.9325 -26.5,-0.195 0.0962,-1.03 -23.6837503,-0.17375 0.002,10e-4 z" /> + transform="matrix(1.25,0,0,-1.25,0.56249974,848.4047)" + id="g988"> + style="fill:none;stroke:#424242;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" + d="m 0,0 0.149,-161.224 0.373,-0.821 0.821,-0.522 156.897,-0.149 1.044,0.597 0.523,0.969 -0.224,143.841 h -1.119 v 6.566 l 0.895,-0.224 v 2.238 L 147.273,1.865 144.885,2.014 144.139,1.343 H 131.307 L 130.188,0.224 127.577,0.149 H 41.332 v 0.746 l -21.188,0.15 0.074,0.82 -18.95,0.149 -0.97,-0.895 z" /> + transform="matrix(1.25,0,0,-1.25,26.022,846.72595)" + id="g992"> + style="fill:none;stroke:#858586;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" + d="m 0,0 v -52.896 l 0.373,-0.671 0.522,-0.224 h 23.128" /> + style="fill:#292929;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 6.9978797,1037.5321 H 18.28163 v -7.3675 H 6.9978797 Z" /> + transform="matrix(1.25,0,0,-1.25,176.16713,1046.6958)" + id="g998"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/themes/rbsimple-DE/dos/images/game2.svg b/themes/rbsimple-DE/dos/images/game2.svg deleted file mode 100644 index 0dda35361..000000000 --- a/themes/rbsimple-DE/dos/images/game2.svg +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/rbsimple-DE/pc/images/console.svg b/themes/rbsimple-DE/pc/images/console.svg index a96aee5f6..c3b528830 100644 --- a/themes/rbsimple-DE/pc/images/console.svg +++ b/themes/rbsimple-DE/pc/images/console.svg @@ -1,170 +1,2051 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/pc/images/consolegame.svg b/themes/rbsimple-DE/pc/images/consolegame.svg index c9c949c33..b6d02a161 100644 --- a/themes/rbsimple-DE/pc/images/consolegame.svg +++ b/themes/rbsimple-DE/pc/images/consolegame.svg @@ -1,314 +1,2226 @@ + + + + + + + + + + + image/svg+xml + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file + d="m 113.86288,856.71208 h 28.8325 v 54.09 h -28.8325 z m -61.57,-11.055 v 67.1275 l 1.94375,1.49625 h 103.18625 l 1.71,-1.885 v -66.735 H 52.29663 l -0.004,-0.004 z" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/pc/images/game.svg b/themes/rbsimple-DE/pc/images/game.svg index 27dd5da99..965ebb914 100644 --- a/themes/rbsimple-DE/pc/images/game.svg +++ b/themes/rbsimple-DE/pc/images/game.svg @@ -1,107 +1,263 @@ + + + + + + + + + + - + inkscape:snap-global="false" + showguides="false" /> + id="metadata5"> image/svg+xml - + + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-247.78748)"> + transform="matrix(0.18439354,0,0,0.18439396,58.49949,102.93963)" + id="layer1-1"> + style="fill:#3b3b3b;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 181.76913,1030.0746 h 11.28375 v 7.3612 H 181.76913 Z M 2.1478797,845.89083 l -1.20499996,1.1075 -0.3875,1.39875 0.19375,201.53002 0.46624996,1.0325 1.03,0.6587 196.1087503,0.1738 1.305,-0.7338 0.65875,-1.225 -0.2725,-179.79497 h -1.39875 v -8.19875 l 1.10625,0.2725 v -2.7975 l -15.095,-13.25 -2.99125,-0.175 -0.9325,0.835 h -16.04625 l -1.39875,1.39875 -3.26375,0.0975 H 52.23163 l 10e-4,-0.9325 -26.5,-0.195 0.0962,-1.03 -23.6837503,-0.17375 0.002,10e-4 z" /> + transform="matrix(1.25,0,0,-1.25,0.56249974,848.4047)" + id="g988"> + style="fill:none;stroke:#424242;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" + d="m 0,0 0.149,-161.224 0.373,-0.821 0.821,-0.522 156.897,-0.149 1.044,0.597 0.523,0.969 -0.224,143.841 h -1.119 v 6.566 l 0.895,-0.224 v 2.238 L 147.273,1.865 144.885,2.014 144.139,1.343 H 131.307 L 130.188,0.224 127.577,0.149 H 41.332 v 0.746 l -21.188,0.15 0.074,0.82 -18.95,0.149 -0.97,-0.895 z" /> + transform="matrix(1.25,0,0,-1.25,26.022,846.72595)" + id="g992"> + style="fill:none;stroke:#858586;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" + d="m 0,0 v -52.896 l 0.373,-0.671 0.522,-0.224 h 23.128" /> + style="fill:#292929;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 6.9978797,1037.5321 H 18.28163 v -7.3675 H 6.9978797 Z" /> + transform="matrix(1.25,0,0,-1.25,176.16713,1046.6958)" + id="g998"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/themes/rbsimple-DE/pc/images/game2.svg b/themes/rbsimple-DE/pc/images/game2.svg deleted file mode 100644 index 0dda35361..000000000 --- a/themes/rbsimple-DE/pc/images/game2.svg +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/rbsimple-DE/residualvm/images/console.svg b/themes/rbsimple-DE/residualvm/images/console.svg index 345a518f0..c3b528830 100644 --- a/themes/rbsimple-DE/residualvm/images/console.svg +++ b/themes/rbsimple-DE/residualvm/images/console.svg @@ -1,3 +1,2051 @@ - - + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/residualvm/images/consolegame.svg b/themes/rbsimple-DE/residualvm/images/consolegame.svg index 345a518f0..be8b158df 100644 --- a/themes/rbsimple-DE/residualvm/images/consolegame.svg +++ b/themes/rbsimple-DE/residualvm/images/consolegame.svg @@ -1,3 +1,2345 @@ - - + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/residualvm/images/controller.svg b/themes/rbsimple-DE/residualvm/images/controller.svg index 345a518f0..6b24ff32c 100644 --- a/themes/rbsimple-DE/residualvm/images/controller.svg +++ b/themes/rbsimple-DE/residualvm/images/controller.svg @@ -1,3 +1,1295 @@ - - - + + + +image/svg+xml + + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/residualvm/images/game.svg b/themes/rbsimple-DE/residualvm/images/game.svg new file mode 100644 index 000000000..ff213643b --- /dev/null +++ b/themes/rbsimple-DE/residualvm/images/game.svg @@ -0,0 +1,375 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/scummvm/images/console.svg b/themes/rbsimple-DE/scummvm/images/console.svg index c2a6b940a..c3b528830 100644 --- a/themes/rbsimple-DE/scummvm/images/console.svg +++ b/themes/rbsimple-DE/scummvm/images/console.svg @@ -1,271 +1,2051 @@ + + image/svg+xml \ No newline at end of file + id="svg8" + inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" + sodipodi:docname="console.svg"> + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/scummvm/images/consolegame.svg b/themes/rbsimple-DE/scummvm/images/consolegame.svg index 77ab01cd7..3ded0f33e 100644 --- a/themes/rbsimple-DE/scummvm/images/consolegame.svg +++ b/themes/rbsimple-DE/scummvm/images/consolegame.svg @@ -1,457 +1,2220 @@ + + + + + + + + + + + + + + image/svg+xml + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 c -0.281,-0.058 -0.561,-0.116 -0.842,-0.171 -0.323,-0.063 -0.323,-0.062 -0.323,-0.395 -10e-4,-0.245 0.059,-0.503 -0.216,-0.667 -0.076,-0.046 -0.018,-0.166 -0.031,-0.25 -0.018,-0.113 0.059,-0.254 -0.047,-0.336 -0.196,-0.152 -0.219,-0.346 -0.208,-0.57 0.014,-0.282 -0.012,-0.566 0.009,-0.847 0.018,-0.243 -0.048,-0.414 -0.257,-0.551 -0.112,-0.074 -0.205,-0.132 -0.344,-0.123 -0.205,0.01 -0.411,-0.003 -0.617,0.004 -0.098,0.003 -0.132,-0.029 -0.144,-0.127 -0.003,-0.029 -0.007,-0.059 -0.011,-0.089 -0.055,-0.473 -0.114,-0.945 -0.178,-1.417 -0.111,-0.812 -0.226,-1.622 -0.339,-2.433 -0.009,-0.027 -0.023,-0.053 -0.028,-0.08 0,-0.001 -10e-4,-0.002 -10e-4,-0.004 -0.101,-0.742 -0.201,-1.483 -0.302,-2.224 -0.011,-0.077 0.013,-0.182 -0.105,-0.191 -0.093,-0.008 -0.107,0.088 -0.141,0.147 -0.335,0.597 -0.669,1.195 -0.997,1.796 -0.064,0.117 -0.105,0.128 -0.209,0.038 -0.366,-0.32 -0.741,-0.631 -1.115,-0.941 -0.059,-0.049 -0.102,-0.094 -0.079,-0.178 0.244,-0.865 0.256,-1.751 0.241,-2.64 -0.002,-0.079 0.015,-0.148 0.056,-0.217 0.254,-0.422 0.504,-0.846 0.753,-1.271 0.042,-0.072 0.089,-0.082 0.163,-0.053 0.553,0.206 1.105,0.41 1.658,0.613 0.068,0.024 0.101,0.058 0.1,0.133 -0.003,0.168 0,0.337 10e-4,0.506 10e-4,0.322 0.437,0.768 0.763,0.732 0.404,-0.043 0.728,0.068 0.999,0.36 0.045,0.049 0.102,0.087 0.157,0.123 0.075,0.049 0.106,0.119 0.121,0.204 0.099,0.59 0.198,1.179 0.302,1.768 0.017,0.095 0,0.13 -0.102,0.127 -0.215,-0.006 -0.432,0.007 -0.647,-0.005 -0.131,-0.006 -0.161,0.038 -0.163,0.164 -0.007,0.375 0.042,0.748 -10e-4,1.122 0.002,0.241 0.008,0.483 0.003,0.724 -0.003,0.096 0.018,0.175 0.099,0.225 0.247,0.148 0.201,0.381 0.164,0.599 -0.023,0.132 0.003,0.181 0.137,0.179 0.302,-0.003 0.606,0.002 0.909,-0.003 0.088,-10e-4 0.129,0.01 0.147,0.116 0.009,0.056 0.018,0.112 0.028,0.168 0.007,0.041 0.014,0.085 0.022,0.131 0.011,0.069 0.024,0.144 0.037,0.222 0.009,0.054 0.018,0.108 0.027,0.163 0.007,0.039 0.014,0.078 0.02,0.118 0.003,0.018 0.006,0.038 0.009,0.057 0.132,0.782 0.268,1.564 0.401,2.347 0.126,0.74 0.249,1.481 0.373,2.221 0.007,0.043 0.015,0.086 0.021,0.129 0.004,0.02 0.007,0.04 0.01,0.059 0.006,0.035 0.012,0.07 0.018,0.105 0.006,0.031 0.01,0.062 0.015,0.092 C 0.36,-0.024 0.271,0.056 0,0 m -5.361,-8.101 -0.163,0.254 c -0.19,0.341 -0.38,0.681 -0.57,1.022 -0.62,1.107 -1.253,2.209 -1.856,3.326 -0.15,0.279 -0.312,0.428 -0.632,0.362 -0.085,-0.018 -0.199,0.044 -0.25,-0.065 -0.094,-0.205 -0.258,-0.224 -0.452,-0.21 -0.159,0.012 -0.319,-0.004 -0.478,0.005 -0.099,0.007 -0.118,-0.03 -0.116,-0.12 0.005,-0.339 10e-4,-0.677 0.005,-1.015 10e-4,-0.098 -0.025,-0.135 -0.131,-0.132 -0.241,0.009 -0.482,-0.003 -0.723,0.006 -0.136,0.004 -0.125,-0.032 -0.067,-0.129 0.383,-0.635 0.763,-1.272 1.139,-1.912 0.054,-0.093 0.12,-0.138 0.225,-0.155 0.943,-0.154 1.742,-0.554 2.307,-1.353 0.178,-0.303 0.377,-0.596 0.469,-0.94 0.033,-0.121 0.071,-0.134 0.17,-0.049 0.342,0.292 0.686,0.582 1.039,0.86 0.11,0.087 0.141,0.161 0.084,0.245 m 3.576,-3.613 c -0.247,-0.281 -0.564,-0.345 -0.916,-0.301 -0.12,0.015 -0.208,-0.042 -0.311,-0.096 -0.305,-0.159 -0.389,-0.403 -0.342,-0.722 0.015,-0.106 -0.002,-0.216 0.005,-0.324 0.008,-0.11 -0.035,-0.16 -0.14,-0.198 -0.569,-0.204 -1.133,-0.42 -1.701,-0.627 -0.086,-0.032 -0.1,-0.057 -0.049,-0.137 0.148,-0.239 0.286,-0.486 0.434,-0.726 l 0.02,-0.041 0.032,-0.062 v -10e-4 l 0.403,-0.798 c 0,0 0.11,-0.26 0.343,-0.208 0.234,0.052 1.532,0.318 1.532,0.318 0,0 0.238,-0.007 0.285,0.403 0.041,0.359 0.06,0.55 0.064,0.591 10e-4,0.006 10e-4,0.01 10e-4,0.01 0.056,0.311 0.108,0.623 0.162,0.937 0.121,0.695 0.24,1.39 0.368,2.131 -0.087,-0.068 -0.148,-0.101 -0.19,-0.149 m -6.538,8.866 c -0.17,0.297 -0.33,0.6 -0.507,0.894 -0.098,0.162 -0.26,0.238 -0.449,0.2 -0.872,-0.177 -1.744,-0.36 -2.615,-0.543 -0.231,-0.049 -0.281,-0.17 -0.158,-0.377 0.278,-0.472 0.574,-0.934 0.832,-1.417 0.157,-0.295 0.33,-0.486 0.625,-0.38 0.187,0 0.31,0.002 0.434,-0.001 0.051,-10e-4 0.087,0.004 0.086,0.072 -0.005,0.298 0.009,0.596 -0.013,0.892 -0.019,0.235 0.014,0.299 0.245,0.299 0.216,0 0.432,10e-4 0.648,0 0.069,-10e-4 0.132,0.005 0.166,0.079 0.075,0.16 0.201,0.21 0.373,0.185 0.091,-0.014 0.185,0.002 0.277,-0.004 0.099,-0.006 0.099,0.026 0.056,0.101 m 6.972,2.046 c -0.01,0.144 -0.007,0.289 -0.001,0.432 0.003,0.079 -0.021,0.094 -0.095,0.078 -0.235,-0.052 -0.472,-0.095 -0.708,-0.146 -0.284,-0.061 -0.396,-0.193 -0.434,-0.478 -0.106,-0.792 -0.213,-1.584 -0.328,-2.375 -0.063,-0.43 -0.071,-0.429 0.362,-0.428 0.098,0 0.195,0 0.293,0 0.192,0.002 0.409,0.217 0.41,0.405 0,0.421 0.001,0.842 0.001,1.263 0,0.057 -0.01,0.114 0.046,0.153 0.191,0.135 0.23,0.327 0.199,0.542 -0.021,0.146 0.022,0.257 0.152,0.335 0.081,0.048 0.109,0.121 0.103,0.219 M -0.824,-6.43 C -1.05,-6.433 -1.276,-6.436 -1.501,-6.427 -1.611,-6.422 -1.634,-6.458 -1.636,-6.563 -1.64,-6.705 -1.561,-6.886 -1.7,-6.981 -1.909,-7.122 -1.922,-7.308 -1.909,-7.523 -1.9,-7.682 -1.906,-7.842 -1.906,-8 v -0.154 c -0.003,-0.261 -0.004,-0.522 -0.01,-0.782 -0.002,-0.081 0.041,-0.092 0.105,-0.091 0.185,0.002 0.369,0.002 0.553,10e-4 0.054,0 0.105,0.002 0.116,0.071 0.053,0.348 0.106,0.695 0.159,1.043 0.082,0.462 0.162,0.926 0.245,1.389 0.015,0.078 -0.012,0.095 -0.086,0.093" /> + + + + + diff --git a/themes/rbsimple-DE/scummvm/images/controller.svg b/themes/rbsimple-DE/scummvm/images/controller.svg index dd52e38b8..6b24ff32c 100644 --- a/themes/rbsimple-DE/scummvm/images/controller.svg +++ b/themes/rbsimple-DE/scummvm/images/controller.svg @@ -1,220 +1,1295 @@ + + image/svg+xml \ No newline at end of file + id="svg2" + sodipodi:docname="controller.svg" + inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" + x="0px" + y="0px" + viewBox="-194 147.4 221.6 488.8978" + enable-background="new -194 147.4 221.6 498.6" + xml:space="preserve" + width="236.37335" + height="521.49103">image/svg+xml + + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/scummvm/images/game.svg b/themes/rbsimple-DE/scummvm/images/game.svg index 7c6fab011..c493d0fd2 100644 --- a/themes/rbsimple-DE/scummvm/images/game.svg +++ b/themes/rbsimple-DE/scummvm/images/game.svg @@ -1,111 +1,250 @@ + + image/svg+xml + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file + d="m 0,0 c -0.281,-0.058 -0.561,-0.116 -0.842,-0.171 -0.323,-0.063 -0.323,-0.062 -0.323,-0.395 -10e-4,-0.245 0.059,-0.503 -0.216,-0.667 -0.076,-0.046 -0.018,-0.166 -0.031,-0.25 -0.018,-0.113 0.059,-0.254 -0.047,-0.336 -0.196,-0.152 -0.219,-0.346 -0.208,-0.57 0.014,-0.282 -0.012,-0.566 0.009,-0.847 0.018,-0.243 -0.048,-0.414 -0.257,-0.551 -0.112,-0.074 -0.205,-0.132 -0.344,-0.123 -0.205,0.01 -0.411,-0.003 -0.617,0.004 -0.098,0.003 -0.132,-0.029 -0.144,-0.127 -0.003,-0.029 -0.007,-0.059 -0.011,-0.089 -0.055,-0.473 -0.114,-0.945 -0.178,-1.417 -0.111,-0.812 -0.226,-1.622 -0.339,-2.433 -0.009,-0.027 -0.023,-0.053 -0.028,-0.08 0,-0.001 -10e-4,-0.002 -10e-4,-0.004 -0.101,-0.742 -0.201,-1.483 -0.302,-2.224 -0.011,-0.077 0.013,-0.182 -0.105,-0.191 -0.093,-0.008 -0.107,0.088 -0.141,0.147 -0.335,0.597 -0.669,1.195 -0.997,1.796 -0.064,0.117 -0.105,0.128 -0.209,0.038 -0.366,-0.32 -0.741,-0.631 -1.115,-0.941 -0.059,-0.049 -0.102,-0.094 -0.079,-0.178 0.244,-0.865 0.256,-1.751 0.241,-2.64 -0.002,-0.079 0.015,-0.148 0.056,-0.217 0.254,-0.422 0.504,-0.846 0.753,-1.271 0.042,-0.072 0.089,-0.082 0.163,-0.053 0.553,0.206 1.105,0.41 1.658,0.613 0.068,0.024 0.101,0.058 0.1,0.133 -0.003,0.168 0,0.337 10e-4,0.506 10e-4,0.322 0.437,0.768 0.763,0.732 0.404,-0.043 0.728,0.068 0.999,0.36 0.045,0.049 0.102,0.087 0.157,0.123 0.075,0.049 0.106,0.119 0.121,0.204 0.099,0.59 0.198,1.179 0.302,1.768 0.017,0.095 0,0.13 -0.102,0.127 -0.215,-0.006 -0.432,0.007 -0.647,-0.005 -0.131,-0.006 -0.161,0.038 -0.163,0.164 -0.007,0.375 0.042,0.748 -10e-4,1.122 0.002,0.241 0.008,0.483 0.003,0.724 -0.003,0.096 0.018,0.175 0.099,0.225 0.247,0.148 0.201,0.381 0.164,0.599 -0.023,0.132 0.003,0.181 0.137,0.179 0.302,-0.003 0.606,0.002 0.909,-0.003 0.088,-10e-4 0.129,0.01 0.147,0.116 0.009,0.056 0.018,0.112 0.028,0.168 0.007,0.041 0.014,0.085 0.022,0.131 0.011,0.069 0.024,0.144 0.037,0.222 0.009,0.054 0.018,0.108 0.027,0.163 0.007,0.039 0.014,0.078 0.02,0.118 0.003,0.018 0.006,0.038 0.009,0.057 0.132,0.782 0.268,1.564 0.401,2.347 0.126,0.74 0.249,1.481 0.373,2.221 0.007,0.043 0.015,0.086 0.021,0.129 0.004,0.02 0.007,0.04 0.01,0.059 0.006,0.035 0.012,0.07 0.018,0.105 0.006,0.031 0.01,0.062 0.015,0.092 C 0.36,-0.024 0.271,0.056 0,0 m -5.361,-8.101 -0.163,0.254 c -0.19,0.341 -0.38,0.681 -0.57,1.022 -0.62,1.107 -1.253,2.209 -1.856,3.326 -0.15,0.279 -0.312,0.428 -0.632,0.362 -0.085,-0.018 -0.199,0.044 -0.25,-0.065 -0.094,-0.205 -0.258,-0.224 -0.452,-0.21 -0.159,0.012 -0.319,-0.004 -0.478,0.005 -0.099,0.007 -0.118,-0.03 -0.116,-0.12 0.005,-0.339 10e-4,-0.677 0.005,-1.015 10e-4,-0.098 -0.025,-0.135 -0.131,-0.132 -0.241,0.009 -0.482,-0.003 -0.723,0.006 -0.136,0.004 -0.125,-0.032 -0.067,-0.129 0.383,-0.635 0.763,-1.272 1.139,-1.912 0.054,-0.093 0.12,-0.138 0.225,-0.155 0.943,-0.154 1.742,-0.554 2.307,-1.353 0.178,-0.303 0.377,-0.596 0.469,-0.94 0.033,-0.121 0.071,-0.134 0.17,-0.049 0.342,0.292 0.686,0.582 1.039,0.86 0.11,0.087 0.141,0.161 0.084,0.245 m 3.576,-3.613 c -0.247,-0.281 -0.564,-0.345 -0.916,-0.301 -0.12,0.015 -0.208,-0.042 -0.311,-0.096 -0.305,-0.159 -0.389,-0.403 -0.342,-0.722 0.015,-0.106 -0.002,-0.216 0.005,-0.324 0.008,-0.11 -0.035,-0.16 -0.14,-0.198 -0.569,-0.204 -1.133,-0.42 -1.701,-0.627 -0.086,-0.032 -0.1,-0.057 -0.049,-0.137 0.148,-0.239 0.286,-0.486 0.434,-0.726 l 0.02,-0.041 0.032,-0.062 v -10e-4 l 0.403,-0.798 c 0,0 0.11,-0.26 0.343,-0.208 0.234,0.052 1.532,0.318 1.532,0.318 0,0 0.238,-0.007 0.285,0.403 0.041,0.359 0.06,0.55 0.064,0.591 10e-4,0.006 10e-4,0.01 10e-4,0.01 0.056,0.311 0.108,0.623 0.162,0.937 0.121,0.695 0.24,1.39 0.368,2.131 -0.087,-0.068 -0.148,-0.101 -0.19,-0.149 m -6.538,8.866 c -0.17,0.297 -0.33,0.6 -0.507,0.894 -0.098,0.162 -0.26,0.238 -0.449,0.2 -0.872,-0.177 -1.744,-0.36 -2.615,-0.543 -0.231,-0.049 -0.281,-0.17 -0.158,-0.377 0.278,-0.472 0.574,-0.934 0.832,-1.417 0.157,-0.295 0.33,-0.486 0.625,-0.38 0.187,0 0.31,0.002 0.434,-0.001 0.051,-10e-4 0.087,0.004 0.086,0.072 -0.005,0.298 0.009,0.596 -0.013,0.892 -0.019,0.235 0.014,0.299 0.245,0.299 0.216,0 0.432,10e-4 0.648,0 0.069,-10e-4 0.132,0.005 0.166,0.079 0.075,0.16 0.201,0.21 0.373,0.185 0.091,-0.014 0.185,0.002 0.277,-0.004 0.099,-0.006 0.099,0.026 0.056,0.101 m 6.972,2.046 c -0.01,0.144 -0.007,0.289 -0.001,0.432 0.003,0.079 -0.021,0.094 -0.095,0.078 -0.235,-0.052 -0.472,-0.095 -0.708,-0.146 -0.284,-0.061 -0.396,-0.193 -0.434,-0.478 -0.106,-0.792 -0.213,-1.584 -0.328,-2.375 -0.063,-0.43 -0.071,-0.429 0.362,-0.428 0.098,0 0.195,0 0.293,0 0.192,0.002 0.409,0.217 0.41,0.405 0,0.421 0.001,0.842 0.001,1.263 0,0.057 -0.01,0.114 0.046,0.153 0.191,0.135 0.23,0.327 0.199,0.542 -0.021,0.146 0.022,0.257 0.152,0.335 0.081,0.048 0.109,0.121 0.103,0.219 M -0.824,-6.43 C -1.05,-6.433 -1.276,-6.436 -1.501,-6.427 -1.611,-6.422 -1.634,-6.458 -1.636,-6.563 -1.64,-6.705 -1.561,-6.886 -1.7,-6.981 -1.909,-7.122 -1.922,-7.308 -1.909,-7.523 -1.9,-7.682 -1.906,-7.842 -1.906,-8 v -0.154 c -0.003,-0.261 -0.004,-0.522 -0.01,-0.782 -0.002,-0.081 0.041,-0.092 0.105,-0.091 0.185,0.002 0.369,0.002 0.553,10e-4 0.054,0 0.105,0.002 0.116,0.071 0.053,0.348 0.106,0.695 0.159,1.043 0.082,0.462 0.162,0.926 0.245,1.389 0.015,0.078 -0.012,0.095 -0.086,0.093" /> + + + + + From 53b0b2c1d4644276d930d9e3591d6085aac0c49f Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 17:31:40 +0100 Subject: [PATCH 37/54] Added support for the Commodore VIC-20 (vic20) system. --- resources/systems/macos/es_systems.xml | 9 + resources/systems/unix/es_systems.xml | 9 + resources/systems/windows/es_systems.xml | 9 + themes/rbsimple-DE/vic20/colors.xml | 18 + themes/rbsimple-DE/vic20/images/console.svg | 3196 ++++++++++++ .../rbsimple-DE/vic20/images/consolegame.svg | 4265 +++++++++++++++++ .../rbsimple-DE/vic20/images/controller.svg | 313 ++ themes/rbsimple-DE/vic20/images/game.svg | 1195 +++++ themes/rbsimple-DE/vic20/images/logo.svg | 217 + themes/rbsimple-DE/vic20/systeminfo.xml | 33 + themes/rbsimple-DE/vic20/theme.xml | 21 + 11 files changed, 9285 insertions(+) create mode 100644 themes/rbsimple-DE/vic20/colors.xml create mode 100644 themes/rbsimple-DE/vic20/images/console.svg create mode 100644 themes/rbsimple-DE/vic20/images/consolegame.svg create mode 100644 themes/rbsimple-DE/vic20/images/controller.svg create mode 100644 themes/rbsimple-DE/vic20/images/game.svg create mode 100644 themes/rbsimple-DE/vic20/images/logo.svg create mode 100644 themes/rbsimple-DE/vic20/systeminfo.xml create mode 100644 themes/rbsimple-DE/vic20/theme.xml diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index ffe09a5d2..ad70d9714 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -1234,6 +1234,15 @@ vectrex vectrex + + vic20 + Commodore VIC-20 + %ROMPATH%/vic20 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xvic_libretro.dylib %ROM% + c64 + vic20 + videopac Philips Videopac G7000 diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index fa1976071..59e614979 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -1243,6 +1243,15 @@ vectrex vectrex + + vic20 + Commodore VIC-20 + %ROMPATH%/vic20 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xvic_libretro.so %ROM% + c64 + vic20 + videopac Philips Videopac G7000 diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 9dbbea775..5bcad606c 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -1243,6 +1243,15 @@ vectrex vectrex + + vic20 + Commodore VIC-20 + %ROMPATH%\vic20 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_xvic_libretro.dll %ROM% + c64 + vic20 + videopac Philips Videopac G7000 diff --git a/themes/rbsimple-DE/vic20/colors.xml b/themes/rbsimple-DE/vic20/colors.xml new file mode 100644 index 000000000..f189a3d2a --- /dev/null +++ b/themes/rbsimple-DE/vic20/colors.xml @@ -0,0 +1,18 @@ + + 7 + + + + 896841 + + + D3D3C9 + + + FFCD1C + + + DC2770 + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/vic20/images/console.svg b/themes/rbsimple-DE/vic20/images/console.svg new file mode 100644 index 000000000..221cfdc7d --- /dev/null +++ b/themes/rbsimple-DE/vic20/images/console.svg @@ -0,0 +1,3196 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/vic20/images/consolegame.svg b/themes/rbsimple-DE/vic20/images/consolegame.svg new file mode 100644 index 000000000..913322a3d --- /dev/null +++ b/themes/rbsimple-DE/vic20/images/consolegame.svg @@ -0,0 +1,4265 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/themes/rbsimple-DE/vic20/images/controller.svg b/themes/rbsimple-DE/vic20/images/controller.svg new file mode 100644 index 000000000..4ec397746 --- /dev/null +++ b/themes/rbsimple-DE/vic20/images/controller.svg @@ -0,0 +1,313 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/vic20/images/game.svg b/themes/rbsimple-DE/vic20/images/game.svg new file mode 100644 index 000000000..936a4a77c --- /dev/null +++ b/themes/rbsimple-DE/vic20/images/game.svg @@ -0,0 +1,1195 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/themes/rbsimple-DE/vic20/images/logo.svg b/themes/rbsimple-DE/vic20/images/logo.svg new file mode 100644 index 000000000..f3d23e2c3 --- /dev/null +++ b/themes/rbsimple-DE/vic20/images/logo.svg @@ -0,0 +1,217 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/vic20/systeminfo.xml b/themes/rbsimple-DE/vic20/systeminfo.xml new file mode 100644 index 000000000..02d27aacd --- /dev/null +++ b/themes/rbsimple-DE/vic20/systeminfo.xml @@ -0,0 +1,33 @@ + + 7 + + + + Manufacturer : Commodore Business Machines + + + Year of Release : 1980 + + + OS : Commodore KERNAL / Commodore BASIC 2.0 + + + CPU : MOS Technology 6502 @ 1.108 MHz (PAL version) + + + RAM : 5KB RAM + + + ROM : 20KB + + + GPU : MOS Technology VIC + + + Sound : 3 x Pulse Wave Generators + White Noise + + + Resolution : 176×184 (16 colours) + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/vic20/theme.xml b/themes/rbsimple-DE/vic20/theme.xml new file mode 100644 index 000000000..077d05361 --- /dev/null +++ b/themes/rbsimple-DE/vic20/theme.xml @@ -0,0 +1,21 @@ + + 7 + ./../theme.xml + ./colors.xml + ./systeminfo.xml + + + + ./images/controller.svg + + + + + + ./images/logo.svg + + + ./images/consolegame.svg + + + \ No newline at end of file From 58519737fa204a93a2c89bb325dba40b1619f4df Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 17:32:37 +0100 Subject: [PATCH 38/54] (rbsimple-DE) Fixed a small error in the c64 system info text. --- themes/rbsimple-DE/c64/systeminfo.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/rbsimple-DE/c64/systeminfo.xml b/themes/rbsimple-DE/c64/systeminfo.xml index 9898a87aa..2715c9272 100644 --- a/themes/rbsimple-DE/c64/systeminfo.xml +++ b/themes/rbsimple-DE/c64/systeminfo.xml @@ -15,7 +15,7 @@ CPU : MOS Technology 6510/8500 @ 0.985 MHz (PAL version) - RAM : 64KB RAM + RAM : 64KB ROM : 20KB From 227b993af0792e42ad6df6aa965d23ff2827949b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 17:51:20 +0100 Subject: [PATCH 39/54] (rbsimple-DE) Added system information for the xbox360 system. --- themes/rbsimple-DE/xbox360/systeminfo.xml | 26 ++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/themes/rbsimple-DE/xbox360/systeminfo.xml b/themes/rbsimple-DE/xbox360/systeminfo.xml index b52e07c6d..1a4abd64e 100644 --- a/themes/rbsimple-DE/xbox360/systeminfo.xml +++ b/themes/rbsimple-DE/xbox360/systeminfo.xml @@ -3,7 +3,31 @@ - Microsoft Xbox 360 + Manufacturer : Microsoft + + + Year of Release : 2005 + + + Units sold : 84 million + + + CPU : 3.2 GHz PowerPC Tri-Core Xenon + + + RAM : 512MB unified GDDR3 @ 700 MHz + 10MB eDRAM cache + + + GPU : 500 MHz ATI/AMD Xenos + + + Resolution : 480i, 480p, 720p, 1080i, 1080p + + + Sound : Stereo LPCM, Dolby Digital 5.1 + + + Media : DVD, Compact Disc \ No newline at end of file From 66bcf8ea13a5ebb1600a23d336e83f431fa64d91 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 18:11:41 +0100 Subject: [PATCH 40/54] Added proper scraping support for the vic20 system. --- es-app/src/PlatformId.cpp | 1 + es-app/src/PlatformId.h | 1 + es-app/src/scrapers/GamesDBJSONScraper.cpp | 1 + es-app/src/scrapers/ScreenScraper.cpp | 1 + resources/systems/macos/es_systems.xml | 2 +- resources/systems/unix/es_systems.xml | 2 +- resources/systems/windows/es_systems.xml | 2 +- 7 files changed, 7 insertions(+), 3 deletions(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 73d6a9249..4fa3a7983 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -116,6 +116,7 @@ namespace PlatformIds "trs-80", // Tandy TRS-80 "uzebox", // Uzebox "vectrex", // Vectrex + "vic20", // Commodore VIC-20 "videopac", // Philips Videopac G7000 (Magnavox Odyssey2) "virtualboy", // Nintendo Virtual Boy "wii", // Nintendo Wii diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index dd596682d..06754f787 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -115,6 +115,7 @@ namespace PlatformIds TANDY_TRS80, UZEBOX, VECTREX, + COMMODORE_VIC20, PHILIPS_VIDEOPAC, NINTENDO_VIRTUAL_BOY, NINTENDO_WII, diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index 046009f70..7bc954630 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -57,6 +57,7 @@ const std::map gamesdb_new_platformid_map{ {CAVESTORY, "1"}, {COLECOVISION, "31"}, {COMMODORE_64, "40"}, + {COMMODORE_VIC20, "4945"}, {DAPHNE, "23"}, {INTELLIVISION, "32"}, {APPLE_MACINTOSH, "37"}, diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 8fa80b582..a79d9cfe7 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -49,6 +49,7 @@ const std::map screenscraper_platformid_map{ {COLECOVISION, 48}, {COMMODORE_64, 66}, {COMMODORE_CDTV, 129}, + {COMMODORE_VIC20, 73}, {DAPHNE, 49}, {INTELLIVISION, 115}, {GAMEENGINE_LUTRO, 206}, diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index ad70d9714..6b09fbe9f 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -1240,7 +1240,7 @@ %ROMPATH%/vic20 .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xvic_libretro.dylib %ROM% - c64 + vic20 vic20 diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index 59e614979..6a5eeb7bb 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -1249,7 +1249,7 @@ %ROMPATH%/vic20 .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xvic_libretro.so %ROM% - c64 + vic20 vic20 diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 5bcad606c..0b3efd4db 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -1249,7 +1249,7 @@ %ROMPATH%\vic20 .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_xvic_libretro.dll %ROM% - c64 + vic20 vic20 From e9bb9d9d9b586077b20d59ea5c1baae9958cbb02 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 18:51:38 +0100 Subject: [PATCH 41/54] Added support for the Philips CD-i (cdimono1) system. --- es-app/src/PlatformId.cpp | 1 + es-app/src/PlatformId.h | 1 + es-app/src/scrapers/GamesDBJSONScraper.cpp | 1 + es-app/src/scrapers/ScreenScraper.cpp | 1 + resources/systems/macos/es_systems.xml | 9 +++ resources/systems/unix/es_systems.xml | 9 +++ resources/systems/windows/es_systems.xml | 9 +++ themes/rbsimple-DE/cdimono1/colors.xml | 18 +++++ .../rbsimple-DE/cdimono1/images/console.svg | 3 + .../cdimono1/images/consolegame.svg | 3 + .../cdimono1/images/controller.svg | 3 + themes/rbsimple-DE/cdimono1/images/logo.svg | 66 +++++++++++++++++++ themes/rbsimple-DE/cdimono1/systeminfo.xml | 30 +++++++++ themes/rbsimple-DE/cdimono1/theme.xml | 21 ++++++ 14 files changed, 175 insertions(+) create mode 100644 themes/rbsimple-DE/cdimono1/colors.xml create mode 100644 themes/rbsimple-DE/cdimono1/images/console.svg create mode 100644 themes/rbsimple-DE/cdimono1/images/consolegame.svg create mode 100644 themes/rbsimple-DE/cdimono1/images/controller.svg create mode 100644 themes/rbsimple-DE/cdimono1/images/logo.svg create mode 100644 themes/rbsimple-DE/cdimono1/systeminfo.xml create mode 100644 themes/rbsimple-DE/cdimono1/theme.xml diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 4fa3a7983..2760f11e7 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -39,6 +39,7 @@ namespace PlatformIds "bbcmicro", // BBC Micro "c64", // Commodore 64 "cavestory", // Cave Story (NXEngine) + "cdimono1", // Philips CD-i "cdtv", // Commodore CDTV "channelf", // Fairchild Channel F "coco", // Tandy Color Computer diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 06754f787..ea0ba5719 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -38,6 +38,7 @@ namespace PlatformIds BBC_MICRO, COMMODORE_64, CAVESTORY, + PHILIPS_CDI, COMMODORE_CDTV, FAIRCHILD_CHANNELF, TANDY_COLOR_COMPUTER, diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index 7bc954630..f1c78853f 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -93,6 +93,7 @@ const std::map gamesdb_new_platformid_map{ {PC, "1"}, {VALVE_STEAM, "1"}, {NEC_PCFX, "4930"}, + {PHILIPS_CDI, "4917"}, {SEGA_32X, "33"}, {SEGA_CD, "21"}, {SEGA_DREAMCAST, "16"}, diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index a79d9cfe7..8f83375e5 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -87,6 +87,7 @@ const std::map screenscraper_platformid_map{ {PC, 135}, {VALVE_STEAM, 135}, {NEC_PCFX, 72}, + {PHILIPS_CDI, 133}, {GAMEENGINE_OPENBOR, 214}, {TANGERINE_ORIC, 131}, {GAMEENGINE_SCUMMVM, 123}, diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 6b09fbe9f..036451860 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -238,6 +238,15 @@ cavestory cavestory + + cdimono1 + Philips CD-i + %ROMPATH%/cdimono1 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + cdimono1 + cdimono1 + cdtv Commodore CDTV diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index 6a5eeb7bb..d970efb2f 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -239,6 +239,15 @@ cavestory cavestory + + cdimono1 + Philips CD-i + %ROMPATH%/cdimono1 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + cdimono1 + cdimono1 + cdtv Commodore CDTV diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 0b3efd4db..1d6c8dc28 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -239,6 +239,15 @@ cavestory cavestory + + cdimono1 + Philips CD-i + %ROMPATH%\cdimono1 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + cdimono1 + cdimono1 + cdtv Commodore CDTV diff --git a/themes/rbsimple-DE/cdimono1/colors.xml b/themes/rbsimple-DE/cdimono1/colors.xml new file mode 100644 index 000000000..4010968d6 --- /dev/null +++ b/themes/rbsimple-DE/cdimono1/colors.xml @@ -0,0 +1,18 @@ + + 7 + + + + 000000 + + + E70000 + + + FFFFFF + + + 0B5ED8 + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/cdimono1/images/console.svg b/themes/rbsimple-DE/cdimono1/images/console.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/cdimono1/images/console.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/cdimono1/images/consolegame.svg b/themes/rbsimple-DE/cdimono1/images/consolegame.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/cdimono1/images/consolegame.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/cdimono1/images/controller.svg b/themes/rbsimple-DE/cdimono1/images/controller.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/cdimono1/images/controller.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/cdimono1/images/logo.svg b/themes/rbsimple-DE/cdimono1/images/logo.svg new file mode 100644 index 000000000..98e577835 --- /dev/null +++ b/themes/rbsimple-DE/cdimono1/images/logo.svg @@ -0,0 +1,66 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/themes/rbsimple-DE/cdimono1/systeminfo.xml b/themes/rbsimple-DE/cdimono1/systeminfo.xml new file mode 100644 index 000000000..07a7de30f --- /dev/null +++ b/themes/rbsimple-DE/cdimono1/systeminfo.xml @@ -0,0 +1,30 @@ + + 7 + + + + Manufacturer : Philips and others + + + Year of Release : 1990 + + + Units sold : 1 million + + + CPU : Philips SCC68070 (Motorola 68000-based) @ 15.5 MHz + + + Video : SCC66470, later MCD 212 + + + RAM : 1 MB + + + Audio : MCD 221, 16-bit stereo + + + Resolution : 384×280 to 768×560 + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/cdimono1/theme.xml b/themes/rbsimple-DE/cdimono1/theme.xml new file mode 100644 index 000000000..077d05361 --- /dev/null +++ b/themes/rbsimple-DE/cdimono1/theme.xml @@ -0,0 +1,21 @@ + + 7 + ./../theme.xml + ./colors.xml + ./systeminfo.xml + + + + ./images/controller.svg + + + + + + ./images/logo.svg + + + ./images/consolegame.svg + + + \ No newline at end of file From 68f9fcf309a08f61bc2741c8d468e730871d3ef7 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 19:05:53 +0100 Subject: [PATCH 42/54] (rbsimple-DE) Small adjustments to the vic20 graphics. --- themes/rbsimple-DE/vic20/images/console.svg | 4603 ++++++++--------- .../rbsimple-DE/vic20/images/consolegame.svg | 4100 +++++++-------- 2 files changed, 4154 insertions(+), 4549 deletions(-) diff --git a/themes/rbsimple-DE/vic20/images/console.svg b/themes/rbsimple-DE/vic20/images/console.svg index 221cfdc7d..aef8b914a 100644 --- a/themes/rbsimple-DE/vic20/images/console.svg +++ b/themes/rbsimple-DE/vic20/images/console.svg @@ -92,9 +92,9 @@ inkscape:window-height="2065" id="namedview1648" showgrid="false" - inkscape:zoom="0.28528026" - inkscape:cx="171.67695" - inkscape:cy="917.61798" + inkscape:zoom="0.35577425" + inkscape:cx="919.24479" + inkscape:cy="672.44708" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" @@ -126,441 +126,442 @@ \ No newline at end of file + style="fill:#423530;fill-opacity:1;stroke:#251e1c;stroke-miterlimit:10;stroke-opacity:1" /> \ No newline at end of file diff --git a/themes/rbsimple-DE/vic20/images/consolegame.svg b/themes/rbsimple-DE/vic20/images/consolegame.svg index 913322a3d..faf7f8863 100644 --- a/themes/rbsimple-DE/vic20/images/consolegame.svg +++ b/themes/rbsimple-DE/vic20/images/consolegame.svg @@ -44,9 +44,9 @@ fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" - inkscape:zoom="0.23401283" - inkscape:cx="1827.1684" - inkscape:cy="1334.8953" + inkscape:zoom="0.58367683" + inkscape:cx="1590.4028" + inkscape:cy="788.61187" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" @@ -1195,7 +1195,7 @@ id="path758-1" style="fill:none;stroke:#292929;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" d="m 0,0 23.667,104.667 c 0,6.6 5.4,12 12,12 h 226.166 -0.176 226.166 c 6.6,0 12,-5.4 12,-12 L 523.49,0" /> \ No newline at end of file + style="fill:#423530;fill-opacity:1;stroke:#251e1c;stroke-miterlimit:10;stroke-opacity:1" /> \ No newline at end of file From 350fa73e0de26a29a409c0af16efd388e0f138ea Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Nov 2021 21:19:38 +0100 Subject: [PATCH 43/54] Added support for the Google Android (android) system. --- es-app/src/PlatformId.cpp | 1 + es-app/src/PlatformId.h | 1 + es-app/src/scrapers/GamesDBJSONScraper.cpp | 1 + es-app/src/scrapers/ScreenScraper.cpp | 1 + resources/systems/macos/es_systems.xml | 9 ++ resources/systems/unix/es_systems.xml | 9 ++ resources/systems/windows/es_systems.xml | 9 ++ themes/rbsimple-DE/android/colors.xml | 18 +++ themes/rbsimple-DE/android/images/console.svg | 3 + .../android/images/consolegame.svg | 3 + .../rbsimple-DE/android/images/controller.svg | 3 + themes/rbsimple-DE/android/images/logo.svg | 120 ++++++++++++++++++ themes/rbsimple-DE/android/systeminfo.xml | 27 ++++ themes/rbsimple-DE/android/theme.xml | 21 +++ 14 files changed, 226 insertions(+) create mode 100644 themes/rbsimple-DE/android/colors.xml create mode 100644 themes/rbsimple-DE/android/images/console.svg create mode 100644 themes/rbsimple-DE/android/images/consolegame.svg create mode 100644 themes/rbsimple-DE/android/images/controller.svg create mode 100644 themes/rbsimple-DE/android/images/logo.svg create mode 100644 themes/rbsimple-DE/android/systeminfo.xml create mode 100644 themes/rbsimple-DE/android/theme.xml diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 2760f11e7..3077cdc30 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -22,6 +22,7 @@ namespace PlatformIds "amiga", // Commodore Amiga "amigacd32", // Commodore Amiga CD32 "amstradcpc", // Amstrad CPC + "android", // Google Android "apple2", // Apple II "apple2gs", // Apple IIGS "arcade", // Arcade diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index ea0ba5719..892e5eb0d 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -21,6 +21,7 @@ namespace PlatformIds COMMODORE_AMIGA, COMMODORE_AMIGA_CD32, AMSTRAD_CPC, + GOOGLE_ANDROID, APPLE_II, APPLE_IIGS, ARCADE, diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index f1c78853f..33b832acb 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -61,6 +61,7 @@ const std::map gamesdb_new_platformid_map{ {DAPHNE, "23"}, {INTELLIVISION, "32"}, {APPLE_MACINTOSH, "37"}, + {GOOGLE_ANDROID, "4916"}, {MICROSOFT_XBOX, "14"}, {MICROSOFT_XBOX_360, "15"}, {MOONLIGHT, "1"}, diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 8f83375e5..99f2935cb 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -54,6 +54,7 @@ const std::map screenscraper_platformid_map{ {INTELLIVISION, 115}, {GAMEENGINE_LUTRO, 206}, {APPLE_MACINTOSH, 146}, + {GOOGLE_ANDROID, 63}, {MICROSOFT_XBOX, 32}, {MICROSOFT_XBOX_360, 33}, {MOONLIGHT, 138}, diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 036451860..46db7d38b 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -74,6 +74,15 @@ amstradcpc amstradcpc + + android + Google Android + %ROMPATH%/android + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + android + apple2 Apple II diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index d970efb2f..bd043c894 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -75,6 +75,15 @@ amstradcpc amstradcpc + + android + Google Android + %ROMPATH%/android + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + android + apple2 Apple II diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 1d6c8dc28..e092dfc2b 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -75,6 +75,15 @@ amstradcpc amstradcpc + + android + Google Android + %ROMPATH%\android + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + android + apple2 Apple II diff --git a/themes/rbsimple-DE/android/colors.xml b/themes/rbsimple-DE/android/colors.xml new file mode 100644 index 000000000..fa70ad569 --- /dev/null +++ b/themes/rbsimple-DE/android/colors.xml @@ -0,0 +1,18 @@ + + 7 + + + + 4086F4 + + + EB4132 + + + FBBD00 + + + 31AA52 + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/android/images/console.svg b/themes/rbsimple-DE/android/images/console.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/android/images/console.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/android/images/consolegame.svg b/themes/rbsimple-DE/android/images/consolegame.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/android/images/consolegame.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/android/images/controller.svg b/themes/rbsimple-DE/android/images/controller.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/android/images/controller.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/android/images/logo.svg b/themes/rbsimple-DE/android/images/logo.svg new file mode 100644 index 000000000..b409a241f --- /dev/null +++ b/themes/rbsimple-DE/android/images/logo.svg @@ -0,0 +1,120 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/android/systeminfo.xml b/themes/rbsimple-DE/android/systeminfo.xml new file mode 100644 index 000000000..07b6637dd --- /dev/null +++ b/themes/rbsimple-DE/android/systeminfo.xml @@ -0,0 +1,27 @@ + + 7 + + + + The Android operating system, developed by + + + Android Inc. and later acquired by Google is by + + + far the most popular mobile OS in the world. + + + Due to the power of modern mobile devices and + + + the popularity of the platform there is a rich + + + library of games available, some even rivalling + + + those on dedicated game consoles. + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/android/theme.xml b/themes/rbsimple-DE/android/theme.xml new file mode 100644 index 000000000..077d05361 --- /dev/null +++ b/themes/rbsimple-DE/android/theme.xml @@ -0,0 +1,21 @@ + + 7 + ./../theme.xml + ./colors.xml + ./systeminfo.xml + + + + ./images/controller.svg + + + + + + ./images/logo.svg + + + ./images/consolegame.svg + + + \ No newline at end of file From 99c9a1fa281030a66b10cd5233d232c8fc23c812 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 10:07:08 +0100 Subject: [PATCH 44/54] Minor change to a notification window regarding the miximage offline generator. --- es-app/src/guis/GuiScraperMenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiScraperMenu.cpp b/es-app/src/guis/GuiScraperMenu.cpp index ca7e5398a..17a2526f7 100644 --- a/es-app/src/guis/GuiScraperMenu.cpp +++ b/es-app/src/guis/GuiScraperMenu.cpp @@ -636,7 +636,7 @@ void GuiScraperMenu::openOfflineGenerator(GuiSettings* settings) { if (mSystems->getSelectedObjects().empty()) { mWindow->pushGui(new GuiMsgBox(mWindow, getHelpStyle(), - "THE MIXIMAGE GENERATOR USES THE SAME SYSTEM\n" + "THE OFFLINE GENERATOR USES THE SAME SYSTEM\n" "SELECTIONS AS THE SCRAPER, SO PLEASE SELECT\n" "AT LEAST ONE SYSTEM TO GENERATE IMAGES FOR")); return; From 4b81a746ab86c9758159f0952cd36dcf30555fb0 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 11:29:52 +0100 Subject: [PATCH 45/54] Added support for the Java 2 Micro Edition (j2me) system. --- resources/systems/macos/es_systems.xml | 9 ++ resources/systems/unix/es_systems.xml | 9 ++ resources/systems/windows/es_systems.xml | 9 ++ themes/rbsimple-DE/j2me/colors.xml | 18 +++ themes/rbsimple-DE/j2me/images/console.svg | 3 + .../rbsimple-DE/j2me/images/consolegame.svg | 3 + themes/rbsimple-DE/j2me/images/controller.svg | 3 + themes/rbsimple-DE/j2me/images/logo.svg | 131 ++++++++++++++++++ themes/rbsimple-DE/j2me/systeminfo.xml | 24 ++++ themes/rbsimple-DE/j2me/theme.xml | 21 +++ 10 files changed, 230 insertions(+) create mode 100644 themes/rbsimple-DE/j2me/colors.xml create mode 100644 themes/rbsimple-DE/j2me/images/console.svg create mode 100644 themes/rbsimple-DE/j2me/images/consolegame.svg create mode 100644 themes/rbsimple-DE/j2me/images/controller.svg create mode 100644 themes/rbsimple-DE/j2me/images/logo.svg create mode 100644 themes/rbsimple-DE/j2me/systeminfo.xml create mode 100644 themes/rbsimple-DE/j2me/theme.xml diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 46db7d38b..16dfa330c 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -500,6 +500,15 @@ intellivision intellivision + + j2me + Java 2 Micro Edition (J2ME) + %ROMPATH%/j2me + .jar .JAR .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/squirreljme_libretro.dylib %ROM% + android + j2me + kodi Kodi home theatre software diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index bd043c894..5629b2179 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -501,6 +501,15 @@ intellivision intellivision + + j2me + Java 2 Micro Edition (J2ME) + %ROMPATH%/j2me + .jar .JAR .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/squirreljme_libretro.so %ROM% + android + j2me + kodi Kodi home theatre software diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index e092dfc2b..dedc738fa 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -501,6 +501,15 @@ intellivision intellivision + + j2me + Java 2 Micro Edition (J2ME) + %ROMPATH%\j2me + .jar .JAR .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/squirreljme_libretro.dll %ROM% + android + j2me + kodi Kodi home theatre software diff --git a/themes/rbsimple-DE/j2me/colors.xml b/themes/rbsimple-DE/j2me/colors.xml new file mode 100644 index 000000000..b153880d6 --- /dev/null +++ b/themes/rbsimple-DE/j2me/colors.xml @@ -0,0 +1,18 @@ + + 7 + + + + F58219 + + + 4E7896 + + + EE3537 + + + 1F4394 + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/j2me/images/console.svg b/themes/rbsimple-DE/j2me/images/console.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/j2me/images/console.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/j2me/images/consolegame.svg b/themes/rbsimple-DE/j2me/images/consolegame.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/j2me/images/consolegame.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/j2me/images/controller.svg b/themes/rbsimple-DE/j2me/images/controller.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/j2me/images/controller.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/j2me/images/logo.svg b/themes/rbsimple-DE/j2me/images/logo.svg new file mode 100644 index 000000000..b3e01b7b1 --- /dev/null +++ b/themes/rbsimple-DE/j2me/images/logo.svg @@ -0,0 +1,131 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/rbsimple-DE/j2me/systeminfo.xml b/themes/rbsimple-DE/j2me/systeminfo.xml new file mode 100644 index 000000000..2c702b512 --- /dev/null +++ b/themes/rbsimple-DE/j2me/systeminfo.xml @@ -0,0 +1,24 @@ + + 7 + + + + The Java 2 Platform, Micro Edition (J2ME) is a + + + platform for portable code on embedded and + + + mobile devices. + + + It was popular for game development on early + + + mobile phones running Symbian, such as those + + + sold by Nokia, Motorola and Sony Ericsson. + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/j2me/theme.xml b/themes/rbsimple-DE/j2me/theme.xml new file mode 100644 index 000000000..077d05361 --- /dev/null +++ b/themes/rbsimple-DE/j2me/theme.xml @@ -0,0 +1,21 @@ + + 7 + ./../theme.xml + ./colors.xml + ./systeminfo.xml + + + + ./images/controller.svg + + + + + + ./images/logo.svg + + + ./images/consolegame.svg + + + \ No newline at end of file From 744557e4a989739b46a13ecc4de99434fcbc66d0 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 11:56:12 +0100 Subject: [PATCH 46/54] Added support for the Symbian (symbian) system. --- resources/systems/macos/es_systems.xml | 9 +++++++ resources/systems/unix/es_systems.xml | 9 +++++++ resources/systems/windows/es_systems.xml | 11 ++++++++- themes/rbsimple-DE/symbian/colors.xml | 18 ++++++++++++++ themes/rbsimple-DE/symbian/images/console.svg | 3 +++ .../symbian/images/consolegame.svg | 3 +++ .../rbsimple-DE/symbian/images/controller.svg | 3 +++ themes/rbsimple-DE/symbian/images/logo.svg | 14 +++++++++++ themes/rbsimple-DE/symbian/systeminfo.xml | 24 +++++++++++++++++++ themes/rbsimple-DE/symbian/theme.xml | 21 ++++++++++++++++ 10 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 themes/rbsimple-DE/symbian/colors.xml create mode 100644 themes/rbsimple-DE/symbian/images/console.svg create mode 100644 themes/rbsimple-DE/symbian/images/consolegame.svg create mode 100644 themes/rbsimple-DE/symbian/images/controller.svg create mode 100644 themes/rbsimple-DE/symbian/images/logo.svg create mode 100644 themes/rbsimple-DE/symbian/systeminfo.xml create mode 100644 themes/rbsimple-DE/symbian/theme.xml diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 16dfa330c..3a5db743c 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -1179,6 +1179,15 @@ switch switch + + symbian + Symbian + %ROMPATH%/symbian + .jar .JAR .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/squirreljme_libretro.dylib %ROM% + android + symbian + tanodragon Tano Dragon diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index 5629b2179..870926c20 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -1187,6 +1187,15 @@ switch switch + + symbian + Symbian + %ROMPATH%/symbian + .jar .JAR .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/squirreljme_libretro.so %ROM% + android + symbian + tanodragon Tano Dragon diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index dedc738fa..5a2c524ec 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -506,7 +506,7 @@ Java 2 Micro Edition (J2ME) %ROMPATH%\j2me .jar .JAR .7z .7Z .zip .ZIP - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/squirreljme_libretro.dll %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\squirreljme_libretro.dll %ROM% android j2me @@ -1187,6 +1187,15 @@ switch switch + + symbian + Symbian + %ROMPATH%\symbian + .jar .JAR .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\squirreljme_libretro.dll %ROM% + android + symbian + tanodragon Tano Dragon diff --git a/themes/rbsimple-DE/symbian/colors.xml b/themes/rbsimple-DE/symbian/colors.xml new file mode 100644 index 000000000..19d64d83e --- /dev/null +++ b/themes/rbsimple-DE/symbian/colors.xml @@ -0,0 +1,18 @@ + + 7 + + + + 0082B5 + + + FBAB18 + + + 1F4394 + + + EE3537 + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/symbian/images/console.svg b/themes/rbsimple-DE/symbian/images/console.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/symbian/images/console.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/symbian/images/consolegame.svg b/themes/rbsimple-DE/symbian/images/consolegame.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/symbian/images/consolegame.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/symbian/images/controller.svg b/themes/rbsimple-DE/symbian/images/controller.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/symbian/images/controller.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/symbian/images/logo.svg b/themes/rbsimple-DE/symbian/images/logo.svg new file mode 100644 index 000000000..d05fcab79 --- /dev/null +++ b/themes/rbsimple-DE/symbian/images/logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/symbian/systeminfo.xml b/themes/rbsimple-DE/symbian/systeminfo.xml new file mode 100644 index 000000000..07d96f17a --- /dev/null +++ b/themes/rbsimple-DE/symbian/systeminfo.xml @@ -0,0 +1,24 @@ + + 7 + + + + The Symbian operating system was the dominant + + + platform for early mobile devices, including + + + smartphones of the era. + + + Due to the popularity of Symbian, there are many + + + games available, primarily developed using + + + Java 2 Platform, Micro Edition (J2ME). + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/symbian/theme.xml b/themes/rbsimple-DE/symbian/theme.xml new file mode 100644 index 000000000..077d05361 --- /dev/null +++ b/themes/rbsimple-DE/symbian/theme.xml @@ -0,0 +1,21 @@ + + 7 + ./../theme.xml + ./colors.xml + ./systeminfo.xml + + + + ./images/controller.svg + + + + + + ./images/logo.svg + + + ./images/consolegame.svg + + + \ No newline at end of file From 7a4fd93890f571938b6bef9ae290f369b955d0bf Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 12:10:19 +0100 Subject: [PATCH 47/54] (rbsimple-DE) Updated the systeminfo text for the switch system. --- themes/rbsimple-DE/switch/systeminfo.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/themes/rbsimple-DE/switch/systeminfo.xml b/themes/rbsimple-DE/switch/systeminfo.xml index 5cc57bc49..8ca5802be 100644 --- a/themes/rbsimple-DE/switch/systeminfo.xml +++ b/themes/rbsimple-DE/switch/systeminfo.xml @@ -9,7 +9,7 @@ Year of Release : 2017 - Units sold : 84 million + Units sold : 89 million Best-selling game : Mario Kart 8 Deluxe @@ -24,7 +24,10 @@ Video : 256 Maxwell-based CUDA cores @ 307.2–768 MHz - Screen : 6.2-inch, 1280 × 720 LCD (237 ppi) + Screen (original version) : 6.2-inch, 1280 × 720 LCD (237 ppi) + + + Screen (OLED version) : 7-inch, 1280 × 720 OLED (209.8 ppi) \ No newline at end of file From 4696c5bb33bd85515481164a7a795ef48301eeeb Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 12:44:59 +0100 Subject: [PATCH 48/54] (rbsimple-DE) Small adjustment to the logo for the j2me system. --- themes/rbsimple-DE/j2me/images/logo.svg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/themes/rbsimple-DE/j2me/images/logo.svg b/themes/rbsimple-DE/j2me/images/logo.svg index b3e01b7b1..fd47b22eb 100644 --- a/themes/rbsimple-DE/j2me/images/logo.svg +++ b/themes/rbsimple-DE/j2me/images/logo.svg @@ -21,7 +21,7 @@ image/svg+xml - + @@ -40,9 +40,9 @@ inkscape:window-height="2065" id="namedview10" showgrid="false" - inkscape:zoom="4.9052771" - inkscape:cx="0.70412085" - inkscape:cy="31.053068" + inkscape:zoom="12.234785" + inkscape:cx="54.116181" + inkscape:cy="22.059058" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" @@ -66,7 +66,7 @@ aria-label="Micro Edition" style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.20037651px;line-height:1.25;font-family:KacstArt;-inkscape-font-specification:'KacstArt Bold';letter-spacing:0px;word-spacing:0px;fill:#f58219;fill-opacity:1;stroke:none;stroke-width:0.90004706" id="text4755-3-0" - transform="translate(0.522753,0.30579272)"> + transform="translate(0.522753,0.79619775)"> Date: Thu, 4 Nov 2021 12:50:34 +0100 Subject: [PATCH 49/54] Added support for the Epic Games Store (epic) system. --- resources/systems/macos/es_systems.xml | 9 +++++ resources/systems/unix/es_systems.xml | 9 +++++ resources/systems/windows/es_systems.xml | 9 +++++ themes/rbsimple-DE/epic/colors.xml | 18 ++++++++++ themes/rbsimple-DE/epic/images/console.svg | 3 ++ .../rbsimple-DE/epic/images/consolegame.svg | 3 ++ themes/rbsimple-DE/epic/images/controller.svg | 3 ++ themes/rbsimple-DE/epic/images/logo.svg | 33 +++++++++++++++++++ themes/rbsimple-DE/epic/systeminfo.xml | 15 +++++++++ themes/rbsimple-DE/epic/theme.xml | 21 ++++++++++++ 10 files changed, 123 insertions(+) create mode 100644 themes/rbsimple-DE/epic/colors.xml create mode 100644 themes/rbsimple-DE/epic/images/console.svg create mode 100644 themes/rbsimple-DE/epic/images/consolegame.svg create mode 100644 themes/rbsimple-DE/epic/images/controller.svg create mode 100644 themes/rbsimple-DE/epic/images/logo.svg create mode 100644 themes/rbsimple-DE/epic/systeminfo.xml create mode 100644 themes/rbsimple-DE/epic/theme.xml diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 3a5db743c..542f8943d 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -357,6 +357,15 @@ dreamcast dreamcast + + epic + Epic Games Store + %ROMPATH%/epic + .sh + zsh %ROM% + pc + epic + famicom Nintendo Family Computer diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index 870926c20..eb8d8d90d 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -358,6 +358,15 @@ dreamcast dreamcast + + epic + Epic Games Store + %ROMPATH%/epic + .sh + bash %ROM% + pc + epic + famicom Nintendo Family Computer diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 5a2c524ec..c8e7b72f8 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -358,6 +358,15 @@ dreamcast dreamcast + + epic + Epic Games Store + %ROMPATH%\epic + .bat + %HIDEWINDOW% cmd.exe /C %ROM% + pc + epic + famicom Nintendo Family Computer diff --git a/themes/rbsimple-DE/epic/colors.xml b/themes/rbsimple-DE/epic/colors.xml new file mode 100644 index 000000000..3447a1eed --- /dev/null +++ b/themes/rbsimple-DE/epic/colors.xml @@ -0,0 +1,18 @@ + + 7 + + + + FFFFFF + + + 777777 + + + 343434 + + + 35C4EE + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/epic/images/console.svg b/themes/rbsimple-DE/epic/images/console.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/epic/images/console.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/epic/images/consolegame.svg b/themes/rbsimple-DE/epic/images/consolegame.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/epic/images/consolegame.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/epic/images/controller.svg b/themes/rbsimple-DE/epic/images/controller.svg new file mode 100644 index 000000000..345a518f0 --- /dev/null +++ b/themes/rbsimple-DE/epic/images/controller.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/rbsimple-DE/epic/images/logo.svg b/themes/rbsimple-DE/epic/images/logo.svg new file mode 100644 index 000000000..d8a42cff0 --- /dev/null +++ b/themes/rbsimple-DE/epic/images/logo.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/epic/systeminfo.xml b/themes/rbsimple-DE/epic/systeminfo.xml new file mode 100644 index 000000000..9d1a46490 --- /dev/null +++ b/themes/rbsimple-DE/epic/systeminfo.xml @@ -0,0 +1,15 @@ + + 7 + + + + The Epic Games Store is a digital video game storefront + + + launched in 2018. It has native clients for Microsoft + + + Windows and macOS but can also be used on Linux. + + + \ No newline at end of file diff --git a/themes/rbsimple-DE/epic/theme.xml b/themes/rbsimple-DE/epic/theme.xml new file mode 100644 index 000000000..077d05361 --- /dev/null +++ b/themes/rbsimple-DE/epic/theme.xml @@ -0,0 +1,21 @@ + + 7 + ./../theme.xml + ./colors.xml + ./systeminfo.xml + + + + ./images/controller.svg + + + + + + ./images/logo.svg + + + ./images/consolegame.svg + + + \ No newline at end of file From 1f3e76389c97a23ac432f02e6bbfc314f0882a09 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 16:45:43 +0100 Subject: [PATCH 50/54] Fixed an issue where the scraper didn't log correctly that a folder was scraped. --- es-app/src/scrapers/Scraper.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 84fec4752..0b1e0c6fd 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -41,7 +41,9 @@ std::unique_ptr startScraperSearch(const ScraperSearchParam } else { LOG(LogDebug) << "Scraper::startScraperSearch(): Scraping system \"" - << params.system->getName() << "\", game file \"" + << params.system->getName() + << (params.game->getType() == FOLDER ? "\", folder \"" : + "\", game file \"") << params.game->getFileName() << "\""; scraper_request_funcs.at(name)(params, handle->mRequestQueue, handle->mResults); } From 4970fce1131fbc306c5fcbc545f0e96a408a59d6 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 16:59:14 +0100 Subject: [PATCH 51/54] Changed the description for the Grid view style from 'experimental' to 'deprecated'. --- es-app/src/guis/GuiMenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index ebcfee71a..7ca851bb6 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -129,7 +129,7 @@ void GuiMenu::openUIOptions() gamelist_view_style->add("basic", "basic", selectedViewStyle == "basic"); gamelist_view_style->add("detailed", "detailed", selectedViewStyle == "detailed"); gamelist_view_style->add("video", "video", selectedViewStyle == "video"); - gamelist_view_style->add("grid (experimental)", "grid", selectedViewStyle == "grid"); + gamelist_view_style->add("grid (deprecated)", "grid", selectedViewStyle == "grid"); // If there are no objects returned, then there must be a manually modified entry in the // configuration file. Simply set the view style to Automatic in this case. if (gamelist_view_style->getSelectedObjects().size() == 0) From b957cfcea6c8feaef59b0ca91954a5404647cadb Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 21:33:28 +0100 Subject: [PATCH 52/54] Improvements to some logo alignment issues in the System view carousel. --- es-app/src/views/SystemView.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 152e946ee..95b9d01e8 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -608,6 +608,11 @@ void SystemView::renderCarousel(const glm::mat4& trans) comp->setRotationOrigin(mCarousel.logoRotationOrigin); } comp->setScale(scale); + // Partial workaround for single-pixel alignment issues at some resolutions and with + // some logos. + comp->setSize(comp->getSize().x, std::ceil(comp->getSize().y)); + comp->setPosition(comp->getPosition().x, std::round(comp->getPosition().y)); + comp->setOpacity(static_cast(opacity)); comp->render(logoTrans); } From 99604d3a34d328af4cc00bb415c5a9d2a8f9bdd6 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 21:59:24 +0100 Subject: [PATCH 53/54] Added the System view loading to the ViewController preload to avoid texture pop-ins. --- es-app/src/views/ViewController.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 366c30a81..2a06e0764 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -962,6 +962,9 @@ void ViewController::preload() } (*it)->getIndex()->resetFilters(); + // This makes sure we avoid texture pop-in when loading theme extras. + getSystemListView(); + if (Settings::getInstance()->getBool("PreloadGamelists")) getGameListView(*it)->preloadGamelist(); else From 51ade956ed145e7516e3ee71222c161940a65f9b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Nov 2021 23:21:12 +0100 Subject: [PATCH 54/54] Fixed an issue where reloading the System view could lead to an invalid camera position. --- es-app/src/views/ViewController.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 2a06e0764..95acee4df 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -1033,6 +1033,8 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) void ViewController::reloadAll() { + cancelViewTransitions(); + // Clear all GameListViews. std::map cursorMap; for (auto it = mGameListViews.cbegin(); it != mGameListViews.cend(); it++)