From 28324143c4ce657c4de773c8363b93b27625243e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 27 Sep 2018 18:25:50 +0200 Subject: UI: draw mono icons with button type text color, instead of area text color. --- source/blender/blenlib/BLI_math_vector.h | 1 + source/blender/blenlib/intern/math_vector_inline.c | 8 ++++ .../blender/editors/include/UI_interface_icons.h | 6 +-- source/blender/editors/interface/interface_icons.c | 46 ++++++++++++---------- source/blender/editors/interface/interface_panel.c | 5 ++- .../blender/editors/interface/interface_widgets.c | 30 ++++++-------- source/blender/editors/screen/area.c | 2 +- source/blender/editors/space_file/file_draw.c | 2 +- source/blender/windowmanager/intern/wm_dragdrop.c | 6 +-- 9 files changed, 59 insertions(+), 47 deletions(-) diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h index 0a9258f47ac..0df407b37df 100644 --- a/source/blender/blenlib/BLI_math_vector.h +++ b/source/blender/blenlib/BLI_math_vector.h @@ -123,6 +123,7 @@ MINLINE void mul_v2_v2(float r[2], const float a[2]); MINLINE void mul_v3_v3(float r[3], const float a[3]); MINLINE void mul_v3_v3v3(float r[3], const float a[3], const float b[3]); MINLINE void mul_v4_fl(float r[4], float f); +MINLINE void mul_v4_v4(float r[4], const float a[4]); MINLINE void mul_v4_v4fl(float r[3], const float a[3], float f); MINLINE void mul_v2_v2_cw(float r[2], const float mat[2], const float vec[2]); MINLINE void mul_v2_v2_ccw(float r[2], const float mat[2], const float vec[2]); diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c index c4535eacefa..297fa9479da 100644 --- a/source/blender/blenlib/intern/math_vector_inline.c +++ b/source/blender/blenlib/intern/math_vector_inline.c @@ -459,6 +459,14 @@ MINLINE void mul_v4_fl(float r[4], float f) r[3] *= f; } +MINLINE void mul_v4_v4(float r[4], const float a[4]) +{ + r[0] *= a[0]; + r[1] *= a[1]; + r[2] *= a[2]; + r[3] *= a[3]; +} + MINLINE void mul_v4_v4fl(float r[4], const float a[4], float f) { r[0] = a[0] * f; diff --git a/source/blender/editors/include/UI_interface_icons.h b/source/blender/editors/include/UI_interface_icons.h index a34c4938b86..640d66c9ac4 100644 --- a/source/blender/editors/include/UI_interface_icons.h +++ b/source/blender/editors/include/UI_interface_icons.h @@ -73,10 +73,10 @@ void UI_icon_draw_preview(float x, float y, int icon_id); void UI_icon_draw_preview_aspect(float x, float y, int icon_id, float aspect); void UI_icon_draw_preview_aspect_size(float x, float y, int icon_id, float aspect, float alpha, int size); -void UI_icon_draw_aspect(float x, float y, int icon_id, float aspect, float alpha); -void UI_icon_draw_aspect_color(float x, float y, int icon_id, float aspect, const float rgb[3]); +void UI_icon_draw_aspect(float x, float y, int icon_id, float aspect, float alpha, const char mono_color[4]); +void UI_icon_draw_aspect_color(float x, float y, int icon_id, float aspect, const float rgb[3], const char mono_color[4]); void UI_icon_draw_size(float x, float y, int size, int icon_id, float alpha); -void UI_icon_draw_desaturate(float x, float y, int icon_id, float aspect, float alpha, float desaturate); +void UI_icon_draw_desaturate(float x, float y, int icon_id, float aspect, float alpha, float desaturate, const char mono_color[4]); void UI_icons_free(void); void UI_icons_free_drawinfo(void *drawinfo); diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index db08e441b01..7b338b90a62 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -1450,7 +1450,7 @@ static int get_draw_size(enum eIconSizes size) static void icon_draw_size( float x, float y, int icon_id, float aspect, float alpha, const float rgb[3], - enum eIconSizes size, int draw_size, const float desaturate) + enum eIconSizes size, int draw_size, const float desaturate, const char mono_rgba[4]) { bTheme *btheme = UI_GetTheme(); Icon *icon = NULL; @@ -1525,16 +1525,22 @@ static void icon_draw_size( } else if (di->type == ICON_TYPE_MONO_TEXTURE) { /* icon that matches text color, assumed to be white */ - float text_color[4]; - UI_GetThemeColor4fv(TH_TEXT, text_color); + float color[4]; + if (mono_rgba) { + rgba_uchar_to_float(color, (const unsigned char*)mono_rgba); + } + else { + UI_GetThemeColor4fv(TH_TEXT, color); + } + if (rgb) { - mul_v3_v3(text_color, rgb); + mul_v3_v3(color, rgb); } - text_color[3] *= alpha; + color[3] *= alpha; GPU_blend_set_func(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA); icon_draw_texture(x, y, (float)w, (float)h, di->data.texture.x, di->data.texture.y, - di->data.texture.w, di->data.texture.h, text_color[3], text_color); + di->data.texture.w, di->data.texture.h, color[3], color); GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA); } @@ -1880,55 +1886,55 @@ int UI_idcode_icon_get(const int idcode) static void icon_draw_at_size( float x, float y, int icon_id, float aspect, float alpha, - enum eIconSizes size, const float desaturate) + enum eIconSizes size, const float desaturate, const char mono_color[4]) { int draw_size = get_draw_size(size); - icon_draw_size(x, y, icon_id, aspect, alpha, NULL, size, draw_size, desaturate); + icon_draw_size(x, y, icon_id, aspect, alpha, NULL, size, draw_size, desaturate, mono_color); } -void UI_icon_draw_aspect(float x, float y, int icon_id, float aspect, float alpha) +void UI_icon_draw_aspect(float x, float y, int icon_id, float aspect, float alpha, const char mono_color[4]) { - icon_draw_at_size(x, y, icon_id, aspect, alpha, ICON_SIZE_ICON, 0.0f); + icon_draw_at_size(x, y, icon_id, aspect, alpha, ICON_SIZE_ICON, 0.0f, mono_color); } -void UI_icon_draw_aspect_color(float x, float y, int icon_id, float aspect, const float rgb[3]) +void UI_icon_draw_aspect_color(float x, float y, int icon_id, float aspect, const float rgb[3], const char mono_color[4]) { int draw_size = get_draw_size(ICON_SIZE_ICON); - icon_draw_size(x, y, icon_id, aspect, 1.0f, rgb, ICON_SIZE_ICON, draw_size, false); + icon_draw_size(x, y, icon_id, aspect, 1.0f, rgb, ICON_SIZE_ICON, draw_size, false, mono_color); } -void UI_icon_draw_desaturate(float x, float y, int icon_id, float aspect, float alpha, float desaturate) +void UI_icon_draw_desaturate(float x, float y, int icon_id, float aspect, float alpha, float desaturate, const char mono_color[4]) { - icon_draw_at_size(x, y, icon_id, aspect, alpha, ICON_SIZE_ICON, desaturate); + icon_draw_at_size(x, y, icon_id, aspect, alpha, ICON_SIZE_ICON, desaturate, mono_color); } /* draws icon with dpi scale factor */ void UI_icon_draw(float x, float y, int icon_id) { - UI_icon_draw_aspect(x, y, icon_id, 1.0f / UI_DPI_FAC, 1.0f); + UI_icon_draw_aspect(x, y, icon_id, 1.0f / UI_DPI_FAC, 1.0f, NULL); } void UI_icon_draw_alpha(float x, float y, int icon_id, float alpha) { - UI_icon_draw_aspect(x, y, icon_id, 1.0f / UI_DPI_FAC, alpha); + UI_icon_draw_aspect(x, y, icon_id, 1.0f / UI_DPI_FAC, alpha, NULL); } void UI_icon_draw_size(float x, float y, int size, int icon_id, float alpha) { - icon_draw_size(x, y, icon_id, 1.0f, alpha, NULL, ICON_SIZE_ICON, size, false); + icon_draw_size(x, y, icon_id, 1.0f, alpha, NULL, ICON_SIZE_ICON, size, false, NULL); } void UI_icon_draw_preview(float x, float y, int icon_id) { - icon_draw_at_size(x, y, icon_id, 1.0f, 1.0f, ICON_SIZE_PREVIEW, false); + icon_draw_at_size(x, y, icon_id, 1.0f, 1.0f, ICON_SIZE_PREVIEW, false, NULL); } void UI_icon_draw_preview_aspect(float x, float y, int icon_id, float aspect) { - icon_draw_at_size(x, y, icon_id, aspect, 1.0f, ICON_SIZE_PREVIEW, false); + icon_draw_at_size(x, y, icon_id, aspect, 1.0f, ICON_SIZE_PREVIEW, false, NULL); } void UI_icon_draw_preview_aspect_size(float x, float y, int icon_id, float aspect, float alpha, int size) { - icon_draw_size(x, y, icon_id, aspect, alpha, NULL, ICON_SIZE_PREVIEW, size, false); + icon_draw_size(x, y, icon_id, aspect, alpha, NULL, ICON_SIZE_PREVIEW, size, false, NULL); } diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index d35a66639bf..c916deccb84 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -723,11 +723,14 @@ void ui_draw_aligned_panel( if (show_pin) #endif { + char col_title[4]; + UI_GetThemeColor4ubv(TH_TITLE, (unsigned char*)col_title); + GPU_blend(true); UI_icon_draw_aspect( headrect.xmax - ((PNL_ICON * 2.2f) / block->aspect), headrect.ymin + (5.0f / block->aspect), (panel->flag & PNL_PIN) ? ICON_PINNED : ICON_UNPINNED, - (block->aspect / UI_DPI_FAC), 1.0f); + (block->aspect / UI_DPI_FAC), 1.0f, col_title); GPU_blend(false); } diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index a8f5d5e7977..06fd05872a1 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1277,9 +1277,9 @@ static int ui_but_draw_menu_icon(const uiBut *but) /* icons have been standardized... and this call draws in untransformed coordinates */ -static void widget_draw_icon_ex( - const uiBut *but, BIFIconID icon, float alpha, - const rcti *rect, const int icon_size) +static void widget_draw_icon( + const uiBut *but, BIFIconID icon, float alpha, + const rcti *rect, const char mono_color[4]) { float xs = 0.0f, ys = 0.0f; float aspect, height; @@ -1295,7 +1295,7 @@ static void widget_draw_icon_ex( if (icon == ICON_BLANK1 && (but->flag & UI_BUT_ICON_SUBMENU) == 0) return; aspect = but->block->aspect / UI_DPI_FAC; - height = icon_size / aspect; + height = ICON_DEFAULT_HEIGHT / aspect; /* calculate blend color */ if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_ROW, UI_BTYPE_TOGGLE_N, UI_BTYPE_LISTROW)) { @@ -1343,26 +1343,20 @@ static void widget_draw_icon_ex( /* to indicate draggable */ if (but->dragpoin && (but->flag & UI_ACTIVE)) { float rgb[3] = {1.25f, 1.25f, 1.25f}; - UI_icon_draw_aspect_color(xs, ys, icon, aspect, rgb); + UI_icon_draw_aspect_color(xs, ys, icon, aspect, rgb, mono_color); } else if ((but->flag & (UI_ACTIVE | UI_SELECT | UI_SELECT_DRAW)) || !UI_but_is_tool(but)) { - UI_icon_draw_aspect(xs, ys, icon, aspect, alpha); + UI_icon_draw_aspect(xs, ys, icon, aspect, alpha, mono_color); } else { const bTheme *btheme = UI_GetTheme(); - UI_icon_draw_desaturate(xs, ys, icon, aspect, alpha, 1.0 - btheme->tui.icon_saturation); + UI_icon_draw_desaturate(xs, ys, icon, aspect, alpha, 1.0 - btheme->tui.icon_saturation, mono_color); } } GPU_blend(false); } -static void widget_draw_icon( - const uiBut *but, BIFIconID icon, float alpha, const rcti *rect) -{ - widget_draw_icon_ex(but, icon, alpha, rect, ICON_DEFAULT_HEIGHT); -} - static void widget_draw_submenu_tria(const uiBut *but, const rcti *rect, const uiWidgetColors *wcol) { const float aspect = but->block->aspect / UI_DPI_FAC; @@ -2026,7 +2020,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_POPOVER) && (but->flag & UI_BUT_NODE_LINK)) { rcti temp = *rect; temp.xmin = rect->xmax - BLI_rcti_size_y(rect) - 1; - widget_draw_icon(but, ICON_LAYER_USED, alpha, &temp); + widget_draw_icon(but, ICON_LAYER_USED, alpha, &temp, wcol->text); rect->xmax = temp.xmin; } @@ -2096,7 +2090,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB else if (ui_block_is_menu(but->block)) rect->xmin += 0.3f * U.widget_unit; - widget_draw_icon(but, icon, alpha, rect); + widget_draw_icon(but, icon, alpha, rect, wcol->text); if (show_menu_icon) { BLI_assert(but->block->content_hints & UI_BLOCK_CONTAINS_SUBMENU_BUT); widget_draw_submenu_tria(but, rect, wcol); @@ -2129,10 +2123,10 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB temp.xmin = temp.xmax - (BLI_rcti_size_y(rect) * 1.08f); if (extra_icon_type == UI_BUT_ICONEXTRA_CLEAR) { - widget_draw_icon(but, ICON_PANEL_CLOSE, alpha, &temp); + widget_draw_icon(but, ICON_PANEL_CLOSE, alpha, &temp, wcol->text); } else if (extra_icon_type == UI_BUT_ICONEXTRA_EYEDROPPER) { - widget_draw_icon(but, ICON_EYEDROPPER, alpha, &temp); + widget_draw_icon(but, ICON_EYEDROPPER, alpha, &temp, wcol->text); } else { BLI_assert(0); @@ -4711,7 +4705,7 @@ void ui_draw_menu_item(uiFontStyle *fstyle, rcti *rect, const char *name, int ic aspect = ICON_DEFAULT_HEIGHT / height; GPU_blend(true); - UI_icon_draw_aspect(xs, ys, iconid, aspect, 1.0f); /* XXX scale weak get from fstyle? */ + UI_icon_draw_aspect(xs, ys, iconid, aspect, 1.0f, wt->wcol.text); /* XXX scale weak get from fstyle? */ GPU_blend(false); } } diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index cf425234385..66cd90c1c83 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -250,7 +250,7 @@ static void area_draw_azone_fullscreen(short x1, short y1, short x2, short y2, f alpha = min_ff(alpha, 0.75f); - UI_icon_draw_aspect(x, y, ICON_FULLSCREEN_EXIT, 0.7f / UI_DPI_FAC, alpha); + UI_icon_draw_aspect(x, y, ICON_FULLSCREEN_EXIT, 0.7f / UI_DPI_FAC, alpha, NULL); /* debug drawing : * The click_rect is the same as defined in fullscreen_click_rcti_init diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 54f67fa251e..679ae6b9648 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -397,7 +397,7 @@ static void file_draw_preview( scale, scale, 1.0f, 1.0f, col); if (icon) { - UI_icon_draw_aspect((float)xco, (float)yco, icon, icon_aspect, 1.0f); + UI_icon_draw_aspect((float)xco, (float)yco, icon, icon_aspect, 1.0f, NULL); } /* border */ diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c index 73748ba6322..1c86f0ab9b7 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.c +++ b/source/blender/windowmanager/intern/wm_dragdrop.c @@ -396,6 +396,7 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect) /* XXX todo, multiline drag draws... but maybe not, more types mixed wont work well */ glEnable(GL_BLEND); for (drag = wm->drags.first; drag; drag = drag->next) { + const char text_col[] = {255, 255, 255, 255}; int iconsize = UI_DPI_ICON_SIZE; int padding = 4 * UI_DPI_FAC; @@ -420,7 +421,7 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect) if (rect) drag_rect_minmax(rect, x, y, x + iconsize, y + iconsize); else - UI_icon_draw_aspect(x, y, drag->icon, 1.0f / UI_DPI_FAC, 0.8); + UI_icon_draw_aspect(x, y, drag->icon, 1.0f / UI_DPI_FAC, 0.8, text_col); } /* item name */ @@ -438,8 +439,7 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect) drag_rect_minmax(rect, x, y, x + w, y + iconsize); } else { - const unsigned char col[] = {255, 255, 255, 255}; - UI_fontstyle_draw_simple(fstyle, x, y, wm_drag_name(drag), col); + UI_fontstyle_draw_simple(fstyle, x, y, wm_drag_name(drag), (unsigned char*)text_col); } /* operator name with roundbox */ -- cgit v1.2.3