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
|
// Inicializa variables
|
||||||
name = "";
|
name = "";
|
||||||
selector.index = 0;
|
selector.index = 0;
|
||||||
|
selector.previousIndex = 0;
|
||||||
itemSelected = MENU_NO_OPTION;
|
itemSelected = MENU_NO_OPTION;
|
||||||
x = 0;
|
x = 0;
|
||||||
y = 0;
|
y = 0;
|
||||||
@@ -430,12 +431,14 @@ void Menu::updateSelector()
|
|||||||
selector.itemColorIndex++;
|
selector.itemColorIndex++;
|
||||||
selector.itemColorIndex = std::min(selector.numJumps - 1, selector.itemColorIndex);
|
selector.itemColorIndex = std::min(selector.numJumps - 1, selector.itemColorIndex);
|
||||||
selector.itemColor = selector.jumpItemColors[selector.itemColorIndex];
|
selector.itemColor = selector.jumpItemColors[selector.itemColorIndex];
|
||||||
|
selector.previousItemColor = selector.jumpItemColors[selector.numJumps - 1 - selector.itemColorIndex];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
selector.rect.y = int(selector.y);
|
selector.rect.y = int(selector.y);
|
||||||
selector.itemColorIndex = 0;
|
selector.itemColorIndex = 0;
|
||||||
selector.itemColor = selector.jumpItemColors[selector.numJumps - 1];
|
selector.itemColor = selector.jumpItemColors[selector.numJumps - 1];
|
||||||
|
selector.previousItemColor = selector.jumpItemColors[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selector.resizing)
|
if (selector.resizing)
|
||||||
@@ -540,6 +543,9 @@ void Menu::reorganize()
|
|||||||
// Deja el menu apuntando al siguiente elemento
|
// Deja el menu apuntando al siguiente elemento
|
||||||
bool Menu::increaseSelectorIndex()
|
bool Menu::increaseSelectorIndex()
|
||||||
{
|
{
|
||||||
|
// Guarda el indice actual antes de modificarlo
|
||||||
|
selector.previousIndex = selector.index;
|
||||||
|
|
||||||
// Obten las coordenadas del elemento actual
|
// Obten las coordenadas del elemento actual
|
||||||
selector.y = selector.originY = item[selector.index].rect.y;
|
selector.y = selector.originY = item[selector.index].rect.y;
|
||||||
selector.h = selector.originH = getSelectorHeight(selector.index);
|
selector.h = selector.originH = getSelectorHeight(selector.index);
|
||||||
@@ -570,6 +576,9 @@ bool Menu::increaseSelectorIndex()
|
|||||||
// Deja el menu apuntando al elemento anterior
|
// Deja el menu apuntando al elemento anterior
|
||||||
bool Menu::decreaseSelectorIndex()
|
bool Menu::decreaseSelectorIndex()
|
||||||
{
|
{
|
||||||
|
// Guarda el indice actual antes de modificarlo
|
||||||
|
selector.previousIndex = selector.index;
|
||||||
|
|
||||||
// Obten las coordenadas del elemento actual
|
// Obten las coordenadas del elemento actual
|
||||||
selector.y = selector.originY = item[selector.index].rect.y;
|
selector.y = selector.originY = item[selector.index].rect.y;
|
||||||
selector.h = selector.originH = getSelectorHeight(selector.index);
|
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);
|
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)
|
else if (item[i].selectable)
|
||||||
{
|
{
|
||||||
text->write(item[i].rect.x, item[i].rect.y, item[i].label);
|
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
|
float h; // Altura actual, usado para el cambio de tamaño
|
||||||
int numJumps; // Numero de pasos preestablecido para llegar al destino
|
int numJumps; // Numero de pasos preestablecido para llegar al destino
|
||||||
int index; // Elemento del menu que tiene el foco
|
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
|
SDL_Rect rect; // Rectangulo del selector
|
||||||
color_t color; // Color del selector
|
color_t color; // Color del selector
|
||||||
color_t itemColor; // Color del item
|
color_t itemColor; // Color del item
|
||||||
|
|||||||
Reference in New Issue
Block a user