fixed progress bar
This commit is contained in:
41
src/ui/MenuLayout.cpp
Normal file
41
src/ui/MenuLayout.cpp
Normal file
@ -0,0 +1,41 @@
|
||||
#include "ui/MenuLayout.h"
|
||||
#include "ui/UIConstants.h"
|
||||
#include <cmath>
|
||||
#include <array>
|
||||
|
||||
namespace ui {
|
||||
|
||||
std::array<SDL_FRect, 5> computeMenuButtonRects(const MenuLayoutParams& p) {
|
||||
const float LOGICAL_W = static_cast<float>(p.logicalW);
|
||||
const float LOGICAL_H = static_cast<float>(p.logicalH);
|
||||
bool isSmall = ((LOGICAL_W * p.logicalScale) < MENU_SMALL_THRESHOLD);
|
||||
float btnW = isSmall ? (LOGICAL_W * MENU_BTN_WIDTH_SMALL_FACTOR) : MENU_BTN_WIDTH_LARGE;
|
||||
float btnH = isSmall ? MENU_BTN_HEIGHT_SMALL : MENU_BTN_HEIGHT_LARGE;
|
||||
float contentOffsetX = (p.winW - LOGICAL_W * p.logicalScale) * 0.5f / p.logicalScale;
|
||||
float contentOffsetY = (p.winH - LOGICAL_H * p.logicalScale) * 0.5f / p.logicalScale;
|
||||
float btnCX = LOGICAL_W * 0.5f + contentOffsetX;
|
||||
float btnCY = LOGICAL_H * 0.86f + contentOffsetY + MENU_BTN_Y_OFFSET;
|
||||
float spacing = isSmall ? btnW * MENU_BTN_SPACING_FACTOR_SMALL : btnW * MENU_BTN_SPACING_FACTOR_LARGE;
|
||||
std::array<SDL_FRect, MENU_BTN_COUNT> rects{};
|
||||
for (int i = 0; i < MENU_BTN_COUNT; ++i) {
|
||||
float center = btnCX + (static_cast<float>(i) - MENU_BTN_CENTER) * spacing;
|
||||
rects[i] = SDL_FRect{center - btnW / 2.0f, btnCY - btnH / 2.0f, btnW, btnH};
|
||||
}
|
||||
return rects;
|
||||
}
|
||||
|
||||
int hitTestMenuButtons(const MenuLayoutParams& p, float localX, float localY) {
|
||||
auto rects = computeMenuButtonRects(p);
|
||||
for (int i = 0; i < MENU_BTN_COUNT; ++i) {
|
||||
const auto &r = rects[i];
|
||||
if (localX >= r.x && localX <= r.x + r.w && localY >= r.y && localY <= r.y + r.h)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
SDL_FRect settingsButtonRect(const MenuLayoutParams& p) {
|
||||
return SDL_FRect{SETTINGS_BTN_X, SETTINGS_BTN_Y, SETTINGS_BTN_W, SETTINGS_BTN_H};
|
||||
}
|
||||
|
||||
} // namespace ui
|
||||
Reference in New Issue
Block a user