diff --git a/loader/include/Geode/ui/General.hpp b/loader/include/Geode/ui/General.hpp index 38895e6c3..2d02d0988 100644 --- a/loader/include/Geode/ui/General.hpp +++ b/loader/include/Geode/ui/General.hpp @@ -97,4 +97,24 @@ namespace geode { ); void setContentSize(cocos2d::CCSize const& size) override; }; + + enum class BackButtonStyle { + Green, + Blue, + Pink + }; + + /** + * Add a back button to a layer + * @param to Layer to add back button to + * @param target Target to call selector on + * @param selector Selector to call on button press + * @param style Style of button to use + */ + GEODE_DLL void addBackButton( + cocos2d::CCNode* to, + cocos2d::CCObject* target, + cocos2d::SEL_MenuHandler selector, + BackButtonStyle style = BackButtonStyle::Green + ); } diff --git a/loader/src/ui/nodes/General.cpp b/loader/src/ui/nodes/General.cpp index d5f8897c9..ccf2b3538 100644 --- a/loader/src/ui/nodes/General.cpp +++ b/loader/src/ui/nodes/General.cpp @@ -200,3 +200,27 @@ void ListBorders::setContentSize(CCSize const& size) { m_left->setScaleY((size.height - height) / m_left->getContentHeight()); m_right->setScaleY((size.height - height) / m_right->getContentHeight()); } + +void geode::addBackButton(cocos2d::CCNode* to, cocos2d::CCObject* target, cocos2d::SEL_MenuHandler selector, BackButtonStyle style) { + const char* sprite; + switch (style) { + default: + case BackButtonStyle::Green: sprite = "GJ_arrow_01_001.png"; break; + case BackButtonStyle::Blue: sprite = "GJ_arrow_02_001.png"; break; + case BackButtonStyle::Pink: sprite = "GJ_arrow_03_001.png"; break; + } + + auto backBtn = CCMenuItemSpriteExtra::create( + CCSprite::createWithSpriteFrameName(sprite), + target, + selector + ); + backBtn->setID("back-button"); + backBtn->setZOrder(1); + + auto menu = CCMenu::createWithItem(backBtn); + menu->setID("back-menu"); + menu->setPosition({ 25.0f, CCDirector::get()->getWinSize().height - 25.0f }); + menu->setZOrder(1); + to->addChild(menu); +}