diff --git a/loader/include/Geode/ui/BasedButtonSprite.hpp b/loader/include/Geode/ui/BasedButtonSprite.hpp index 0c5f2ef1..b317bf73 100644 --- a/loader/include/Geode/ui/BasedButtonSprite.hpp +++ b/loader/include/Geode/ui/BasedButtonSprite.hpp @@ -29,6 +29,7 @@ namespace geode { Blue = 3, Cyan = 4, DarkPurple = 5, // Geode-added color, used in Geode UIs + DarkAqua = 6, // Geode-added color, used in Geode UIs }; GEODE_DLL const char* baseEnumToString(CircleBaseColor); diff --git a/loader/resources/blanks/baseCircle_BigAlt_DarkAqua.png b/loader/resources/blanks/baseCircle_BigAlt_DarkAqua.png new file mode 100644 index 00000000..c9dbe7ab Binary files /dev/null and b/loader/resources/blanks/baseCircle_BigAlt_DarkAqua.png differ diff --git a/loader/resources/blanks/baseCircle_Large_DarkAqua.png b/loader/resources/blanks/baseCircle_Large_DarkAqua.png new file mode 100644 index 00000000..a2e7353a Binary files /dev/null and b/loader/resources/blanks/baseCircle_Large_DarkAqua.png differ diff --git a/loader/resources/blanks/baseCircle_MediumAlt_DarkAqua.png b/loader/resources/blanks/baseCircle_MediumAlt_DarkAqua.png new file mode 100644 index 00000000..2d9abff8 Binary files /dev/null and b/loader/resources/blanks/baseCircle_MediumAlt_DarkAqua.png differ diff --git a/loader/resources/blanks/baseCircle_Medium_DarkAqua.png b/loader/resources/blanks/baseCircle_Medium_DarkAqua.png new file mode 100644 index 00000000..8182874a Binary files /dev/null and b/loader/resources/blanks/baseCircle_Medium_DarkAqua.png differ diff --git a/loader/resources/blanks/baseCircle_SmallAlt_DarkAqua.png b/loader/resources/blanks/baseCircle_SmallAlt_DarkAqua.png new file mode 100644 index 00000000..12fa6e99 Binary files /dev/null and b/loader/resources/blanks/baseCircle_SmallAlt_DarkAqua.png differ diff --git a/loader/resources/blanks/baseCircle_Small_DarkAqua.png b/loader/resources/blanks/baseCircle_Small_DarkAqua.png new file mode 100644 index 00000000..2640d65d Binary files /dev/null and b/loader/resources/blanks/baseCircle_Small_DarkAqua.png differ diff --git a/loader/resources/blanks/baseCircle_Tiny_DarkAqua.png b/loader/resources/blanks/baseCircle_Tiny_DarkAqua.png new file mode 100644 index 00000000..8a8c149a Binary files /dev/null and b/loader/resources/blanks/baseCircle_Tiny_DarkAqua.png differ diff --git a/loader/resources/images/GE_square02.png b/loader/resources/images/GE_square02.png new file mode 100644 index 00000000..f084b2fc Binary files /dev/null and b/loader/resources/images/GE_square02.png differ diff --git a/loader/src/ui/mods/GeodeStyle.cpp b/loader/src/ui/mods/GeodeStyle.cpp index 070a9158..06b003b4 100644 --- a/loader/src/ui/mods/GeodeStyle.cpp +++ b/loader/src/ui/mods/GeodeStyle.cpp @@ -8,6 +8,8 @@ $execute { ColorProvider::get()->define("mod-list-restart-required-label"_spr, ccc3(153, 245, 245)); ColorProvider::get()->define("mod-list-restart-required-label-bg"_spr, ccc3(123, 156, 163)); ColorProvider::get()->define("mod-list-search-bg"_spr, { 83, 65, 109, 255 }); + ColorProvider::get()->define("mod-list-tab-selected-bg"_spr, { 168, 147, 185, 255 }); + ColorProvider::get()->define("mod-list-tab-selected-bg-alt"_spr, { 147, 163, 185, 255 }); } bool GeodeSquareSprite::init(CCSprite* top, bool* state) { @@ -101,7 +103,7 @@ std::pair<ccColor3B, ccColor3B> geodeTagColor(std::string_view const& text) { return TAG_COLORS[hash(text) % 5932 % TAG_COLORS.size()]; } -bool GeodeTabSprite::init(const char* iconFrame, const char* text, float width) { +bool GeodeTabSprite::init(const char* iconFrame, const char* text, float width, bool altColor) { if (!CCNode::init()) return false; @@ -120,7 +122,11 @@ bool GeodeTabSprite::init(const char* iconFrame, const char* text, float width) m_selectedBG = CCScale9Sprite::createWithSpriteFrameName("tab-bg.png"_spr); m_selectedBG->setScale(.8f); m_selectedBG->setContentSize(itemSize / .8f); - m_selectedBG->setColor({ 168, 147, 185 }); + m_selectedBG->setColor(to3B(ColorProvider::get()->color( + altColor ? + "mod-list-tab-selected-bg-alt"_spr : + "mod-list-tab-selected-bg"_spr + ))); this->addChildAtPosition(m_selectedBG, Anchor::Center); m_icon = CCSprite::createWithSpriteFrameName(iconFrame); @@ -135,9 +141,9 @@ bool GeodeTabSprite::init(const char* iconFrame, const char* text, float width) return true; } -GeodeTabSprite* GeodeTabSprite::create(const char* iconFrame, const char* text, float width) { +GeodeTabSprite* GeodeTabSprite::create(const char* iconFrame, const char* text, float width, bool altColor) { auto ret = new GeodeTabSprite(); - if (ret && ret->init(iconFrame, text, width)) { + if (ret && ret->init(iconFrame, text, width, altColor)) { ret->autorelease(); return ret; } diff --git a/loader/src/ui/mods/GeodeStyle.hpp b/loader/src/ui/mods/GeodeStyle.hpp index 3a11c89f..3dc9d1b5 100644 --- a/loader/src/ui/mods/GeodeStyle.hpp +++ b/loader/src/ui/mods/GeodeStyle.hpp @@ -9,15 +9,22 @@ using namespace geode::prelude; template <class... Args> class GeodePopup : public Popup<Args...> { protected: - bool init(float width, float height, Args... args) { - if (!Popup<Args...>::initAnchored(width, height, std::forward<Args>(args)..., "GE_square01.png"_spr)) + bool init(float width, float height, Args... args, bool altBG = false) { + if (!Popup<Args...>::initAnchored(width, height, std::forward<Args>(args)..., (altBG ? "GE_square02.png"_spr : "GE_square01.png"_spr))) return false; - // Replace the close button with a Geode style one + // Store original attributes of the close button auto origSize = Popup<Args...>::m_closeBtn->getContentSize(); auto orig = Ref(Popup<Args...>::m_closeBtn->getNormalImage()); - auto spr = CircleButtonSprite::createWithSpriteFrameName("close.png"_spr, 1.f, CircleBaseColor::DarkPurple); + + // Replace the close button with a Geode style one + auto spr = CircleButtonSprite::createWithSpriteFrameName( + "close.png"_spr, 1.f, + (altBG ? CircleBaseColor::DarkAqua : CircleBaseColor::DarkPurple) + ); Popup<Args...>::m_closeBtn->setNormalImage(spr); + + // Restore size and position spr->setScale(orig->getScale()); spr->setPosition(orig->getPosition()); spr->setAnchorPoint(orig->getAnchorPoint()); @@ -57,10 +64,10 @@ protected: CCSprite* m_icon; CCLabelBMFont* m_label; - bool init(const char* iconFrame, const char* text, float width); + bool init(const char* iconFrame, const char* text, float width, bool altColor); public: - static GeodeTabSprite* create(const char* iconFrame, const char* text, float width); + static GeodeTabSprite* create(const char* iconFrame, const char* text, float width, bool altColor = false); void select(bool selected); void disable(bool disabled); diff --git a/loader/src/ui/mods/popups/ModPopup.cpp b/loader/src/ui/mods/popups/ModPopup.cpp index 73224e94..7e7ee74b 100644 --- a/loader/src/ui/mods/popups/ModPopup.cpp +++ b/loader/src/ui/mods/popups/ModPopup.cpp @@ -400,7 +400,7 @@ bool ModPopup::setup(ModSource&& src) { { "changelog.png"_spr, "Changelog", Tab::Changelog }, { "version.png"_spr, "Versions", Tab::Versions }, }) { - auto spr = GeodeTabSprite::create(std::get<0>(mdTab), std::get<1>(mdTab), 140); + auto spr = GeodeTabSprite::create(std::get<0>(mdTab), std::get<1>(mdTab), 140, m_source.asServer()); auto btn = CCMenuItemSpriteExtra::create(spr, this, menu_selector(ModPopup::onTab)); btn->setTag(static_cast<int>(std::get<2>(mdTab))); tabsMenu->addChild(btn); @@ -685,7 +685,8 @@ void ModPopup::onSupport(CCObject*) { ModPopup* ModPopup::create(ModSource&& src) { auto ret = new ModPopup(); - if (ret && ret->init(440, 280, std::move(src))) { + bool isServer = src.asServer(); + if (ret && ret->init(440, 280, std::move(src), isServer)) { ret->autorelease(); return ret; } diff --git a/loader/src/ui/nodes/BasedButtonSprite.cpp b/loader/src/ui/nodes/BasedButtonSprite.cpp index 53a56cae..dd99fe42 100644 --- a/loader/src/ui/nodes/BasedButtonSprite.cpp +++ b/loader/src/ui/nodes/BasedButtonSprite.cpp @@ -26,6 +26,7 @@ const char* geode::baseEnumToString(CircleBaseColor value) { case CircleBaseColor::Blue: return "Blue"; case CircleBaseColor::Cyan: return "Cyan"; case CircleBaseColor::DarkPurple: return "DarkPurple"; + case CircleBaseColor::DarkAqua: return "DarkAqua"; } return "Unknown"; }