mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2025-02-17 04:46:20 +01:00
Some drawing stuff (unfinished)
This commit is contained in:
parent
b5078d84e0
commit
73ad55c774
81
menu.cpp
81
menu.cpp
@ -150,7 +150,7 @@ static void menu_draw(SDL_Surface *screen, menu_t *p_menu, int sel)
|
|||||||
default:
|
default:
|
||||||
menu_print_font(screen, 0x40,0x40,0x40,
|
menu_print_font(screen, 0x40,0x40,0x40,
|
||||||
x_start, y_start + y, msg);
|
x_start, y_start + y, msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else /* Otherwise white */
|
else /* Otherwise white */
|
||||||
@ -202,9 +202,69 @@ static void menu_draw(SDL_Surface *screen, menu_t *p_menu, int sel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Menu::draw(SDL_Surface *where, int x, int y)
|
void Menu::draw(SDL_Surface *where, int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
|
int font_height = TTF_FontHeight(this->p_font);
|
||||||
|
int line_height = (font_height + font_height / 4);
|
||||||
|
int x_start = x;
|
||||||
|
int y_start = y + line_height;
|
||||||
|
SDL_Rect r;
|
||||||
|
int entries_visible = h / line_height - 2;
|
||||||
|
|
||||||
|
if (this->cur_sel - this->start_entry_visible > entries_visible)
|
||||||
|
{
|
||||||
|
while (this->cur_sel - this->start_entry_visible > entries_visible)
|
||||||
|
{
|
||||||
|
this->start_entry_visible++;
|
||||||
|
if (this->start_entry_visible > this->n_entries)
|
||||||
|
{
|
||||||
|
this->start_entry_visible = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( this->cur_sel < this->start_entry_visible )
|
||||||
|
this->start_entry_visible = this->cur_sel;
|
||||||
|
|
||||||
|
for (i = this->start_entry_visible;
|
||||||
|
i <= this->start_entry_visible + entries_visible; i++)
|
||||||
|
{
|
||||||
|
const char *msg = this->pp_msgs[i];
|
||||||
|
|
||||||
|
if (i >= this->n_entries)
|
||||||
|
break;
|
||||||
|
|
||||||
|
y = (i - this->start_entry_visible) * line_height;
|
||||||
|
|
||||||
|
if (sel < 0)
|
||||||
|
this->printText(msg, this->text_color,
|
||||||
|
x_start, y_start + y, w);
|
||||||
|
else if (p_menu->cur_sel == i) /* Selected - color */
|
||||||
|
menu_print_font(screen, 0,255,0,
|
||||||
|
x_start, y_start + y, msg);
|
||||||
|
else if (IS_SUBMENU(msg))
|
||||||
|
{
|
||||||
|
if (p_menu->cur_sel == i-1)
|
||||||
|
menu_print_font(screen, 0x80,0xff,0x80,
|
||||||
|
x_start, y_start + y, msg);
|
||||||
|
else
|
||||||
|
menu_print_font(screen, 0x40,0x40,0x40,
|
||||||
|
x_start, y_start + y, msg);
|
||||||
|
}
|
||||||
|
else /* Otherwise white */
|
||||||
|
menu_print_font(screen, 0x40,0x40,0x40,
|
||||||
|
x_start, y_start + y, msg);
|
||||||
|
if (IS_SUBMENU(msg))
|
||||||
|
{
|
||||||
|
submenu_t *p_submenu = this->findSubmenu(i);
|
||||||
|
int n_pipe = 0;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
for (n = 0; msg[n] != '\0'; n++)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -425,12 +485,11 @@ void Menu::setText(const char *messages)
|
|||||||
this->selectOne(0);
|
this->selectOne(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu::Menu(TTF_Font *font, SDL_Color clr, int w, int h)
|
Menu::Menu(TTF_Font *font)
|
||||||
{
|
{
|
||||||
this->text_color = clr;
|
this->setSelectedColor((SDL_Color){0x0,0xff,0xff,0});
|
||||||
|
this->setTextColor((SDL_Color){0xff,0xff,0xff,0});
|
||||||
this->font = font;
|
this->font = font;
|
||||||
this->w = w;
|
|
||||||
this->h = h;
|
|
||||||
|
|
||||||
this->pp_msgs = NULL;
|
this->pp_msgs = NULL;
|
||||||
this->n_entries = 0;
|
this->n_entries = 0;
|
||||||
@ -445,6 +504,16 @@ Menu::Menu(TTF_Font *font, SDL_Color clr, int w, int h)
|
|||||||
this->ev_head = this->ev_tail = 0;
|
this->ev_head = this->ev_tail = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Menu::setSelectedColor(SDL_Color clr)
|
||||||
|
{
|
||||||
|
this->text_selected_color = clr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Menu::setTextColor(SDL_Color clr)
|
||||||
|
{
|
||||||
|
this->text_selected_color = clr;
|
||||||
|
}
|
||||||
|
|
||||||
Menu::~Menu()
|
Menu::~Menu()
|
||||||
{
|
{
|
||||||
free(this->pp_msgs);
|
free(this->pp_msgs);
|
||||||
|
16
menu.hh
16
menu.hh
@ -42,7 +42,11 @@ typedef int event_t;
|
|||||||
class Menu
|
class Menu
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Menu(TTF_Font *font, SDL_Color clr, int w, int h);
|
Menu(TTF_Font *font);
|
||||||
|
|
||||||
|
void setTextColor(SDL_Color clr);
|
||||||
|
|
||||||
|
void setSelectedColor(SDL_Color clr);
|
||||||
|
|
||||||
void setText(const char **messages);
|
void setText(const char **messages);
|
||||||
|
|
||||||
@ -51,11 +55,13 @@ public:
|
|||||||
void runLogic();
|
void runLogic();
|
||||||
|
|
||||||
void draw(SDL_Surface *where,
|
void draw(SDL_Surface *where,
|
||||||
int x, int y);
|
int x, int y, int w, int h);
|
||||||
|
|
||||||
~Menu();
|
~Menu();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void printText(const char *msg, SDL_Color clr, int x, int y);
|
||||||
|
|
||||||
virtual void selectCallback(int which);
|
virtual void selectCallback(int which);
|
||||||
|
|
||||||
virtual void escapeCallback(int which);
|
virtual void escapeCallback(int which);
|
||||||
@ -78,12 +84,10 @@ protected:
|
|||||||
const char **pp_msgs;
|
const char **pp_msgs;
|
||||||
TTF_Font *font;
|
TTF_Font *font;
|
||||||
SDL_Color text_color;
|
SDL_Color text_color;
|
||||||
|
SDL_Color text_selected_color;
|
||||||
/* Width and height */
|
|
||||||
int w, h;
|
|
||||||
|
|
||||||
/* Relative to this menu */
|
/* Relative to this menu */
|
||||||
int mouse_x, mouse_y;
|
int mouse_x, mouse_y;
|
||||||
|
|
||||||
int n_submenus;
|
int n_submenus;
|
||||||
submenu_t *p_submenus;
|
submenu_t *p_submenus;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user