diff -r 901072d419b3 src/dillo.cc --- a/src/dillo.cc Wed Jan 02 23:41:10 2013 +0000 +++ b/src/dillo.cc Thu Jan 03 06:25:22 2013 +0000 @@ -219,6 +219,30 @@ fl_measure(o->value, W, H, interpret_symbols); } +static void colorMenuLabelDraw(const Fl_Label* o, int X, int Y, int W, int H, + Fl_Align align) +{ + const int interpret_symbols = 1; + + fl_draw_shortcut = 0; + fl_font(o->font, o->size); + fl_color((Fl_Color)o->color); + fl_rectf(X+1, Y+1, 3*H/2 - 2, H-2); + fl_color(FL_FOREGROUND_COLOR); + fl_draw(o->value, X+3*H/2 + 2, Y, W-3*H/2-2, H, align, o->image, + interpret_symbols); +} + +static void colorMenuLabelMeasure(const Fl_Label* o, int& W, int& H) +{ + const int interpret_symbols = 1; + + fl_draw_shortcut = 0; + fl_font(o->font, o->size); + fl_measure(o->value, W, H, interpret_symbols); + W += 3*H/2 + 2; +} + /* * Tell the user if default/pref fonts can't be found. */ @@ -434,6 +458,8 @@ // Use to permit '&' interpretation. Fl::set_labeltype(FL_FREE_LABELTYPE,custMenuLabelDraw,custMenuLabelMeasure); + Fl::set_labeltype((Fl_Labeltype)(FL_FREE_LABELTYPE+1),colorMenuLabelDraw, + colorMenuLabelMeasure); checkPreferredFonts(); /* use preferred font for UI */ diff -r 901072d419b3 src/menu.cc --- a/src/menu.cc Wed Jan 02 23:41:10 2013 +0000 +++ b/src/menu.cc Thu Jan 03 06:25:22 2013 +0000 @@ -13,6 +13,7 @@ #include #include +#include #include "lout/misc.hh" /* SimpleVector */ #include "msg.h" @@ -659,6 +660,57 @@ ui->change_panel(VOIDP2INT(user_data), ui->get_smallicons()); } +static Fl_Color get_label_color(int32_t pref_color) +{ + if (!(pref_color & 0xffffff00)) + return (Fl_Color)pref_color; + + int r = (pref_color >> 24) & 0xff, g = (pref_color >> 16) & 0xff, + b = (pref_color >> 8) & 0xff; + + return fl_color_cube(r * (FL_NUM_RED - 1) / 255, + g * (FL_NUM_GREEN - 1) / 255, + b * (FL_NUM_BLUE - 1) / 255); +} + +static void Menu_base_color_change_cb(Fl_Widget*, void *user_data) +{ + Fl_Color colornum = (Fl_Color)user_data; + int old_rgb = Fl::get_color(colornum); + uchar r = old_rgb >> 24, + g = (old_rgb >> 16) & 0xff, + b = (old_rgb >> 8) & 0xff; + + if (fl_color_chooser("Dillo: select color", r, g, b)) { + if (colornum == FL_BACKGROUND_COLOR) { + // have to update "gray ramp" + Fl::background(r, g, b); + } else { + Fl::set_color(colornum, r, g, b); + } + ((UI*)popup_bw->ui)->window()->redraw(); + } +} + +static void Menu_color_change_cb(Fl_Widget *w, void *user_data) +{ + int32_t *prefp = (int32_t *)user_data; + uint rgb; + + if (*prefp & 0xffffff00) + rgb = *prefp; + else + rgb = Fl::get_color(*prefp); + rgb >>= 8; + + uchar r = rgb >> 16, g = (rgb >> 8) & 0xff, b = rgb & 0xff; + + if (fl_color_chooser("Dillo: select color", r, g, b)) { + *prefp = (r << 24) | (g << 16) | (b << 8); + ((UI*)popup_bw->ui)->window()->redraw(); + } +} + /* * Toggle loading of images -- and load them if enabling. */ @@ -700,6 +752,27 @@ {"small icons", 0,Menu_panel_change_cb,(void*)10, FL_MENU_TOGGLE,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, + {"UI colors", 0, Menu_nop_cb, (void*)0, FL_SUBMENU,0,0,0,0}, + {"foreground", 0, Menu_base_color_change_cb, + (void*)FL_FOREGROUND_COLOR,0,FL_FREE_LABELTYPE+1,0,0, + FL_FOREGROUND_COLOR}, + {"main bg", 0, Menu_base_color_change_cb, (void*)FL_BACKGROUND_COLOR, + 0,FL_FREE_LABELTYPE+1,0,0,FL_BACKGROUND_COLOR}, + {"text bg", 0, Menu_base_color_change_cb, (void*)FL_BACKGROUND2_COLOR, + 0,FL_FREE_LABELTYPE+1,0,0,FL_BACKGROUND2_COLOR}, + {"selection", 0, Menu_base_color_change_cb, (void*)FL_SELECTION_COLOR, + 0,FL_FREE_LABELTYPE+1,0,0,FL_SELECTION_COLOR}, + {"button highlight", 0, Menu_color_change_cb, + &prefs.ui_button_highlight_color,0,FL_FREE_LABELTYPE+1,0,0,0}, + {"tab active bg", 0, Menu_color_change_cb, + &prefs.ui_tab_active_bg_color,0,FL_FREE_LABELTYPE+1,0,0,0}, + {"tab active fg", 0, Menu_color_change_cb, + &prefs.ui_tab_active_fg_color,0,FL_FREE_LABELTYPE+1,0,0,0}, + {"tab bg", 0, Menu_color_change_cb, &prefs.ui_tab_bg_color,0, + FL_FREE_LABELTYPE+1,0,0,0}, + {"tab fg", 0, Menu_color_change_cb, &prefs.ui_tab_fg_color,0, + FL_FREE_LABELTYPE+1,0,0,0}, + {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0} }; @@ -716,6 +789,11 @@ pm[4+cur_panelsize].setonly(); cur_smallicons ? pm[7].set() : pm[7].clear(); + pm[14].labelcolor(get_label_color(prefs.ui_button_highlight_color)); + pm[15].labelcolor(get_label_color(prefs.ui_tab_active_bg_color)); + pm[16].labelcolor(get_label_color(prefs.ui_tab_active_fg_color)); + pm[17].labelcolor(get_label_color(prefs.ui_tab_bg_color)); + pm[18].labelcolor(get_label_color(prefs.ui_tab_fg_color)); item = pm->popup(x, y); if (item) { ((Fl_Widget *)item)->do_callback(); diff -r 901072d419b3 src/tipwin.cc --- a/src/tipwin.cc Wed Jan 02 23:41:10 2013 +0000 +++ b/src/tipwin.cc Thu Jan 03 06:25:22 2013 +0000 @@ -181,7 +181,7 @@ { if (active()) { if (e == FL_ENTER) { - color(light_color); + color(prefs.ui_button_highlight_color); redraw(); } else if (e == FL_LEAVE || e == FL_RELEASE || e == FL_HIDE) { color(norm_color); diff -r 901072d419b3 src/uicmd.cc --- a/src/uicmd.cc Wed Jan 02 23:41:10 2013 +0000 +++ b/src/uicmd.cc Thu Jan 03 06:25:22 2013 +0000 @@ -109,7 +109,6 @@ Fl_Pack *Pack; Fl_Group *Control; CustButton *CloseBtn; - int tabcolor_inactive, tabcolor_active; void update_pack_offset(void); void resize(int x, int y, int w, int h) @@ -137,8 +136,6 @@ Pack = NULL; focus_counter = 0; tab_w = 50, tab_h = th, ctab_h = 1, btn_w = 20, ctl_w = 1*btn_w+2; - tabcolor_active = prefs.ui_tab_active_bg_color; - tabcolor_inactive = prefs.ui_tab_bg_color; resize(0,0,ww,ctab_h); /* tab buttons go inside a pack within a scroll */ Scroll = new Fl_Scroll(0,0,ww-ctl_w,ctab_h); @@ -282,7 +279,7 @@ btn->copy_label(DEFAULT_TAB_LABEL); btn->clear_visible_focus(); btn->box(FL_GTK_THIN_UP_BOX); - btn->color(focus ? tabcolor_active : tabcolor_inactive); + btn->color(focus ? prefs.ui_tab_active_bg_color : prefs.ui_tab_bg_color); btn->labelcolor(focus ? prefs.ui_tab_active_fg_color : prefs.ui_tab_fg_color); btn->ui(new_ui); @@ -412,7 +409,7 @@ // Set old tab label to normal color if ((idx = get_btn_idx(old_ui)) != -1) { btn = (CustTabButton*)Pack->child(idx); - btn->color(tabcolor_inactive); + btn->color(prefs.ui_tab_bg_color); btn->labelcolor(prefs.ui_tab_fg_color); btn->redraw(); } @@ -427,7 +424,7 @@ */ cbtn->ui()->show(); Wizard->value(cbtn->ui()); - cbtn->color(tabcolor_active); + cbtn->color(prefs.ui_tab_active_bg_color); cbtn->labelcolor(prefs.ui_tab_active_fg_color); cbtn->redraw(); update_pack_offset();