MEJORA: El elemento de menu que pierde el foco recupera su color de forma gradual

This commit is contained in:
2023-09-27 21:39:39 +02:00
parent bae3ce7028
commit c1c88032de
2 changed files with 17 additions and 0 deletions

View File

@@ -18,6 +18,7 @@ Menu::Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file)
// Inicializa variables
name = "";
selector.index = 0;
selector.previousIndex = 0;
itemSelected = MENU_NO_OPTION;
x = 0;
y = 0;
@@ -430,12 +431,14 @@ void Menu::updateSelector()
selector.itemColorIndex++;
selector.itemColorIndex = std::min(selector.numJumps - 1, selector.itemColorIndex);
selector.itemColor = selector.jumpItemColors[selector.itemColorIndex];
selector.previousItemColor = selector.jumpItemColors[selector.numJumps - 1 - selector.itemColorIndex];
}
else
{
selector.rect.y = int(selector.y);
selector.itemColorIndex = 0;
selector.itemColor = selector.jumpItemColors[selector.numJumps - 1];
selector.previousItemColor = selector.jumpItemColors[0];
}
if (selector.resizing)
@@ -540,6 +543,9 @@ void Menu::reorganize()
// Deja el menu apuntando al siguiente elemento
bool Menu::increaseSelectorIndex()
{
// Guarda el indice actual antes de modificarlo
selector.previousIndex = selector.index;
// Obten las coordenadas del elemento actual
selector.y = selector.originY = item[selector.index].rect.y;
selector.h = selector.originH = getSelectorHeight(selector.index);
@@ -570,6 +576,9 @@ bool Menu::increaseSelectorIndex()
// Deja el menu apuntando al elemento anterior
bool Menu::decreaseSelectorIndex()
{
// Guarda el indice actual antes de modificarlo
selector.previousIndex = selector.index;
// Obten las coordenadas del elemento actual
selector.y = selector.originY = item[selector.index].rect.y;
selector.h = selector.originH = getSelectorHeight(selector.index);
@@ -652,6 +661,12 @@ void Menu::render()
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color);
}
else if (i == selector.previousIndex)
{
const color_t color = {selector.previousItemColor.r, selector.previousItemColor.g, selector.previousItemColor.b};
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color);
}
else if (item[i].selectable)
{
text->write(item[i].rect.x, item[i].rect.y, item[i].label);

View File

@@ -63,6 +63,8 @@ private:
float h; // Altura actual, usado para el cambio de tamaño
int numJumps; // Numero de pasos preestablecido para llegar al destino
int index; // Elemento del menu que tiene el foco
int previousIndex; // Elemento que tenia el foco previamente
color_t previousItemColor; // Color del item nque tenia el foco previamente
SDL_Rect rect; // Rectangulo del selector
color_t color; // Color del selector
color_t itemColor; // Color del item