[Bf-blender-cvs] [a05c604] UI-graphical-redesign: Redesign panel headers + minor tweaks + minor cleanup
Julian Eisel
noreply at git.blender.org
Tue Jun 2 17:50:27 CEST 2015
Commit: a05c604880753f86866ced36d1c1180cc2b2d35e
Author: Julian Eisel
Date: Tue Jun 2 17:49:00 2015 +0200
Branches: UI-graphical-redesign
https://developer.blender.org/rBa05c604880753f86866ced36d1c1180cc2b2d35e
Redesign panel headers + minor tweaks + minor cleanup
Currently looking like this: https://developer.blender.org/F183457
Design was worked out together with @plyczkowski
===================================================================
M source/blender/editors/interface/interface_panel.c
M source/blender/editors/screen/area.c
M source/blender/makesdna/DNA_screen_types.h
===================================================================
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 011b5f6..96f411c 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -427,16 +427,43 @@ void UI_draw_icon_tri(float x, float y, char dir)
}
}
-/* triangle 'icon' inside rect */
-static void ui_draw_tria_rect(const rctf *rect, char dir)
+static void ui_draw_tria_rect(const rctf *rect, const bool is_closed)
{
- if (dir == 'h') {
+ const float col_tint = 50;
+ const int px = (int)UI_DPI_FAC;
+ float col[3];
+
+ /* XXX ensure contrast */
+ UI_GetThemeColorShade3fv(TH_TITLE, col_tint, col);
+
+ /* color for shadow drawing */
+ glColor4f(0.0f, 0.0f, 0.0f, 0.3f);
+
+ if (is_closed) {
float half = 0.5f * BLI_rctf_size_y(rect);
- ui_draw_anti_tria(rect->xmin, rect->ymin, rect->xmin, rect->ymax, rect->xmax, rect->ymin + half);
+
+ /* draw shadow first */
+ ui_draw_anti_tria(rect->xmin + px, rect->ymin - px,
+ rect->xmin + px, rect->ymax - px,
+ rect->xmax + px, rect->ymin + half - px);
+
+ glColor3fv(col);
+ ui_draw_anti_tria(rect->xmin, rect->ymin,
+ rect->xmin, rect->ymax,
+ rect->xmax, rect->ymin + half);
}
else {
- float half = 0.5f * BLI_rctf_size_x(rect);
- ui_draw_anti_tria(rect->xmin, rect->ymax, rect->xmax, rect->ymax, rect->xmin + half, rect->ymin);
+ float half = 0.5f * BLI_rctf_size_y(rect);
+
+ /* draw shadow first */
+ ui_draw_anti_tria(rect->xmin + px, rect->ymax - px,
+ rect->xmax + px, rect->ymax - px,
+ rect->xmin + half + px, rect->ymin - px);
+
+ glColor3fv(col);
+ ui_draw_anti_tria(rect->xmin, rect->ymax,
+ rect->xmax, rect->ymax,
+ rect->xmin + half, rect->ymin);
}
}
@@ -462,9 +489,7 @@ static void ui_draw_anti_x(float x1, float y1, float x2, float y2)
/* x 'icon' for panel header */
static void ui_draw_x_icon(float x, float y)
{
-
ui_draw_anti_x(x, y, x + 9.375f, y + 9.375f);
-
}
#define PNL_ICON UI_UNIT_X /* could be UI_UNIT_Y too */
@@ -492,78 +517,73 @@ static void ui_draw_panel_scalewidget(const rcti *rect)
fdrawline(xmin + dx, ymin + 1, xmax, ymax - dy + 1);
glDisable(GL_BLEND);
}
+
static void ui_draw_panel_dragwidget(const rctf *rect)
{
unsigned char col_back[3], col_high[3], col_dark[3];
- const int col_tint = 84;
+ const int col_tint = 60;
- const int px = (int)U.pixelsize;
+ const int px = (int)UI_DPI_FAC;
const int px_zoom = max_ii(iroundf(BLI_rctf_size_y(rect) / 22.0f), 1);
const int box_margin = max_ii(iroundf((float)(px_zoom * 2.0f)), px);
const int box_size = max_ii(iroundf((BLI_rctf_size_y(rect) / 8.0f) - px), px);
+ const int box_rows = 4;
const int x_min = rect->xmin;
const int y_min = rect->ymin;
- const int y_ofs = max_ii(iroundf(BLI_rctf_size_y(rect) / 3.0f), px);
- const int x_ofs = y_ofs;
- int i_x, i_y;
+ const int y_ofs = (BLI_rctf_size_y(rect) / box_rows) - (box_margin * 0.5f);
+ int i;
UI_GetThemeColor3ubv(UI_GetThemeValue(TH_PANEL_SHOW_HEADER) ? TH_PANEL_HEADER : TH_PANEL_BACK, col_back);
- UI_GetColorPtrShade3ubv(col_back, col_high, col_tint);
- UI_GetColorPtrShade3ubv(col_back, col_dark, -col_tint);
+ UI_GetColorPtrShade3ubv(col_back, col_high, col_tint);
+ UI_GetColorPtrShade3ubv(col_back, col_dark, -(col_tint * 0.4));
/* draw multiple boxes */
- for (i_x = 0; i_x < 4; i_x++) {
- for (i_y = 0; i_y < 2; i_y++) {
- const int x_co = (x_min + x_ofs) + (i_x * (box_size + box_margin));
- const int y_co = (y_min + y_ofs) + (i_y * (box_size + box_margin));
-
- glColor3ubv(col_dark);
- glRectf(x_co - box_size, y_co - px_zoom, x_co, (y_co + box_size) - px_zoom);
- glColor3ubv(col_high);
- glRectf(x_co - box_size, y_co, x_co, y_co + box_size);
- }
+ for (i = 0; i < box_rows; i++) {
+ const int y_co = (y_min + y_ofs) + (i * (box_size + box_margin));
+
+ glColor3ubv(col_dark);
+ glRectf(x_min - box_size + px_zoom, y_co - px_zoom, x_min + px_zoom, (y_co + box_size) - px_zoom);
+ glColor3ubv(col_high);
+ glRectf(x_min - box_size, y_co, x_min, y_co + box_size);
}
}
-
-static void ui_draw_aligned_panel_header(uiStyle *style, uiBlock *block, const rcti *rect, char dir)
+static void ui_draw_aligned_panel_header(
+ const uiStyle *style, const uiBlock *block,
+ const rcti *rect, const char dir)
{
- Panel *panel = block->panel;
- rcti hrect;
- int pnl_icons;
+ const Panel *panel = block->panel;
+ const int px = (int)UI_DPI_FAC;
const char *activename = panel->drawname[0] ? panel->drawname : panel->panelname;
+ rcti hrect;
- /* + 0.001f to avoid flirting with float inaccuracy */
- if (panel->control & UI_PNL_CLOSE)
- pnl_icons = (panel->labelofs + 2 * PNL_ICON + 5) / block->aspect + 0.001f;
- else
- pnl_icons = (panel->labelofs + PNL_ICON + 5) / block->aspect + 0.001f;
-
/* active tab */
/* draw text label */
UI_ThemeColor(TH_TITLE);
-
+
hrect = *rect;
if (dir == 'h') {
- hrect.xmin = rect->xmin + pnl_icons;
- hrect.ymin += 2.0f / block->aspect;
+ hrect.xmin = rect->xmin + BLI_rcti_size_y(rect);
+ hrect.ymin += (2.0f / block->aspect) * px;
UI_fontstyle_draw(&style->paneltitle, &hrect, activename);
}
else {
- /* ignore 'pnl_icons', otherwise the text gets offset horizontally */
- hrect.xmin = rect->xmin + (PNL_HEADER - 1) / block->aspect;
+ hrect.xmin = rect->xmin + ((PNL_HEADER - 1) / block->aspect);
UI_fontstyle_draw_rotated(&style->paneltitle, &hrect, activename);
}
}
-static void ui_draw_panel_shadow(const rctf shadowrect, const float alpha_fac, const bool is_selected)
+static void ui_draw_panel_shadow(
+ const rctf shadowrect, const float aspect,
+ const float alpha_fac, const bool is_selected)
{
float alpha_fac_tmp = 0.2f * alpha_fac;
- short shadow_ofs = is_selected ? 2.0f * U.pixelsize : 1.0f * U.pixelsize;
+ const int px = MAX2(iroundf(UI_DPI_FAC * (1 / aspect)), 1);
+ short shadow_ofs = is_selected ? 2.0f * px : 1.0f * px;
glEnable(GL_BLEND);
@@ -581,7 +601,7 @@ static void ui_draw_panel_shadow(const rctf shadowrect, const float alpha_fac, c
glRectf(shadowrect.xmin + shadow_ofs, shadowrect.ymin - shadow_ofs,
shadowrect.xmax + shadow_ofs, shadowrect.ymax - shadow_ofs);
- shadow_ofs += 1 * U.pixelsize;
+ shadow_ofs += px;
alpha_fac_tmp *= 0.5f;
}
}
@@ -594,26 +614,33 @@ static void panel_boundbox_get(
const rcti *blockrect, const rcti *headrect,
rctf *r_bounds)
{
- const int xmax = (pa->flag & PNL_CLOSEDX) ? (blockrect->xmin + PNL_HEADER / block->aspect) : blockrect->xmax;
+ const int xmax = (pa->flag & PNL_CLOSEDX) ? (blockrect->xmin + (PNL_HEADER / block->aspect)) : blockrect->xmax;
const int ymin = (pa->flag & PNL_CLOSED) ? headrect->ymin : blockrect->ymin;
BLI_rctf_init(r_bounds, blockrect->xmin, xmax, ymin, headrect->ymax);
}
/* panel integrated in buttonswindow, tool/property lists etc */
-void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, const bool show_pin)
+void ui_draw_aligned_panel(
+ uiStyle *style, uiBlock *block,
+ const rcti *rect,
+ const bool show_pin)
{
Panel *panel = block->panel;
rctf fullrect, itemrect;
rcti headrect;
+ int ofsx;
const bool is_selected = (panel->flag & PNL_SELECT) ? true : false;
const float alpha_fac = is_selected ? 0.7f : 1.0f;
- int ofsx;
+ /* panel states */
const bool is_inside = ELEM(panel->mouse_state, PANEL_MOUSE_INSIDE_CONTENT, PANEL_MOUSE_INSIDE_HEADER);
+ const bool is_closed_xy = (panel->flag & PNL_CLOSED) ? true : false;
const bool is_closed_x = (panel->flag & PNL_CLOSEDX) ? true : false;
const bool is_closed_y = (panel->flag & PNL_CLOSEDY) ? true : false;
+
+ /* theme options */
const bool draw_header = UI_GetThemeValue(TH_PANEL_SHOW_HEADER);
const bool draw_back = UI_GetThemeValue(TH_PANEL_SHOW_BACK);
@@ -629,7 +656,7 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
/* set fullrect */
panel_boundbox_get(block, panel, rect, &headrect, &fullrect);
- if (draw_header == false && panel->flag & PNL_CLOSED) {
+ if (draw_header == false && is_closed_xy) {
/* skip */
}
/* draw panel shadow */
@@ -641,12 +668,12 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
shadowrect.ymax = rect->ymax;
}
- ui_draw_panel_shadow(shadowrect, alpha_fac, is_selected);
+ ui_draw_panel_shadow(shadowrect, block->aspect, alpha_fac, is_selected);
}
{
float minx = rect->xmin;
- float maxx = is_closed_x ? (minx + PNL_HEADER / block->aspect) : rect->xmax;
+ float maxx = is_closed_x ? (minx + (PNL_HEADER / block->aspect)) : rect->xmax;
float y = headrect.ymax;
glEnable(GL_BLEND);
@@ -656,7 +683,7 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
if (is_inside) {
/* highlight if mouse is inside */
- UI_GetThemeColorShade3fv(TH_PANEL_HEADER, 5, col);
+ UI_GetThemeColorShade3fv(TH_PANEL_HEADER, 7, col);
}
else {
UI_GetThemeColor3fv(TH_PANEL_HEADER, col);
@@ -692,24 +719,22 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
#endif
{
glEnable(GL_BLEND);
- UI_icon_draw_aspect(headrect.xmax - ((PNL_ICON * 2.2f) / block->aspect), headrect.ymin + (5.0f / block->aspect),
+ UI_icon_draw_aspect(headrect.xmax - ((PNL_ICON * 1.8f) / block->aspect), headrect.ymin + (5.0f / block->aspect),
(panel->flag & PNL_PIN) ? ICON_PINNED : ICON_UNPINNED,
(block->aspect / UI_DPI_FAC), 1.0f);
glDisable(GL_BLEND);
}
- /* horizontal title */
if (is_closed_x == false) {
+ /* horizontal title */
ui_draw_aligned_panel_header(style, block, &headrect, 'h');
+ /* drag widget */
if (is_inside) {
- /* itemrect smaller */
- itemrect.xmax = headrect.xmax - 5.0f / block->aspect;
- itemrect.xmin = itemrect.xmax - BLI_rcti_size_y(&headrect);
- itemrect.ymin = headrect.ymin;
- itemrect.ymax = headrect.ymax;
+ BLI_rctf_rcti_copy(&itemrect, &headrect);
+ /* itemrect smaller */
+ itemrect.xmin = itemrec
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list