sdl2dll
Loading...
Searching...
No Matches
sdl_menu.h
1/*
2 * Clases para manejar un menu en SDL2
3 */
4#ifndef _SDL_MENU
5#define _SDL_MENU
6
7#define EXPORT __declspec(dllexport)
8
9#include <SDL.h>
10#include <string>
11#include <vector>
12#include "sdl_game.h"
13#include "sdl_rect.h"
14#include "sdl_font.h"
15
16namespace sdl {
17
23protected:
27 char key;
28 std::string line;
29 std::string cad;
30 bool selected;
39 void Move(Point& p);
40
41public:
50 EXPORT MenuOption(Font& f, const std::string c, char k, int size) : font(f), textsize(size), key(k), cad(c), selected(false) {}
56 EXPORT char Key() { return key; }
62 EXPORT void SetSelected(bool s=true) { selected = s; }
69 EXPORT bool TestPoint(Point &p) { return SDL_PointInRect(p.Get(), area.Get()); }
77 EXPORT void Render(Renderer& renderer, Point& pos, Color fg);
78};
79
84class Menu : public Game{
85protected:
88 std::string title;
91 std::vector<MenuOption> options;
94 char retval;
96public:
104 EXPORT Menu(Window& win, Renderer& ren, const std::string& f) : Game(win, ren),
105 font(ren, f), title(""), titleColor("#ffff00ff"), optionColor("#ffff00ff"), retval(0) {}
112 EXPORT void SetTitlePos(int x, int y) { titlePos = Point(x, y); }
118 EXPORT void SetTitlePos(sdl::Point p) { titlePos = Point(p); }
125 EXPORT void SetMenuPos(int x, int y) { menuPos = Point(x, y); }
131 EXPORT void SetMenuPos(sdl::Point p) { menuPos = Point(p); }
137 EXPORT void SetTitle(const std::string& t) { title = t; }
143 EXPORT void SetTitleColor(const Color& bk) { titleColor = bk; }
149 EXPORT void SetOptionColor(const Color& fg) { optionColor = fg; }
157 EXPORT void AddOption(const std::string& opt, char key, int size=17);
163 EXPORT void SetSel(char k);
169 EXPORT void Clear(Color color=Color("#000000ff"));
175 EXPORT Font& GetFont() { return font; }
181 EXPORT void SetTextSize(int pt);
185 EXPORT void Init() { Clear(); }
191 EXPORT void Update() {}
195 EXPORT void Events() {
196 SDL_Keysym key;
197
198 while(event.Poll()) {
199 if(event.Type() == SDL_KEYUP) {
200 key = event.Key().keysym;
201 for(size_t i=0; !retval && i<options.size(); i++) {
202 if(key.sym == options[i].Key()) retval = key.sym;
203 }
204 if(key.sym == SDLK_ESCAPE) { retval= -1; }
205 }
206 else if(event.Type() == SDL_MOUSEBUTTONDOWN) {
207 sdl::Point point(event.Button().x, event.Button().y);
208 retval = -1;
209 for(size_t i=0; i<options.size(); i++)
210 if(options[i].TestPoint(point)) retval=options[i].Key();
211 }
212 }
213 }
217 EXPORT void Render() {
218 font.SetOutline(1);
219 font.SetSize(55);
221
222 font.SetOutline(0);
224 for(size_t i=0; i<options.size(); i++) {
225 options[i].Render(renderer, menuPos, optionColor);
226 menuPos.Y()+=textsize+10;
227 }
228 SDL_RenderPresent(renderer);
229 }
230 EXPORT char Run() {
231 Init();
232 Render();
233 do {
234 Events();
235 } while(!retval);
236 return retval;
237 }
238};
239
240} // namespace sdl
241#endif // _SDL_MENU
242
Encapsula un color.
Definition sdl_color.h:18
EXPORT SDL_MouseButtonEvent & Button()
Obtiene una refencia al objeto SDL_MouseButtonEvent asociado al evento.
Definition sdl_event.h:52
EXPORT Uint32 Type()
Obtiene el tipo de evento.
Definition sdl_event.h:38
EXPORT bool Poll()
Recupera un evento de la cola de eventos pendientes.
Definition sdl_event.h:32
Clase para encapsular una fuente de caracteres SDL.
Definition sdl_font.h:24
EXPORT void RenderUTF8_Blended(const std::string &text, int x, int y, Color fg)
Muestra un texto en pantalla.
Definition sdl_font.cpp:13
EXPORT void SetOutline(int outline)
Establece el contorno actual de una fuente.
Definition sdl_font.h:65
EXPORT void SetSize(int ptsize)
Establece el tamaño de la fuente.
Definition sdl_font.h:59
Clase base virtual pura para encapsular un juego.
Definition sdl_game.h:44
Renderer & renderer
Definition sdl_game.h:47
Event event
Definition sdl_game.h:49
Clase para manejar una pantalla de menú
Definition sdl_menu.h:84
EXPORT void AddOption(const std::string &opt, char key, int size=17)
Añade una opción de menú
Definition sdl_menu.cpp:22
EXPORT Font & GetFont()
Obtiene una referencia a la fuente usada para el texto.
Definition sdl_menu.h:175
EXPORT void SetTitle(const std::string &t)
Asigna el texto del título.
Definition sdl_menu.h:137
EXPORT char Run()
Método virtual que contiene el bucle del juego.
Definition sdl_menu.h:230
std::vector< MenuOption > options
Definition sdl_menu.h:91
Color titleColor
Definition sdl_menu.h:92
Point menuPos
Definition sdl_menu.h:90
EXPORT void Update()
Actualiza el contenido de la ventana.
Definition sdl_menu.h:191
EXPORT void Clear(Color color=Color("#000000ff"))
Borra el contenido de la ventana usando el color indicado.
Definition sdl_menu.cpp:31
char retval
Definition sdl_menu.h:94
EXPORT void SetTitlePos(sdl::Point p)
Establece la posición del título.
Definition sdl_menu.h:118
EXPORT void SetMenuPos(sdl::Point p)
Establece la posición de la primera línea de texto.
Definition sdl_menu.h:131
EXPORT void Init()
Inicializa el objeto Menu.
Definition sdl_menu.h:185
EXPORT void Events()
Procesa los eventos que lleguen a la aplicación mientras se muestran los créditos.
Definition sdl_menu.h:195
EXPORT void SetTitleColor(const Color &bk)
Asigna el color para el texto del título.
Definition sdl_menu.h:143
Color optionColor
Definition sdl_menu.h:93
Point titlePos
Definition sdl_menu.h:89
std::string title
Definition sdl_menu.h:88
EXPORT void SetOptionColor(const Color &fg)
Asigna el color para el texto de las opciones.
Definition sdl_menu.h:149
int textsize
Definition sdl_menu.h:87
EXPORT void SetSel(char k)
Selecciona la opción indicada y deselecciona la opción previamente activa.
Definition sdl_menu.cpp:26
EXPORT void SetTitlePos(int x, int y)
Establece la posición del título.
Definition sdl_menu.h:112
EXPORT void SetMenuPos(int x, int y)
Establece la posición de la primera línea de texto.
Definition sdl_menu.h:125
EXPORT Menu(Window &win, Renderer &ren, const std::string &f)
Constructor.
Definition sdl_menu.h:104
Font font
Definition sdl_menu.h:86
EXPORT void SetTextSize(int pt)
Asigna el tamaño de la fuente a utilizar.
Definition sdl_menu.cpp:17
EXPORT void Render()
Muestra el contenido de la ventana de créditos.
Definition sdl_menu.h:217
Clase para manejar una línea de menú
Definition sdl_menu.h:22
void Move(Point &p)
Cambia la posición de la línea de texto.
Definition sdl_menu.cpp:4
Font & font
Definition sdl_menu.h:25
int textsize
Definition sdl_menu.h:26
EXPORT void SetSelected(bool s=true)
Establece el estado de activación de la opción de menú
Definition sdl_menu.h:62
EXPORT bool TestPoint(Point &p)
Verifica si las coordenadas indicadas están dentro del área que ocupa el texto de la opción.
Definition sdl_menu.h:69
Rect area
Definition sdl_menu.h:24
bool selected
Definition sdl_menu.h:30
std::string cad
Definition sdl_menu.h:29
std::string line
Definition sdl_menu.h:28
EXPORT void Render(Renderer &renderer, Point &pos, Color fg)
Muestra la línea en pantalla.
Definition sdl_menu.cpp:12
char key
Definition sdl_menu.h:27
EXPORT char Key()
Obtiene el carácter que activa la opción de menú
Definition sdl_menu.h:56
EXPORT MenuOption(Font &f, const std::string c, char k, int size)
Constructor.
Definition sdl_menu.h:50
Clase para manipular puntos con coordenadas enteras.
Definition sdl_point.h:20
EXPORT SDL_Point * Get()
Obtiene un puntero a la estructura SDL_Point.
Definition sdl_point.h:45
EXPORT int & Y()
Obtiene una referencia a la coordenada y del punto.
Definition sdl_point.h:63
Clase para manipular rectángulos con coordenadas enteras.
Definition sdl_rect.h:21
EXPORT SDL_Rect * Get()
Obtiene un puntero a la estructura SDL_Rect.
Definition sdl_rect.h:50
Clase para manipular un contexto de renderizado.
Definition sdl_renderer.h:29
Clase que encapsula una ventana SDL2.
Definition sdl_window.h:21
Espacio con nombre para el wrapper de SDL2.
Definition sdl_music.h:14