From 9e0928ca66d561c639afd2c1fde66fba90c43e66 Mon Sep 17 00:00:00 2001 From: David Capello Date: Sun, 22 Nov 2009 00:26:58 +0000 Subject: [PATCH] Fixed combo-box graphics. --- data/skins/sheet.png | Bin 4580 -> 4867 bytes src/jinete/jcombobox.cpp | 18 ++ src/jinete/jtheme.h | 2 + src/jinete/themes/jstandard_theme.cpp | 12 ++ src/modules/skinneable_theme.cpp | 277 +++++++++++++++++++++----- src/modules/skinneable_theme.h | 54 ++++- src/widgets/tabs.cpp | 6 - 7 files changed, 309 insertions(+), 60 deletions(-) diff --git a/data/skins/sheet.png b/data/skins/sheet.png index e31c0317daa1b91658b67cfd6a08f9fbe9c8cb4a..fba7e90563cd0c09ce3e9610721145adbb845d1d 100644 GIT binary patch literal 4867 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 literal 4580 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 pcymT~aE*h6entry, JI_WIDGET, combobox_entry_msg_proc, NULL); + jwidget_add_hook(combobox->button, JI_WIDGET, combobox_button_msg_proc, NULL); jwidget_expansive(combobox->entry, true); jbutton_set_bevel(combobox->button, 0, 2, 0, 2); @@ -415,11 +417,27 @@ static bool combobox_entry_msg_proc(JWidget widget, JMessage msg) else return true; break; + + case JM_DRAW: + widget->theme->draw_combobox_entry(widget, &msg->draw.rect); + return true; } return false; } +static bool combobox_button_msg_proc(JWidget widget, JMessage msg) +{ + switch (msg->type) { + + case JM_DRAW: + widget->theme->draw_combobox_button(widget, &msg->draw.rect); + return true; + + } + return false; +} + static bool combobox_listbox_msg_proc(JWidget widget, JMessage msg) { JWidget combo_widget = reinterpret_cast(widget->user_data[0]); diff --git a/src/jinete/jtheme.h b/src/jinete/jtheme.h index acc66c56a..6997480ba 100644 --- a/src/jinete/jtheme.h +++ b/src/jinete/jtheme.h @@ -79,6 +79,8 @@ public: virtual void draw_radio(JWidget widget, JRect clip) = 0; virtual void draw_separator(JWidget widget, JRect clip) = 0; virtual void draw_slider(JWidget widget, JRect clip) = 0; + virtual void draw_combobox_entry(JWidget widget, JRect clip) = 0; + virtual void draw_combobox_button(JWidget widget, JRect clip) = 0; virtual void draw_textbox(JWidget widget, JRect clip) = 0; virtual void draw_view(JWidget widget, JRect clip) = 0; virtual void draw_view_scrollbar(JWidget widget, JRect clip) = 0; diff --git a/src/jinete/themes/jstandard_theme.cpp b/src/jinete/themes/jstandard_theme.cpp index 10e657a4a..7af327b9a 100644 --- a/src/jinete/themes/jstandard_theme.cpp +++ b/src/jinete/themes/jstandard_theme.cpp @@ -127,6 +127,8 @@ public: void draw_radio(JWidget widget, JRect clip); void draw_separator(JWidget widget, JRect clip); void draw_slider(JWidget widget, JRect clip); + void draw_combobox_entry(JWidget widget, JRect clip); + void draw_combobox_button(JWidget widget, JRect clip); void draw_textbox(JWidget widget, JRect clip); void draw_view(JWidget widget, JRect clip); void draw_view_scrollbar(JWidget widget, JRect clip); @@ -1148,6 +1150,16 @@ void jstandard_theme::draw_slider(JWidget widget, JRect clip) } } +void jstandard_theme::draw_combobox_entry(JWidget widget, JRect clip) +{ + draw_entry(widget, clip); +} + +void jstandard_theme::draw_combobox_button(JWidget widget, JRect clip) +{ + draw_button(widget, clip); +} + void jstandard_theme::draw_textbox(JWidget widget, JRect clip) { _ji_theme_textbox_draw(ji_screen, widget, NULL, NULL, diff --git a/src/modules/skinneable_theme.cpp b/src/modules/skinneable_theme.cpp index 9c01c8fc2..254ec6e36 100644 --- a/src/modules/skinneable_theme.cpp +++ b/src/modules/skinneable_theme.cpp @@ -139,6 +139,24 @@ static struct { 0, 56, 4, 4 }, // PART_SUNKEN_FOCUSED_SW { 0, 52, 4, 4 }, // PART_SUNKEN_FOCUSED_W + { 0, 64, 5, 5 }, // PART_SUNKEN2_NORMAL_NW + { 5, 64, 6, 5 }, // PART_SUNKEN2_NORMAL_N + { 11, 64, 5, 5 }, // PART_SUNKEN2_NORMAL_NE + { 11, 69, 5, 6 }, // PART_SUNKEN2_NORMAL_E + { 11, 75, 5, 5 }, // PART_SUNKEN2_NORMAL_SE + { 5, 75, 6, 5 }, // PART_SUNKEN2_NORMAL_S + { 0, 75, 5, 5 }, // PART_SUNKEN2_NORMAL_SW + { 0, 69, 5, 6 }, // PART_SUNKEN2_NORMAL_W + + { 0, 80, 5, 5 }, // PART_SUNKEN2_FOCUSED_NW + { 5, 80, 6, 5 }, // PART_SUNKEN2_FOCUSED_N + { 11, 80, 5, 5 }, // PART_SUNKEN2_FOCUSED_NE + { 11, 85, 5, 6 }, // PART_SUNKEN2_FOCUSED_E + { 11, 91, 5, 5 }, // PART_SUNKEN2_FOCUSED_SE + { 5, 91, 6, 5 }, // PART_SUNKEN2_FOCUSED_S + { 0, 91, 5, 5 }, // PART_SUNKEN2_FOCUSED_SW + { 0, 85, 5, 6 }, // PART_SUNKEN2_FOCUSED_W + { 0, 0, 3, 15 }, // PART_WINDOW_NW { 3, 0, 7, 15 }, // PART_WINDOW_N { 10, 0, 3, 15 }, // PART_WINDOW_NE @@ -148,14 +166,14 @@ static struct { 0, 19, 3, 5 }, // PART_WINDOW_SW { 0, 15, 3, 4 }, // PART_WINDOW_W - { 0, 80, 3, 3 }, // PART_MENU_NW - { 3, 80, 10, 3 }, // PART_MENU_N - { 13, 80, 3, 3 }, // PART_MENU_NE - { 13, 83, 3, 9 }, // PART_MENU_E - { 13, 92, 3, 4 }, // PART_MENU_SE - { 3, 92, 10, 4 }, // PART_MENU_S - { 0, 92, 3, 4 }, // PART_MENU_SW - { 0, 83, 3, 9 }, // PART_MENU_W + { 0, 96, 3, 3 }, // PART_MENU_NW + { 3, 96, 10, 3 }, // PART_MENU_N + { 13, 96, 3, 3 }, // PART_MENU_NE + { 13, 99, 3, 9 }, // PART_MENU_E + { 13,108, 3, 4 }, // PART_MENU_SE + { 3,108, 10, 4 }, // PART_MENU_S + { 0,108, 3, 4 }, // PART_MENU_SW + { 0, 99, 3, 9 }, // PART_MENU_W { 16, 0, 9, 11 }, // PART_WINDOW_CLOSE_BUTTON_NORMAL { 16, 16, 9, 11 }, // PART_WINDOW_CLOSE_BUTTON_HOT @@ -199,48 +217,67 @@ static struct { 32, 80, 9, 5 }, // PART_SEPARATOR + { 96, 32, 16, 16 }, // PART_COMBOBOX_ARROW + + { 96, 0, 3, 3 }, // PART_TOOLBUTTON_NORMAL_NW + { 99, 0, 10, 3 }, // PART_TOOLBUTTON_NORMAL_N + {109, 0, 3, 3 }, // PART_TOOLBUTTON_NORMAL_NE + {109, 3, 3, 9 }, // PART_TOOLBUTTON_NORMAL_E + {109, 12, 3, 4 }, // PART_TOOLBUTTON_NORMAL_SE + { 99, 12, 10, 4 }, // PART_TOOLBUTTON_NORMAL_S + { 96, 12, 3, 4 }, // PART_TOOLBUTTON_NORMAL_SW + { 96, 3, 3, 9 }, // PART_TOOLBUTTON_NORMAL_W + + {112, 0, 3, 3 }, // PART_TOOLBUTTON_HOT_NW + {115, 0, 10, 3 }, // PART_TOOLBUTTON_HOT_N + {125, 0, 3, 3 }, // PART_TOOLBUTTON_HOT_NE + {125, 3, 3, 9 }, // PART_TOOLBUTTON_HOT_E + {125, 12, 3, 4 }, // PART_TOOLBUTTON_HOT_SE + {115, 12, 10, 4 }, // PART_TOOLBUTTON_HOT_S + {112, 12, 3, 4 }, // PART_TOOLBUTTON_HOT_SW + {112, 3, 3, 9 }, // PART_TOOLBUTTON_HOT_W + + { 96, 16, 3, 3 }, // PART_TOOLBUTTON_LAST_NORMAL_NW + { 99, 16, 10, 3 }, // PART_TOOLBUTTON_LAST_NORMAL_N + {109, 16, 3, 3 }, // PART_TOOLBUTTON_LAST_NORMAL_NE + {109, 19, 3, 9 }, // PART_TOOLBUTTON_LAST_NORMAL_E + {109, 28, 3, 4 }, // PART_TOOLBUTTON_LAST_NORMAL_SE + { 99, 28, 10, 4 }, // PART_TOOLBUTTON_LAST_NORMAL_S + { 96, 28, 3, 4 }, // PART_TOOLBUTTON_LAST_NORMAL_SW + { 96, 19, 3, 9 }, // PART_TOOLBUTTON_LAST_NORMAL_W + // Tabs { 2,112, 4, 4 }, // PART_TAB_NORMAL_NW - { 6,112, 4, 4 }, // PART_TAB_NORMAL_N - { 10,112, 4, 4 }, // PART_TAB_NORMAL_NE - { 10,116, 4, 4 }, // PART_TAB_NORMAL_E - { 10,120, 4, 4 }, // PART_TAB_NORMAL_SE - { 6,120, 4, 4 }, // PART_TAB_NORMAL_S - { 2,120, 4, 4 }, // PART_TAB_NORMAL_SW - { 2,116, 4, 4 }, // PART_TAB_NORMAL_W + { 6,112, 5, 4 }, // PART_TAB_NORMAL_N + { 11,112, 5, 4 }, // PART_TAB_NORMAL_NE + { 11,116, 5, 6 }, // PART_TAB_NORMAL_E + { 11,122, 5, 2 }, // PART_TAB_NORMAL_SE + { 6,122, 4, 2 }, // PART_TAB_NORMAL_S + { 2,122, 4, 2 }, // PART_TAB_NORMAL_SW + { 2,116, 4, 6 }, // PART_TAB_NORMAL_W - { 15,112, 4, 4 }, // PART_TAB_SELECTED_NW - { 19,112, 4, 4 }, // PART_TAB_SELECTED_N - { 23,112, 4, 4 }, // PART_TAB_SELECTED_NE - { 23,116, 4, 4 }, // PART_TAB_SELECTED_E - { 23,120, 4, 4 }, // PART_TAB_SELECTED_SE - { 19,120, 4, 4 }, // PART_TAB_SELECTED_S - { 15,120, 4, 4 }, // PART_TAB_SELECTED_SW - { 15,116, 4, 4 }, // PART_TAB_SELECTED_W + { 16,112, 4, 4 }, // PART_TAB_SELECTED_NW + { 20,112, 7, 4 }, // PART_TAB_SELECTED_N + { 27,112, 5, 4 }, // PART_TAB_SELECTED_NE + { 27,116, 5, 6 }, // PART_TAB_SELECTED_E + { 27,122, 5, 2 }, // PART_TAB_SELECTED_SE + { 20,122, 7, 2 }, // PART_TAB_SELECTED_S + { 16,122, 4, 2 }, // PART_TAB_SELECTED_SW + { 16,116, 4, 6 }, // PART_TAB_SELECTED_W - // { 15,124, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_NW - // { 19,124, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_N - // { 23,124, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_NE - // { 23,128, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_E - // { 23,132, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_SE - // { 19,132, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_S - // { 15,132, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_SW - // { 15,128, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_W - { 15,124, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_NW - { 19,124, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_N - { 23,124, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_NE - { 23,128, 4, 1 }, // PART_TAB_BOTTOM_SELECTED_E - { 23,129, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_SE - { 19,129, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_S - { 15,129, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_SW - { 15,128, 4, 1 }, // PART_TAB_BOTTOM_SELECTED_W + { 16,124, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_NW + { 20,124, 7, 4 }, // PART_TAB_BOTTOM_SELECTED_N + { 27,124, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_NE + { 27,128, 4, 1 }, // PART_TAB_BOTTOM_SELECTED_E + { 27,129, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_SE + { 20,129, 7, 4 }, // PART_TAB_BOTTOM_SELECTED_S + { 16,129, 4, 4 }, // PART_TAB_BOTTOM_SELECTED_SW + { 16,128, 4, 1 }, // PART_TAB_BOTTOM_SELECTED_W - // { 2,124, 12, 12 }, // PART_TAB_BOTTOM_NORMAL { 2,124, 12, 9 }, // PART_TAB_BOTTOM_NORMAL { 0,112, 2, 12 }, // PART_TAB_FILLER - { 14,112, 1, 12 }, // PART_TAB_FILLER_SEPARATOR { 32,112, 3, 3 }, // PART_EDITOR_NORMAL_NW { 35,112, 10, 3 }, // PART_EDITOR_NORMAL_N @@ -368,11 +405,6 @@ void SkinneableTheme::init_widget(JWidget widget) widget->border_width.r = R; \ widget->border_width.b = B; - if ((widget->flags & JI_INITIALIZED) && - (widget->type != JI_WINDOW) && - (widget->type != JI_SEPARATOR)) - return; - switch (widget->type) { case JI_BOX: @@ -418,11 +450,20 @@ void SkinneableTheme::init_widget(JWidget widget) BORDER(1); break; - case JI_COMBOBOX: { - // JWidget button = jcombobox_get_button_widget(widget); - // ji_generic_button_set_icon(button, icons_bitmap[ICON_COMBOBOX]); + case JI_COMBOBOX: + if (!(widget->flags & JI_INITIALIZED)) { + JWidget button = jcombobox_get_button_widget(widget); + + button->border_width.l = 0; + button->border_width.t = 0; + button->border_width.r = 0; + button->border_width.b = 0; + button->child_spacing = 0; + + jwidget_add_hook(button, JI_WIDGET, + &SkinneableTheme::theme_combobox_button_msg_proc, NULL); + } break; - } case JI_MENU: case JI_MENUBAR: @@ -511,7 +552,7 @@ void SkinneableTheme::init_widget(JWidget widget) JWidget button = jbutton_new(""); jbutton_set_bevel(button, 0, 0, 0, 0); jwidget_add_hook(button, JI_WIDGET, - &SkinneableTheme::theme_button_msg_proc, NULL); + &SkinneableTheme::theme_window_button_msg_proc, NULL); jwidget_decorative(button, true); jwidget_add_child(widget, button); jwidget_set_name(button, "theme_close_button"); @@ -1125,6 +1166,124 @@ void SkinneableTheme::draw_slider(JWidget widget, JRect clip) } } +void SkinneableTheme::draw_combobox_entry(JWidget widget, JRect clip) +{ + bool password = jentry_is_password(widget); + int scroll, cursor, state, selbeg, selend; + const char *text = widget->text(); + int c, ch, x, y, w, fg, bg; + int x1, y1, x2, y2; + int cursor_x; + + jtheme_entry_info(widget, &scroll, &cursor, &state, &selbeg, &selend); + + /* main pos */ + x1 = widget->rc->x1; + y1 = widget->rc->y1; + x2 = widget->rc->x2-1; + y2 = widget->rc->y2-1; + + bg = COLOR_BACKGROUND; + + draw_bounds(x1, y1, x2, y2, + jwidget_has_focus(widget) ? PART_SUNKEN2_FOCUSED_NW: + PART_SUNKEN2_NORMAL_NW, bg); + + /* draw the text */ + x = widget->rc->x1 + widget->border_width.l; + y = (widget->rc->y1+widget->rc->y2)/2 - jwidget_get_text_height(widget)/2; + + for (c=scroll; ugetat(text, c); c++) { + ch = password ? '*': ugetat(text, c); + + /* normal text */ + bg = -1; + fg = COLOR_FOREGROUND; + + /* selected */ + if ((c >= selbeg) && (c <= selend)) { + if (jwidget_has_focus(widget)) + bg = COLOR_SELECTED; + else + bg = COLOR_DISABLED; + fg = COLOR_BACKGROUND; + } + + /* disabled */ + if (jwidget_is_disabled (widget)) { + bg = -1; + fg = COLOR_DISABLED; + } + + w = CHARACTER_LENGTH(widget->font(), ch); + if (x+w > widget->rc->x2-3) + return; + + cursor_x = x; + ji_font_set_aa_mode(widget->font(), bg >= 0 ? bg: COLOR_BACKGROUND); + widget->font()->vtable->render_char(widget->font(), + ch, fg, bg, ji_screen, x, y); + x += w; + + /* cursor */ + if ((c == cursor) && (state) && (jwidget_has_focus (widget))) + draw_entry_cursor(widget, cursor_x, y); + } + + /* draw the cursor if it is next of the last character */ + if ((c == cursor) && (state) && + (jwidget_has_focus(widget)) && + (jwidget_is_enabled(widget))) + draw_entry_cursor(widget, x, y); +} + +void SkinneableTheme::draw_combobox_button(JWidget widget, JRect clip) +{ + BITMAP* icon_bmp = m_part[PART_COMBOBOX_ARROW]; + struct jrect icon; + int x1, y1, x2, y2; + int fg, bg, part_nw; + + /* with mouse */ + if (jwidget_is_selected(widget) || + (jwidget_is_enabled(widget) && jwidget_has_mouse(widget))) { + fg = get_button_hot_text_color(); + bg = get_button_hot_face_color(); + part_nw = PART_TOOLBUTTON_HOT_NW; + } + /* without mouse */ + else { + fg = get_button_normal_text_color(); + bg = get_button_normal_face_color(); + part_nw = PART_TOOLBUTTON_LAST_NW; + } + + /* widget position */ + x1 = widget->rc->x1; + y1 = widget->rc->y1; + x2 = widget->rc->x2-1; + y2 = widget->rc->y2-1; + + // external background + rectfill(ji_screen, x1, y1, x2, y2, BGCOLOR); + + // draw borders + draw_bounds(x1, y1, x2, y2, part_nw, bg); + + // icon + icon.x1 = (x1+x2)/2 - icon_bmp->w/2; + icon.y1 = (y1+y2)/2 - icon_bmp->h/2; + icon.x2 = icon.x1 + icon_bmp->w; + icon.y2 = icon.y1 + icon_bmp->h; + + if (jwidget_is_selected(widget)) + jrect_displace(&icon, + get_button_selected_offset(), + get_button_selected_offset()); + + draw_sprite(ji_screen, icon_bmp, icon.x1, icon.y1); +} + void SkinneableTheme::draw_textbox(JWidget widget, JRect clip) { _ji_theme_textbox_draw(ji_screen, widget, NULL, NULL, @@ -1461,7 +1620,7 @@ void SkinneableTheme::less_bevel(int *bevel) } /* controls the "X" button in a window to close it */ -bool SkinneableTheme::theme_button_msg_proc(JWidget widget, JMessage msg) +bool SkinneableTheme::theme_window_button_msg_proc(JWidget widget, JMessage msg) { switch (msg->type) { @@ -1493,3 +1652,17 @@ bool SkinneableTheme::theme_button_msg_proc(JWidget widget, JMessage msg) return false; } + +bool SkinneableTheme::theme_combobox_button_msg_proc(JWidget widget, JMessage msg) +{ + switch (msg->type) { + + case JM_REQSIZE: + msg->reqsize.w = 15; + msg->reqsize.h = 16; + return true; + + } + + return false; +} diff --git a/src/modules/skinneable_theme.h b/src/modules/skinneable_theme.h index 60443a0de..9473ea79a 100644 --- a/src/modules/skinneable_theme.h +++ b/src/modules/skinneable_theme.h @@ -120,6 +120,24 @@ enum { PART_SUNKEN_FOCUSED_SW, PART_SUNKEN_FOCUSED_W, + PART_SUNKEN2_NORMAL_NW, + PART_SUNKEN2_NORMAL_N, + PART_SUNKEN2_NORMAL_NE, + PART_SUNKEN2_NORMAL_E, + PART_SUNKEN2_NORMAL_SE, + PART_SUNKEN2_NORMAL_S, + PART_SUNKEN2_NORMAL_SW, + PART_SUNKEN2_NORMAL_W, + + PART_SUNKEN2_FOCUSED_NW, + PART_SUNKEN2_FOCUSED_N, + PART_SUNKEN2_FOCUSED_NE, + PART_SUNKEN2_FOCUSED_E, + PART_SUNKEN2_FOCUSED_SE, + PART_SUNKEN2_FOCUSED_S, + PART_SUNKEN2_FOCUSED_SW, + PART_SUNKEN2_FOCUSED_W, + PART_WINDOW_NW, PART_WINDOW_N, PART_WINDOW_NE, @@ -180,6 +198,35 @@ enum { PART_SEPARATOR, + PART_COMBOBOX_ARROW, + + PART_TOOLBUTTON_NORMAL_NW, + PART_TOOLBUTTON_NORMAL_N, + PART_TOOLBUTTON_NORMAL_NE, + PART_TOOLBUTTON_NORMAL_E, + PART_TOOLBUTTON_NORMAL_SE, + PART_TOOLBUTTON_NORMAL_S, + PART_TOOLBUTTON_NORMAL_SW, + PART_TOOLBUTTON_NORMAL_W, + + PART_TOOLBUTTON_HOT_NW, + PART_TOOLBUTTON_HOT_N, + PART_TOOLBUTTON_HOT_NE, + PART_TOOLBUTTON_HOT_E, + PART_TOOLBUTTON_HOT_SE, + PART_TOOLBUTTON_HOT_S, + PART_TOOLBUTTON_HOT_SW, + PART_TOOLBUTTON_HOT_W, + + PART_TOOLBUTTON_LAST_NW, + PART_TOOLBUTTON_LAST_N, + PART_TOOLBUTTON_LAST_NE, + PART_TOOLBUTTON_LAST_E, + PART_TOOLBUTTON_LAST_SE, + PART_TOOLBUTTON_LAST_S, + PART_TOOLBUTTON_LAST_SW, + PART_TOOLBUTTON_LAST_W, + PART_TAB_NORMAL_NW, PART_TAB_NORMAL_N, PART_TAB_NORMAL_NE, @@ -210,7 +257,6 @@ enum { PART_TAB_BOTTOM_NORMAL, PART_TAB_FILLER, - PART_TAB_FILLER_SEPARATOR, PART_EDITOR_NORMAL_NW, PART_EDITOR_NORMAL_N, @@ -269,6 +315,8 @@ public: void draw_radio(JWidget widget, JRect clip); void draw_separator(JWidget widget, JRect clip); void draw_slider(JWidget widget, JRect clip); + void draw_combobox_entry(JWidget widget, JRect clip); + void draw_combobox_button(JWidget widget, JRect clip); void draw_textbox(JWidget widget, JRect clip); void draw_view(JWidget widget, JRect clip); void draw_view_scrollbar(JWidget widget, JRect clip); @@ -339,7 +387,9 @@ private: void draw_bevel_box(int x1, int y1, int x2, int y2, int c1, int c2, int *bevel); void less_bevel(int *bevel); - static bool theme_button_msg_proc(JWidget widget, JMessage msg); + static bool theme_window_button_msg_proc(JWidget widget, JMessage msg); + static bool theme_combobox_button_msg_proc(JWidget widget, JMessage msg); + }; #endif diff --git a/src/widgets/tabs.cpp b/src/widgets/tabs.cpp index 63f0cfc62..46fb2f7ad 100644 --- a/src/widgets/tabs.cpp +++ b/src/widgets/tabs.cpp @@ -275,12 +275,6 @@ static bool tabs_msg_proc(JWidget widget, JMessage msg) text_color, face_color, false); } - box->x1 = box->x2; - box->x2 = box->x1 + theme->get_part(PART_TAB_FILLER_SEPARATOR)->w; - - theme->draw_hline(box->x1, box->y1, box->x2-1, box->y2-1, PART_TAB_FILLER_SEPARATOR); - theme->draw_hline(box->x1, box->y2, box->x2-1, rect->y2-1, PART_TAB_BOTTOM_NORMAL); - box->x1 = box->x2; }