diff --git a/source/code/MenuSystem.cpp b/source/code/MenuSystem.cpp index 191df06..0018569 100644 --- a/source/code/MenuSystem.cpp +++ b/source/code/MenuSystem.cpp @@ -137,23 +137,36 @@ void ButtonWithAdjustment::drawToScreen(SDL_Renderer* target) const { // Draw left adjustment button (down arrow) int adjustSize = getAdjustButtonSize(); int leftX = x - adjustSize - 10; - int leftY = y + (standardButton.ysize - adjustSize) / 2; // Vertically center the small button - globalData.spriteHolder->GetSprite("menu_unmarked").DrawScaled(globalData.screen, SDL_GetTicks(), leftX, leftY, adjustSize, adjustSize, &globalData.logicalResize); - standardButton.getLabel("\u25c0", false)->Draw(globalData.screen, leftX+adjustSize/2, leftY+adjustSize/2, + int leftY = y; + Uint32 currentTime = SDL_GetTicks(); + bool leftMarked = (currentTime - leftButtonMarkTime) < MARK_DURATION; + if (leftMarked) { + globalData.spriteHolder->GetSprite("menu_marked").DrawScaled(globalData.screen, SDL_GetTicks(), leftX, leftY, adjustSize, adjustSize, &globalData.logicalResize); + } + else { + globalData.spriteHolder->GetSprite("menu_unmarked").DrawScaled(globalData.screen, SDL_GetTicks(), leftX, leftY, adjustSize, adjustSize, &globalData.logicalResize); + } + standardButton.getLabel("\u25c0", leftMarked)->Draw(globalData.screen, leftX+adjustSize/2, leftY+adjustSize/2, sago::SagoTextField::Alignment::center, sago::SagoTextField::VerticalAlignment::center, &globalData.logicalResize); // Draw right adjustment button (up arrow) int rightX = x + standardButton.xsize + 10; - int rightY = y + (standardButton.ysize - adjustSize) / 2; // Vertically center the small button - globalData.spriteHolder->GetSprite("menu_unmarked").DrawScaled(globalData.screen, SDL_GetTicks(), rightX, rightY, adjustSize, adjustSize, &globalData.logicalResize); - standardButton.getLabel("\u25b6", false)->Draw(globalData.screen, rightX+adjustSize/2, rightY+adjustSize/2, + int rightY = y; + bool rightMarked = (currentTime - rightButtonMarkTime) < MARK_DURATION; + if (rightMarked) { + globalData.spriteHolder->GetSprite("menu_marked").DrawScaled(globalData.screen, SDL_GetTicks(), rightX, rightY, adjustSize, adjustSize, &globalData.logicalResize); + } + else { + globalData.spriteHolder->GetSprite("menu_unmarked").DrawScaled(globalData.screen, SDL_GetTicks(), rightX, rightY, adjustSize, adjustSize, &globalData.logicalResize); + } + standardButton.getLabel("\u25b6", rightMarked)->Draw(globalData.screen, rightX+adjustSize/2, rightY+adjustSize/2, sago::SagoTextField::Alignment::center, sago::SagoTextField::VerticalAlignment::center, &globalData.logicalResize); } bool ButtonWithAdjustment::isClickedAdjustLeft(int mx, int my) const { int adjustSize = getAdjustButtonSize(); int leftX = x - adjustSize - 10; - int leftY = y + (standardButton.ysize - adjustSize) / 2; + int leftY = y; if (mx >= leftX && my >= leftY && mx <= leftX + adjustSize && my <= leftY + adjustSize) { return true; } @@ -163,7 +176,7 @@ bool ButtonWithAdjustment::isClickedAdjustLeft(int mx, int my) const { bool ButtonWithAdjustment::isClickedAdjustRight(int mx, int my) const { int adjustSize = getAdjustButtonSize(); int rightX = x + standardButton.xsize + 10; - int rightY = y + (standardButton.ysize - adjustSize) / 2; + int rightY = y; if (mx >= rightX && my >= rightY && mx <= rightX + adjustSize && my <= rightY + adjustSize) { return true; } diff --git a/source/code/MenuSystem.h b/source/code/MenuSystem.h index 5defe0c..4dfd78e 100644 --- a/source/code/MenuSystem.h +++ b/source/code/MenuSystem.h @@ -112,7 +112,11 @@ public: return adjustSize + 10 + standardButton.xsize + 10 + adjustSize; }; - int getAdjustButtonSize() const { return standardButton.ysize / 2; }; + int getAdjustButtonSize() const { return standardButton.ysize; }; + + mutable Uint32 leftButtonMarkTime = 0; + mutable Uint32 rightButtonMarkTime = 0; + static const Uint32 MARK_DURATION = 200; // milliseconds }; diff --git a/source/code/menudef.cpp b/source/code/menudef.cpp index 58eb7bf..a412362 100644 --- a/source/code/menudef.cpp +++ b/source/code/menudef.cpp @@ -249,6 +249,7 @@ void Button_soundVolume::doLeft() { newValue = 0; } Config::getInstance()->setInt("volume_sound", newValue); + leftButtonMarkTime = SDL_GetTicks(); } void Button_soundVolume::doRight() { @@ -258,6 +259,7 @@ void Button_soundVolume::doRight() { newValue = MIX_MAX_VOLUME; } Config::getInstance()->setInt("volume_sound", newValue); + rightButtonMarkTime = SDL_GetTicks(); } const std::string& Button_soundVolume::getLabel() const { @@ -297,6 +299,7 @@ void Button_musicVolume::doLeft() { newValue = 0; } Config::getInstance()->setInt("volume_music", newValue); + leftButtonMarkTime = SDL_GetTicks(); } void Button_musicVolume::doRight() { @@ -306,6 +309,7 @@ void Button_musicVolume::doRight() { newValue = MIX_MAX_VOLUME; } Config::getInstance()->setInt("volume_music", newValue); + rightButtonMarkTime = SDL_GetTicks(); } const std::string& Button_musicVolume::getLabel() const {