Los menus permiten añadir lineas de separación entre los elementos

This commit is contained in:
2023-09-29 19:26:04 +02:00
parent 5a03401424
commit 00e25e1b51
4 changed files with 40 additions and 29 deletions

View File

@@ -124,6 +124,7 @@ bool Menu::load(std::string file_path)
item.greyed = false;
item.linkedDown = false;
item.visible = true;
item.line = false;
do
{
@@ -142,7 +143,7 @@ bool Menu::load(std::string file_path)
} while (line != "[/item]");
addItem(item.label, item.hPaddingDown, item.selectable, item.greyed, item.linkedDown, item.visible);
addItem(item);
}
// En caso contrario se parsea el fichero para buscar las variables y los valores
@@ -216,6 +217,11 @@ bool Menu::setItem(item_t *item, std::string var, std::string value)
item->visible = value == "true" ? true : false;
}
else if (var == "line")
{
item->line = value == "true" ? true : false;
}
else if ((var == "") || (var == "[/item]"))
{
}
@@ -653,8 +659,19 @@ void Menu::render()
// Renderiza el texto
for (int i = 0; i < (int)item.size(); ++i)
{
h_line_t line;
line.x1 = selector.rect.x + (selector.rect.w / 6);
line.x2 = line.x1 + ((selector.rect.w / 6) * 4);
if (item[i].visible)
{
// Comprueba si ha de dibujar una linea en el elemento del menu
if (item[i].line)
{
line.y = item[i].rect.y + item[i].rect.h + (item[i].hPaddingDown / 2) - 1;
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 64);
SDL_RenderDrawLine(renderer, line.x1, line.y, line.x2, line.y);
}
if (i == selector.index)
{
const color_t color = {selector.itemColor.r, selector.itemColor.g, selector.itemColor.b};
@@ -832,9 +849,9 @@ void Menu::centerMenuElementsOnX()
}
// Añade un item al menu
void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool greyed, bool linkedDown, bool visible)
void Menu::addItem(item_t temp)
{
item_t temp;
// item_t temp;
if (item.empty())
{ // Si es el primer item coge la posición en el eje Y del propio menu
@@ -846,15 +863,10 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre
}
temp.rect.x = x;
temp.hPaddingDown = hPaddingDown;
temp.selectable = selectable;
temp.greyed = greyed;
temp.linkedDown = linkedDown;
temp.visible = visible;
item.push_back(temp);
setItemCaption(item.size() - 1, text);
setItemCaption(item.size() - 1, temp.label);
if (item.size() > 1)
{
@@ -868,12 +880,6 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre
reorganize();
}
// Elimina un item del menu
void Menu::removeItem(int index)
{
/* POR HACER */
}
// Cambia el texto de un item
void Menu::setItemCaption(int index, std::string text)
{