2007-10-03 01:31:06 UTC
previous
next
#include <list>
#include <cassert>
#include <iostream>
#include "gui.h"
namespace GUI
{
std::list<MainMenu::MenuItem> MainMenu::_menu;
MainMenu::MainMenu()
{
sort_menu();
}
void MainMenu::MenuItem::add_subitem(MenuItem item)
{
assert(!_target);
_submenu.push_back(item);
}
void MainMenu::add_item(MenuItem item)
{
_menu.push_back(item);
}
void MainMenu::sort_menu()
{
// TODO: Sort menu items using preferences from database, with sensible defaults
}
void MainMenu::on_redraw_event(
Cairo::RefPtr<Cairo::Context> cr,
double width, double height)
{
// Paint black background
cr->set_source_rgb(0.0, 0.0, 0.0);
cr->paint();
cr->set_source_rgb(192.0/255.0, 192.0/255.0, 192.0/255.0);
cr->select_font_face("Bitstream Vera Sans",
Cairo::FONT_SLANT_NORMAL, Cairo::FONT_WEIGHT_NORMAL);
cr->set_font_size(height/18.0);
int i = 0;
for (std::list<MenuItem>::iterator it = _menu.begin(); it != _menu.end(); it++, i++)
{
cr->move_to(width/5.0, height/2.0 - (_menu.size()*(height/18.0)*2.0 - height/18.0)/2.0 + i*(height/18.0)*2.0);
cr->show_text(it->_label);
}
Cairo::RefPtr<Cairo::LinearGradient> pattern =
Cairo::LinearGradient::create(width/3.0, height/3.0, width*(2.0/3.0), height*(2.0/3.0));
pattern->add_color_stop_rgba(0.0, 0.0, 0.0, 192.0/255.0, 0.0);
pattern->add_color_stop_rgba(0.5, 0.0, 0.0, 192.0/255.0, 1.0);
pattern->add_color_stop_rgba(1.0, 0.0, 0.0, 192.0/255.0, 0.0);
cr->set_source(pattern);
cr->paint();
}
}