Quitado el fichero menu.h y sus referencias
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
#include "player.h"
|
||||
#include "map.h"
|
||||
#include "text.h"
|
||||
#include "menu.h"
|
||||
#include "const.h"
|
||||
#include "jail_audio.h"
|
||||
#include "utils.h"
|
||||
@@ -24,11 +23,6 @@ private:
|
||||
Text *white;
|
||||
};
|
||||
|
||||
struct _menu // Objetos menu
|
||||
{
|
||||
Menu *title; // Menu de la pantalla de título
|
||||
};
|
||||
|
||||
struct _options // Variables relacionadas con las opciones del juego
|
||||
{
|
||||
Uint32 fullScreenMode; // Guarda el valor elegido para el modo de pantalla completa
|
||||
|
||||
431
source/menu.cpp
431
source/menu.cpp
@@ -1,431 +0,0 @@
|
||||
#include "ifdefs.h"
|
||||
#include "const.h"
|
||||
#include "text.h"
|
||||
#include "menu.h"
|
||||
|
||||
// Constructor
|
||||
Menu::Menu()
|
||||
{
|
||||
init("", 0, 0, 0, nullptr, nullptr, nullptr);
|
||||
}
|
||||
|
||||
Menu::~Menu()
|
||||
{
|
||||
mRenderer = nullptr;
|
||||
mText = nullptr;
|
||||
}
|
||||
|
||||
// Inicializador
|
||||
void Menu::init(std::string name, int x, int y, int backgroundType, LTexture *texture, SDL_Renderer *renderer, Text *text)
|
||||
{
|
||||
// Inicia variables
|
||||
mName = name;
|
||||
mSelector.index = 0;
|
||||
mTotalItems = 0;
|
||||
mItemSelected = MENU_NO_OPTION;
|
||||
mVerticalPadding = 1;
|
||||
mPosX = x;
|
||||
mPosY = y;
|
||||
mRectBG.x = 0;
|
||||
mRectBG.y = 0;
|
||||
mRectBG.w = 0;
|
||||
mRectBG.h = 0;
|
||||
mRectBG.r = 0;
|
||||
mRectBG.g = 0;
|
||||
mRectBG.b = 0;
|
||||
mSelector.rect.x = 0;
|
||||
mSelector.rect.y = 0;
|
||||
mSelector.rect.w = 0;
|
||||
mSelector.rect.h = 0;
|
||||
mSelector.rect.r = 0;
|
||||
mSelector.rect.g = 0;
|
||||
mSelector.rect.b = 0;
|
||||
mSelector.rect.a = 255;
|
||||
mBackgroundType = backgroundType;
|
||||
mText = text;
|
||||
mRenderer = renderer;
|
||||
mIsCentered = false;
|
||||
mAreElementsCentered = false;
|
||||
mCenter = x + ((SCREEN_WIDTH - x) / 2);
|
||||
mWidestItem = 0;
|
||||
|
||||
// Selector
|
||||
mSelector.origin = 0;
|
||||
mSelector.target = 0;
|
||||
mSelector.y = 0;
|
||||
mSelector.numJumps = 4;
|
||||
mSelector.despY = 0;
|
||||
mSelector.moving = false;
|
||||
|
||||
// Elementos del menu
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
mItem[i].label = "";
|
||||
mItem[i].w = 0;
|
||||
mItem[i].h = 0;
|
||||
mItem[i].x = 0;
|
||||
mItem[i].y = 0;
|
||||
mItem[i].hPaddingUp = 0;
|
||||
mItem[i].hPaddingDown = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Obtiene el nombre del menu
|
||||
std::string Menu::getName()
|
||||
{
|
||||
return mName;
|
||||
}
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
Uint8 Menu::getItemSelected()
|
||||
{
|
||||
return mItemSelected;
|
||||
}
|
||||
|
||||
// Actualiza la posicion y el estado del selector
|
||||
void Menu::updateSelector()
|
||||
{
|
||||
if (mSelector.moving)
|
||||
{
|
||||
mSelector.y += mSelector.despY;
|
||||
if (mSelector.despY > 0) // Va hacia abajo
|
||||
{
|
||||
if (mSelector.y > mSelector.target) // Ha llegado al destino
|
||||
{
|
||||
mSelector.origin = mSelector.y = mSelector.target;
|
||||
mSelector.moving = false;
|
||||
}
|
||||
}
|
||||
if (mSelector.despY < 0) // Va hacia abajo
|
||||
{
|
||||
if (mSelector.y < mSelector.target) // Ha llegado al destino
|
||||
{
|
||||
mSelector.origin = mSelector.y = mSelector.target;
|
||||
mSelector.moving = false;
|
||||
}
|
||||
}
|
||||
mSelector.rect.y = int(mSelector.y) - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
mSelector.rect.y = int(mSelector.y) - 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Establece el origen del selector
|
||||
void Menu::setSelectorOrigin(int value)
|
||||
{
|
||||
mSelector.origin = value;
|
||||
}
|
||||
|
||||
// Establece el destino del selector
|
||||
void Menu::setSelectorTarget(int value)
|
||||
{
|
||||
mSelector.target = value;
|
||||
}
|
||||
|
||||
// Coloca el selector en una posición específica
|
||||
void Menu::setSelectorPos(Uint8 index)
|
||||
{
|
||||
if (index < mTotalItems)
|
||||
{
|
||||
mSelector.index = index;
|
||||
mSelector.y = mSelector.origin = mSelector.target = mItem[mSelector.index].y;
|
||||
mSelector.moving = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Obtiene la anchura del elemento más ancho del menu
|
||||
Uint16 Menu::getWidestItem()
|
||||
{
|
||||
Uint16 result = 0;
|
||||
|
||||
// Obtenemos la anchura del item mas ancho
|
||||
for (Uint8 i = 0; i < mTotalItems; i++)
|
||||
{
|
||||
if (mItem[i].w > result)
|
||||
{
|
||||
result = mItem[i].w;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Deja el menu apuntando al primer elemento
|
||||
void Menu::reset()
|
||||
{
|
||||
mItemSelected = MENU_NO_OPTION;
|
||||
mSelector.index = 0;
|
||||
mSelector.origin = mSelector.target = mSelector.y = mItem[0].y;
|
||||
mSelector.moving = false;
|
||||
}
|
||||
|
||||
// Deja el menu sin elemento seleccionado
|
||||
void Menu::deselectItem()
|
||||
{
|
||||
mItemSelected = MENU_NO_OPTION;
|
||||
}
|
||||
|
||||
// Actualiza el menu para recolocarlo correctamente y establecer el tamaño
|
||||
void Menu::reorganize()
|
||||
{
|
||||
setRectSize();
|
||||
if (mIsCentered)
|
||||
centerMenu(mCenter);
|
||||
if (mAreElementsCentered)
|
||||
centerMenuElements();
|
||||
}
|
||||
|
||||
// Deja el menu apuntando al siguiente elemento
|
||||
bool Menu::increaseSelectorIndex()
|
||||
{
|
||||
bool success = false;
|
||||
mSelector.y = mSelector.origin = mItem[mSelector.index].y;
|
||||
|
||||
if (mSelector.index < (mTotalItems - 1))
|
||||
{
|
||||
mSelector.index++;
|
||||
success = true;
|
||||
}
|
||||
|
||||
mSelector.target = mItem[mSelector.index].y;
|
||||
mSelector.despY = (mSelector.target - mSelector.origin) / mSelector.numJumps;
|
||||
mSelector.moving = true;
|
||||
return success;
|
||||
}
|
||||
|
||||
// Deja el menu apuntando al elemento anterior
|
||||
bool Menu::decreaseSelectorIndex()
|
||||
{
|
||||
bool success = false;
|
||||
mSelector.y = mSelector.origin = mItem[mSelector.index].y;
|
||||
|
||||
if (mSelector.index > 0)
|
||||
{
|
||||
mSelector.index--;
|
||||
success = true;
|
||||
}
|
||||
|
||||
mSelector.target = mItem[mSelector.index].y;
|
||||
mSelector.despY = (mSelector.target - mSelector.origin) / mSelector.numJumps;
|
||||
mSelector.moving = true;
|
||||
return success;
|
||||
}
|
||||
|
||||
// Comprueba la entrada (teclado, gamepad) y actua en consecuencia
|
||||
bool Menu::checkInput(Uint8 input)
|
||||
{
|
||||
bool success = false;
|
||||
switch (input)
|
||||
{
|
||||
case INPUT_UP:
|
||||
success = decreaseSelectorIndex();
|
||||
break;
|
||||
case INPUT_DOWN:
|
||||
success = increaseSelectorIndex();
|
||||
break;
|
||||
case INPUT_ACCEPT:
|
||||
mItemSelected = mSelector.index;
|
||||
break;
|
||||
case INPUT_CANCEL:
|
||||
mItemSelected = mDefaultActionWhenCancel;
|
||||
break;
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
// Actualiza la logica del menu
|
||||
void Menu::update()
|
||||
{
|
||||
updateSelector();
|
||||
}
|
||||
|
||||
// Pinta el menu en pantalla
|
||||
void Menu::render()
|
||||
{
|
||||
SDL_Rect rect = {mRectBG.x, mRectBG.y, mRectBG.w, mRectBG.h};
|
||||
|
||||
// Rendereritza el fondo del menu
|
||||
if (mBackgroundType == MENU_BACKGROUND_SOLID)
|
||||
{
|
||||
SDL_SetRenderDrawColor(mRenderer, mRectBG.r, mRectBG.g, mRectBG.b, mRectBG.a);
|
||||
SDL_RenderFillRect(mRenderer, &rect);
|
||||
}
|
||||
|
||||
SDL_Rect rect2 = {mSelector.rect.x, mSelector.rect.y, mSelector.rect.w, mSelector.rect.h};
|
||||
// Renderiza el rectangulo del selector
|
||||
SDL_SetRenderDrawColor(mRenderer, mSelector.rect.r, mSelector.rect.g, mSelector.rect.b, mSelector.rect.a);
|
||||
SDL_RenderFillRect(mRenderer, &rect2);
|
||||
|
||||
// Renderitza el text
|
||||
for (Uint8 i = 0; i < mTotalItems; i++)
|
||||
{
|
||||
if (i == mSelector.index)
|
||||
{
|
||||
mText->writeColored(mItem[i].x, mItem[i].y, mItem[i].label, mSelector.itemR, mSelector.itemG, mSelector.itemB);
|
||||
}
|
||||
else
|
||||
{
|
||||
mText->write(mItem[i].x, mItem[i].y, mItem[i].label, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Establece el rectangulo de fondo del menu y el selector
|
||||
void Menu::setRectSize()
|
||||
{
|
||||
Uint8 i = 0;
|
||||
mRectBG.w = 0;
|
||||
mRectBG.h = 0;
|
||||
mSelector.rect.w = 0;
|
||||
mSelector.rect.h = 0;
|
||||
|
||||
// Obtenemos la anchura del item mas ancho y la altura de la suma de alturas de los items
|
||||
for (i = 0; i < mTotalItems; i++)
|
||||
{
|
||||
if (mItem[i].w > mRectBG.w)
|
||||
{
|
||||
mRectBG.w = mItem[i].w;
|
||||
}
|
||||
mRectBG.h += mItem[i].h + mItem[i].hPaddingDown;
|
||||
}
|
||||
|
||||
// La anchura de la cadena más larga, mas un caracter, mas la anchura del sprite del selector
|
||||
mRectBG.w += (mText->getHeight() * 1); // + mSelectorSprite.getWidth();
|
||||
|
||||
// La altura de la suma de los items mas un caracter y menos un pixel (porque el texto en realidad es de 7 pixeles)
|
||||
mRectBG.h += (mText->getHeight() * 1) - 1;
|
||||
|
||||
// La posición X es la del menú menos la anchura del sprite del selector y menos medio caracter
|
||||
mRectBG.x = mPosX - (mText->getHeight() / 2); // - mSelectorSprite.getWidth();
|
||||
|
||||
// La posición Y es la del menu menos la altura de medio caracter i el padding
|
||||
mRectBG.y = mPosY - (mText->getHeight() / 2) - mVerticalPadding;
|
||||
|
||||
// Establecemos los valores del rectangulo del selector a partir de los valores del rectangulo de fondo
|
||||
mSelector.rect.h = (mText->getHeight() * 1) + 1;
|
||||
mSelector.rect.w = mRectBG.w;
|
||||
mSelector.rect.x = mRectBG.x;
|
||||
}
|
||||
|
||||
// Establece el valor de la variable
|
||||
void Menu::setTotalItems(int num)
|
||||
{
|
||||
mTotalItems = num;
|
||||
}
|
||||
|
||||
// Establece el color del rectangulo de fondo
|
||||
void Menu::setBackgroundColor(int r, int g, int b, int alpha)
|
||||
{
|
||||
mRectBG.r = r;
|
||||
mRectBG.g = g;
|
||||
mRectBG.b = b;
|
||||
mRectBG.a = alpha;
|
||||
}
|
||||
|
||||
// Establece el color del rectangulo del selector
|
||||
void Menu::setSelectorColor(int r, int g, int b, int alpha)
|
||||
{
|
||||
mSelector.rect.r = r;
|
||||
mSelector.rect.g = g;
|
||||
mSelector.rect.b = b;
|
||||
mSelector.rect.a = alpha;
|
||||
}
|
||||
|
||||
// Establece el color del texto del selector
|
||||
void Menu::setSelectorTextColor(int r, int g, int b)
|
||||
{
|
||||
mSelector.itemR = r;
|
||||
mSelector.itemG = g;
|
||||
mSelector.itemB = b;
|
||||
}
|
||||
|
||||
// Centra el menu respecto un punto
|
||||
void Menu::centerMenu(int value)
|
||||
{
|
||||
mIsCentered = true;
|
||||
mCenter = value;
|
||||
|
||||
// Actualiza el rectangulo de fondo para recalcular las dimensiones
|
||||
setRectSize();
|
||||
|
||||
// Obten el acho del menu
|
||||
mWidestItem = getWidestItem();
|
||||
|
||||
// Establece la nueva posición centrada en funcion del elemento más ancho
|
||||
mPosX = (value) - (mWidestItem / 2);
|
||||
|
||||
// Reposiciona los elementos del menu
|
||||
for (Uint8 i = 0; i < 10; i++)
|
||||
{
|
||||
mItem[i].x = mPosX;
|
||||
}
|
||||
|
||||
// Recalcula el rectangulo de fondo
|
||||
setRectSize();
|
||||
|
||||
// Recoloca el selector
|
||||
mSelector.origin = mSelector.target = mSelector.y = mItem[mSelector.index].y;
|
||||
mSelector.moving = false;
|
||||
//moveSelectorSprite(mSelector.index);
|
||||
}
|
||||
|
||||
// Centra los elementos del menu
|
||||
void Menu::centerMenuElements()
|
||||
{
|
||||
mAreElementsCentered = true;
|
||||
|
||||
for (Uint8 i = 0; i < mTotalItems; i++)
|
||||
{
|
||||
//mItem[i].x = (mCenter - ((mText->lenght(mItem[i].label, 0)) / 2));
|
||||
mItem[i].x = (mCenter - (mItem[i].w / 2));
|
||||
}
|
||||
}
|
||||
|
||||
// Añade un item al menu
|
||||
void Menu::addItem(std::string text, const Uint8 hPaddingUp, const Uint8 hPaddingDown)
|
||||
{
|
||||
// Si es el primer item coge la posición y del propio menu
|
||||
if (mTotalItems == 0)
|
||||
{
|
||||
mItem[mTotalItems].label = text;
|
||||
mItem[mTotalItems].w = mText->lenght(mItem[mTotalItems].label, 0);
|
||||
mItem[mTotalItems].h = mText->getHeight() + (mVerticalPadding * 2);
|
||||
mItem[mTotalItems].x = mPosX;
|
||||
mItem[mTotalItems].y = mPosY;
|
||||
mItem[mTotalItems].hPaddingUp = hPaddingUp;
|
||||
mItem[mTotalItems].hPaddingDown = hPaddingDown;
|
||||
}
|
||||
else
|
||||
{
|
||||
// En caso contrario, coge la posición y a partir del elemento anterior
|
||||
if (mTotalItems < 10)
|
||||
{
|
||||
mItem[mTotalItems].label = text;
|
||||
mItem[mTotalItems].w = mText->lenght(mItem[mTotalItems].label, 0);
|
||||
mItem[mTotalItems].h = mText->getHeight() + (mVerticalPadding * 2);
|
||||
mItem[mTotalItems].x = mPosX;
|
||||
mItem[mTotalItems].y = mItem[mTotalItems - 1].y + mItem[mTotalItems - 1].h + mItem[mTotalItems - 1].hPaddingDown;
|
||||
mItem[mTotalItems].hPaddingUp = hPaddingUp;
|
||||
mItem[mTotalItems].hPaddingDown = hPaddingDown;
|
||||
}
|
||||
}
|
||||
setTotalItems(mTotalItems + 1);
|
||||
reorganize();
|
||||
setSelectorPos(0);
|
||||
}
|
||||
|
||||
// Cambia el texto de un item
|
||||
void Menu::setItemCaption(Uint8 index, std::string text)
|
||||
{
|
||||
mItem[index].label = text;
|
||||
mItem[index].w = mText->lenght(mItem[index].label, 0);
|
||||
reorganize();
|
||||
}
|
||||
|
||||
// Establece el indice del itemm que se usará por defecto al cancelar el menu
|
||||
void Menu::setDefaultActionWhenCancel(Uint8 item)
|
||||
{
|
||||
mDefaultActionWhenCancel = item;
|
||||
}
|
||||
161
source/menu.h
161
source/menu.h
@@ -1,161 +0,0 @@
|
||||
#pragma once
|
||||
#include "sprite.h"
|
||||
#include "text.h"
|
||||
|
||||
#ifndef MENU_H
|
||||
#define MENU_H
|
||||
|
||||
// Clase menu
|
||||
class Menu
|
||||
{
|
||||
public:
|
||||
// Constructor
|
||||
Menu();
|
||||
|
||||
// Destructor
|
||||
~Menu();
|
||||
|
||||
// Inicializador
|
||||
void init(std::string name, int x, int y, int backgroundType, LTexture *texture, SDL_Renderer *renderer, Text *text);
|
||||
|
||||
// Obtiene el nombre del menu
|
||||
std::string getName();
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
Uint8 getItemSelected();
|
||||
|
||||
// Deja el menu apuntando al primer elemento
|
||||
void reset();
|
||||
|
||||
// Deja el menu sin elemento seleccionado
|
||||
void deselectItem();
|
||||
|
||||
// Comprueba la entrada (teclado, gamepad) y actua en consecuencia
|
||||
bool checkInput(Uint8 input);
|
||||
|
||||
// Actualiza la logica del menu
|
||||
void update();
|
||||
|
||||
// Pinta el menu en pantalla
|
||||
void render();
|
||||
|
||||
// Establece el color del rectangulo de fondo
|
||||
void setBackgroundColor(int r, int g, int b, int alpha);
|
||||
|
||||
// Establece el color del rectangulo del selector
|
||||
void setSelectorColor(int r, int g, int b, int alpha);
|
||||
|
||||
// Establece el color del texto del selector
|
||||
void setSelectorTextColor(int r, int g, int b);
|
||||
|
||||
// Centra el menu respecto a un punto
|
||||
void centerMenu(int value);
|
||||
|
||||
// Centra los elementos del menu
|
||||
void centerMenuElements();
|
||||
|
||||
// Añade un item al menu
|
||||
void addItem(std::string text, const Uint8 hPaddingUp = 0, const Uint8 hPaddingDown = 0);
|
||||
|
||||
// Cambia el texto de un item
|
||||
void setItemCaption(Uint8 index, std::string text);
|
||||
|
||||
// Establece el indice del item que se usará por defecto al cancelar el menu
|
||||
void setDefaultActionWhenCancel(Uint8 item);
|
||||
|
||||
private:
|
||||
// Establece el valor de la variable
|
||||
void setTotalItems(int num);
|
||||
|
||||
// Establece el rectangulo de fondo del menu
|
||||
void setRectSize();
|
||||
|
||||
// Actualiza el menu para recolocarlo correctamente y establecer el tamaño
|
||||
void reorganize();
|
||||
|
||||
// Deja el menu apuntando al siguiente elemento
|
||||
bool increaseSelectorIndex();
|
||||
|
||||
// Deja el menu apuntando al elemento anterior
|
||||
bool decreaseSelectorIndex();
|
||||
|
||||
// Mueve el grafico del selector al elemento seleccionado
|
||||
//void moveSelectorSprite(int pos);
|
||||
|
||||
// Actualiza la posicion y el estado del selector
|
||||
void updateSelector();
|
||||
|
||||
// Establece el origen del selector
|
||||
void setSelectorOrigin(int value);
|
||||
|
||||
// Establece el destino del selector
|
||||
void setSelectorTarget(int value);
|
||||
|
||||
// Coloca el selector en una posición específica
|
||||
void setSelectorPos(Uint8 index);
|
||||
|
||||
// Obtiene la anchura del elemento más ancho del menu
|
||||
Uint16 getWidestItem();
|
||||
|
||||
bool mAreElementsCentered; // Variable para saber si los elementos del menu van centrados respecto a este
|
||||
bool mIsCentered; // Variable para saber si el menu debe estar centrado respecto a un punto
|
||||
int mCenter; // Centro del menu
|
||||
int mPosX; // En esta posición del eje X se pinta la primera letra del primer elemento
|
||||
int mPosY; // En esta posición del eje Y se pinta la primera letra del primer elemento
|
||||
SDL_Renderer *mRenderer; // Puntero al renderizador de la ventana
|
||||
std::string mName; // Nombre del menu
|
||||
Text *mText; // Objeto de texto para poder escribir los items del menu
|
||||
Uint16 mWidestItem; // Anchura del elemento más ancho
|
||||
Uint8 mBackgroundType; // Tipo de fondo para el menu, visible o no
|
||||
Uint8 mDefaultActionWhenCancel; // Item del menu que se selecciona cuando se cancela el menu
|
||||
Uint8 mItemSelected; // Item del menu que ha sido seleccionado
|
||||
Uint8 mTotalItems; // Numero de items del menu
|
||||
Uint8 mVerticalPadding; // Espacio de separacion entre items
|
||||
|
||||
struct rectangle
|
||||
{
|
||||
Uint8 x; // Posición en el eje X
|
||||
Uint8 y; // Posición en el eje Y
|
||||
Uint8 w; // Anchura
|
||||
Uint8 h; // Altura
|
||||
Uint8 r; // Rojo
|
||||
Uint8 g; // Verde
|
||||
Uint8 b; // Azul
|
||||
Uint8 a; // Transparencia
|
||||
};
|
||||
|
||||
rectangle mRectBG; // Rectangulo de fondo del menu
|
||||
|
||||
// Estructura para cada elemento del menu
|
||||
struct item
|
||||
{
|
||||
std::string label; // Texto del elemento
|
||||
int x; // Posición en el eje X donde se empieza a escribir el texto
|
||||
int y; // Posición en el eje Y donde se empieza a escribir el texto
|
||||
Uint8 w; // Anchura del elemento
|
||||
Uint8 h; // Altura del elemento
|
||||
Uint8 hPaddingUp; // Espacio vacío arriba
|
||||
Uint8 hPaddingDown; // Espacio vacío abajo
|
||||
};
|
||||
|
||||
item mItem[10];
|
||||
|
||||
struct selector
|
||||
{
|
||||
double origin; // Coordenada de origen
|
||||
double target; // Coordenada de destino
|
||||
double y; // Coordenada actual
|
||||
Uint8 numJumps; // Numero de pasos preestablecido para llegar al destino
|
||||
double despY; // Desplazamiento en el eje Y que realiza el selector en cada iteración. (target - origin) / numJumps
|
||||
bool moving; // Indica si el selector está avanzando hacia el destino
|
||||
Uint8 index; // Elemento del menu que tiene el foco
|
||||
rectangle rect; // Rectangulo del selectur
|
||||
Uint8 itemR; // Color para el texto seleccionado. Rojo
|
||||
Uint8 itemG; // Color para el texto seleccionado. Verde
|
||||
Uint8 itemB; // Color para el texto seleccionado. Azul
|
||||
};
|
||||
|
||||
selector mSelector;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user