48 lines
1.1 KiB
C++
48 lines
1.1 KiB
C++
/* A clickable button widget
|
|
*
|
|
*/
|
|
|
|
#ifndef _MENUBUTTON_H_
|
|
#define _MENUBUTTON_H_
|
|
|
|
#include <SDL.h>
|
|
#include <SDL_ttf.h>
|
|
#include <string>
|
|
|
|
using std::string;
|
|
|
|
// fixme: there's probably a better way to do this, but SDL's event model
|
|
// has me hard-pressed to figure out what it is.
|
|
enum ButtonAction {BUTTON_BUILD=0x1, BUTTON_ATTACK=0x2, BUTTON_MOVE=0x4,
|
|
BUTTON_BUILD_ATTACKER=0x8, BUTTON_BUILD_DEFENDER=0x10,
|
|
BUTTON_BUILD_PRODUCER=0x20};
|
|
|
|
class MenuButton
|
|
{
|
|
public:
|
|
MenuButton(string text = "", TTF_Font* font = NULL, int x = 0, int y = 0,
|
|
ButtonAction action = BUTTON_BUILD);
|
|
|
|
// Selectable buttons change colour for the duration they are selected,
|
|
// and should ignore clicks while selected
|
|
void set_hover(bool is_hovering);
|
|
void draw(SDL_Surface* display, int colour = 0x000000,
|
|
int background_colour = 0x888888);
|
|
|
|
bool is_at(int test_x, int test_y);
|
|
ButtonAction get_action() const { return action; }
|
|
|
|
private:
|
|
string text;
|
|
int x;
|
|
int y;
|
|
|
|
bool hover;
|
|
|
|
TTF_Font* font;
|
|
|
|
ButtonAction action;
|
|
};
|
|
|
|
#endif
|