MEJORA: El elemento de menu que pierde el foco recupera su color de forma gradual
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user