Archive / / / gui.cpp
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(); } }