From 2b49e07a85462fcfe27f23402ed9080ba3105a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Fri, 19 Feb 2021 19:22:29 +0100 Subject: [PATCH] update menu.cpp --- source/menu.cpp | 40 ++++---------------- source/menu.h | 98 ++++++++++++++++++------------------------------- 2 files changed, 42 insertions(+), 96 deletions(-) diff --git a/source/menu.cpp b/source/menu.cpp index a7eefc2..909b79e 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -57,15 +57,6 @@ void Menu::init(std::string name, int x, int y, int backgroundType, LTexture *te mSelector.despY = 0; mSelector.moving = false; - // Sprite con los graficos del selector - //mSelectorSprite.setWidth(8); - //mSelectorSprite.setHeight(8); - //mSelectorSprite.setPosX(0); - //mSelectorSprite.setPosY(0); - //mSelectorSprite.setTexture(texture); - //mSelectorSprite.setRenderer(renderer); - //mSelectorSprite.setSpriteClip(0, 0, mSelectorSprite.getWidth(), mSelectorSprite.getHeight()); - // Elementos del menu for (int i = 0; i < 10; i++) { @@ -77,9 +68,6 @@ void Menu::init(std::string name, int x, int y, int backgroundType, LTexture *te mItem[i].hPaddingUp = 0; mItem[i].hPaddingDown = 0; } - - // Mueve el grafico del selector al elemento seleccionado - //moveSelectorSprite(mSelector.index); } // Obtiene el nombre del menu @@ -94,12 +82,6 @@ Uint8 Menu::getItemSelected() return mItemSelected; } -// Mueve el grafico del selector al elemento seleccionado -/*void Menu::moveSelectorSprite(int pos) -{ - mSelector.rect.y = mItem[pos].y - 1; -}*/ - // Actualiza la posicion y el estado del selector void Menu::updateSelector() { @@ -240,11 +222,9 @@ bool Menu::checkInput(Uint8 input) { case INPUT_UP: success = decreaseSelectorIndex(); - //moveSelectorSprite(mSelector.index); break; case INPUT_DOWN: success = increaseSelectorIndex(); - //moveSelectorSprite(mSelector.index); break; case INPUT_ACCEPT: mItemSelected = mSelector.index; @@ -276,9 +256,6 @@ void Menu::render() SDL_SetRenderDrawColor(mRenderer, mSelector.r, mSelector.g, mSelector.b, mSelector.a); SDL_RenderFillRect(mRenderer, &mSelector.rect); - // Renderiza el sprite del selector - //mSelectorSprite.render(); - // Renderitza el text for (Uint8 i = 0; i < mTotalItems; i++) { @@ -313,19 +290,19 @@ void Menu::setRectSize() } // La anchura de la cadena más larga, mas un caracter, mas la anchura del sprite del selector - mRectBG.rect.w += (mText->getSize() * 1); // + mSelectorSprite.getWidth(); + mRectBG.rect.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.rect.h += (mText->getSize() * 1) - 1; + mRectBG.rect.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.rect.x = mPosX - (mText->getSize() / 2); // - mSelectorSprite.getWidth(); + mRectBG.rect.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.rect.y = mPosY - (mText->getSize() / 2) - mVerticalPadding; + mRectBG.rect.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->getSize() * 1) + 1; + mSelector.rect.h = (mText->getHeight() * 1) + 1; mSelector.rect.w = mRectBG.rect.w; mSelector.rect.x = mRectBG.rect.x; } @@ -402,9 +379,6 @@ void Menu::centerMenuElements() //mItem[i].x = (mCenter - ((mText->lenght(mItem[i].label, 0)) / 2)); mItem[i].x = (mCenter - (mItem[i].w / 2)); } - - // Mueve el grafico del selector al elemento seleccionado - //moveSelectorSprite(mSelector.index); } // Añade un item al menu @@ -415,7 +389,7 @@ void Menu::addItem(std::string text, const Uint8 hPaddingUp, const Uint8 hPaddin { mItem[mTotalItems].label = text; mItem[mTotalItems].w = mText->lenght(mItem[mTotalItems].label, 0); - mItem[mTotalItems].h = mText->getSize() + (mVerticalPadding * 2); + mItem[mTotalItems].h = mText->getHeight() + (mVerticalPadding * 2); mItem[mTotalItems].x = mPosX; mItem[mTotalItems].y = mPosY; mItem[mTotalItems].hPaddingUp = hPaddingUp; @@ -428,7 +402,7 @@ void Menu::addItem(std::string text, const Uint8 hPaddingUp, const Uint8 hPaddin { mItem[mTotalItems].label = text; mItem[mTotalItems].w = mText->lenght(mItem[mTotalItems].label, 0); - mItem[mTotalItems].h = mText->getSize() + (mVerticalPadding * 2); + 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; diff --git a/source/menu.h b/source/menu.h index 3201c54..2d4184f 100644 --- a/source/menu.h +++ b/source/menu.h @@ -44,7 +44,7 @@ public: // 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); @@ -97,38 +97,28 @@ private: // Obtiene la anchura del elemento más ancho del menu Uint16 getWidestItem(); - // Posicion X/Y del texto del primer elemento del menu - int mPosX; // En esta posición se pinta la primera letra del primer elemento - int mPosY; - - // Nombre del menu - std::string mName; - - // Numero de items del menu - Uint8 mTotalItems; - - // Item del menu que ha sido seleccionado - Uint8 mItemSelected; - - // Item del menu seleccionado cuando se cancela el menu - Uint8 mDefaultActionWhenCancel; - - // Espacio de separacion entre items - Uint8 mVerticalPadding; - - // Tipo de fondo para el menu - Uint8 mBackgroundType; - - // Sprite con los graficos del selector - //Sprite mSelectorSprite; + 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 { - SDL_Rect rect; - Uint8 r; // Rojo - Uint8 g; // Verde - Uint8 b; // Azul - Uint8 a; // Transparencia + SDL_Rect rect; // Rectangulo + Uint8 r; // Rojo + Uint8 g; // Verde + Uint8 b; // Azul + Uint8 a; // Transparencia }; rectangle mRectBG; // Rectangulo de fondo del menu @@ -136,35 +126,17 @@ private: // Estructura para cada elemento del menu struct item { - std::string label; - int x; - int y; - Uint8 w; - Uint8 h; - Uint8 hPaddingUp; - Uint8 hPaddingDown; + 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]; - // Texto para poder escribir los items del menu - Text *mText; - - // Puntero al renderizador de la ventana - SDL_Renderer *mRenderer; - - // Variable para saber si el menu debe estar centrado respecto a un punto - bool mIsCentered; - - // Centro del menu - int mCenter; - - // Variable para saber si los elementos van centrados - bool mAreElementsCentered; - - // Anchura del elemento más ancho - Uint16 mWidestItem; - struct selector { double origin; // Coordenada de origen @@ -174,14 +146,14 @@ private: double despY; // (target - origin) / numJumps bool moving; // Indica si el selector está avanzando hacia el destino Uint8 index; // Elemento del menu que tiene el foco - SDL_Rect rect; - Uint8 r; // Rojo - Uint8 g; // Verde - Uint8 b; // Azul - Uint8 a; // Transparencia - Uint8 itemR; // Rojo - Uint8 itemG; // Verde - Uint8 itemB; // Azul + SDL_Rect rect; // Rectangulo para dibujar el selector + Uint8 r; // Color para el selector. Rojo + Uint8 g; // Color para el selector. Verde + Uint8 b; // Color para el selector. Azul + Uint8 a; // Color para el selector. Transparencia + 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;