Finished themes for transparent Button regions in Blender.

Notes and image:
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.66/Usability

- now each editor has own settings for "show panel header" and
  "show panel background", and colors+alpha for this.

- this setting used to be global for all editors, but it can conflict
  with looks of specific editors. 

- Now you can set for editors to show panels with a 100% transparent
  tool/properties region. 

Note: read XML theme files now might get an error, Campbell will fix.
This commit is contained in:
Ton Roosendaal 2012-12-15 16:22:18 +00:00
parent c26746ccec
commit 695468a3b9
10 changed files with 138 additions and 99 deletions

@ -707,30 +707,6 @@ class USERPREF_PT_theme(Panel):
col.separator()
col.separator()
ui = theme.user_interface.panel
col.label("Panels:")
row = col.row()
subsplit = row.split(percentage=0.95)
padding = subsplit.split(percentage=0.15)
colsub = padding.column()
colsub = padding.column()
rowsub = colsub.row()
rowsub.prop(ui, "show_header")
rowsub.label()
subsplit = row.split(percentage=0.85)
padding = subsplit.split(percentage=0.15)
colsub = padding.column()
colsub = padding.column()
colsub.row().prop(ui, "header")
col.separator()
col.separator()
ui = theme.user_interface
col.label("Axis Colors:")

@ -42,7 +42,7 @@ extern "C" {
* and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */
#define BLENDER_VERSION 265
#define BLENDER_SUBVERSION 1
#define BLENDER_SUBVERSION 2
/* 262 was the last editmesh release but it has compatibility code for bmesh data */
#define BLENDER_MINVERSION 262

@ -403,7 +403,6 @@ void BKE_userdef_free(void)
/* handle changes in settings that need recalc */
void BKE_userdef_state(void)
{
if (U.pixelsize == 0) U.pixelsize = 1;
BLF_default_dpi(U.pixelsize * U.dpi);
U.widget_unit = (U.pixelsize * U.dpi * 20 + 36) / 72;

@ -69,6 +69,13 @@ enum {
TH_PANEL_TEXT,
TH_PANEL_TEXT_HI,
/* panels */
TH_PANEL_HEADER,
TH_PANEL_BACK,
TH_PANEL_SHOW_HEADER,
TH_PANEL_SHOW_BACK,
TH_BUTBACK,
TH_BUTBACK_TEXT,
TH_BUTBACK_TEXT_HI,

@ -499,7 +499,6 @@ static void rectf_scale(rctf *rect, const float scale)
/* panel integrated in buttonswindow, tool/property lists etc */
void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, rcti *rect)
{
bTheme *btheme = UI_GetTheme();
Panel *panel = block->panel;
rcti headrect;
rctf itemrect;
@ -521,10 +520,11 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, rcti *rect)
glEnable(GL_BLEND);
if (btheme->tui.panel.show_header) {
if (UI_GetThemeValue(TH_PANEL_SHOW_HEADER)) {
/* draw with background color */
glEnable(GL_BLEND);
glColor4ubv((unsigned char *)btheme->tui.panel.header);
UI_ThemeColor4(TH_PANEL_HEADER);
glRectf(minx, headrect.ymin + 1, maxx, y);
fdrawline(minx, y, maxx, y);
@ -581,6 +581,14 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, rcti *rect)
uiRoundRect(0.5f + rect->xmin, 0.5f + rect->ymin, 0.5f + rect->xmax, 0.5f + headrect.ymax + 1, 8);
}
/* panel backdrop */
if (UI_GetThemeValue(TH_PANEL_SHOW_BACK)) {
/* draw with background color */
glEnable(GL_BLEND);
UI_ThemeColor4(TH_PANEL_BACK);
glRecti(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
}
if (panel->control & UI_PNL_SCALE)
ui_draw_panel_scalewidget(rect);
}

@ -86,7 +86,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
static char error[4] = {240, 0, 240, 255};
static char alert[4] = {240, 60, 60, 255};
static char headerdesel[4] = {0, 0, 0, 255};
static char setting = 0;
const char *cp = error;
if (btheme) {
@ -216,13 +216,19 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
case TH_HEADER_TEXT_HI:
cp = ts->header_text_hi; break;
case TH_PANEL:
cp = ts->panel; break;
case TH_PANEL_TEXT:
cp = ts->panel_text; break;
case TH_PANEL_TEXT_HI:
cp = ts->panel_text_hi; break;
case TH_PANEL_HEADER:
cp = ts->panelcolors.header; break;
case TH_PANEL_BACK:
cp = ts->panelcolors.back; break;
case TH_PANEL_SHOW_HEADER:
cp = &setting;
setting = ts->panelcolors.show_header;
break;
case TH_PANEL_SHOW_BACK:
cp = &setting;
setting = ts->panelcolors.show_back;
break;
case TH_BUTBACK:
cp = ts->button; break;
case TH_BUTBACK_TEXT:
@ -603,9 +609,9 @@ static void ui_theme_init_new_do(ThemeSpace *ts)
rgba_char_args_test_set(ts->header_title, 0, 0, 0, 255);
rgba_char_args_test_set(ts->header_text_hi, 255, 255, 255, 255);
rgba_char_args_test_set(ts->panel_text, 0, 0, 0, 255);
rgba_char_args_test_set(ts->panel_title, 0, 0, 0, 255);
rgba_char_args_test_set(ts->panel_text_hi, 255, 255, 255, 255);
// rgba_char_args_test_set(ts->panel_text, 0, 0, 0, 255);
// rgba_char_args_test_set(ts->panel_title, 0, 0, 0, 255);
// rgba_char_args_test_set(ts->panel_text_hi, 255, 255, 255, 255);
rgba_char_args_test_set(ts->button, 145, 145, 145, 245);
rgba_char_args_test_set(ts->button_title, 0, 0, 0, 255);
@ -684,7 +690,7 @@ void ui_theme_init_default(void)
rgba_char_args_set_fl(btheme->tv3d.header, 0.45, 0.45, 0.45, 1.0);
rgba_char_args_set_fl(btheme->tv3d.button, 0.45, 0.45, 0.45, 0.5);
rgba_char_args_set(btheme->tv3d.panel, 165, 165, 165, 127);
// rgba_char_args_set(btheme->tv3d.panel, 165, 165, 165, 127);
rgba_char_args_set(btheme->tv3d.shade1, 160, 160, 160, 100);
rgba_char_args_set(btheme->tv3d.shade2, 0x7f, 0x70, 0x70, 100);
@ -763,14 +769,14 @@ void ui_theme_init_default(void)
btheme->tbuts = btheme->tv3d;
rgba_char_args_set_fl(btheme->tbuts.back, 0.45, 0.45, 0.45, 1.0);
rgba_char_args_set(btheme->tbuts.panel, 0x82, 0x82, 0x82, 255);
// rgba_char_args_set(btheme->tbuts.panel, 0x82, 0x82, 0x82, 255);
/* graph editor */
btheme->tipo = btheme->tv3d;
rgba_char_args_set_fl(btheme->tipo.back, 0.42, 0.42, 0.42, 1.0);
rgba_char_args_set_fl(btheme->tipo.list, 0.4, 0.4, 0.4, 1.0);
rgba_char_args_set(btheme->tipo.grid, 94, 94, 94, 255);
rgba_char_args_set(btheme->tipo.panel, 255, 255, 255, 150);
// rgba_char_args_set(btheme->tipo.panel, 255, 255, 255, 150);
rgba_char_args_set(btheme->tipo.shade1, 150, 150, 150, 100); /* scrollbars */
rgba_char_args_set(btheme->tipo.shade2, 0x70, 0x70, 0x70, 100);
rgba_char_args_set(btheme->tipo.vertex, 0, 0, 0, 255);
@ -816,11 +822,11 @@ void ui_theme_init_default(void)
/* to have something initialized */
btheme->tfile = btheme->tv3d;
rgba_char_args_set_fl(btheme->tfile.back, 0.3, 0.3, 0.3, 1);
rgba_char_args_set_fl(btheme->tfile.panel, 0.3, 0.3, 0.3, 1);
// rgba_char_args_set_fl(btheme->tfile.panel, 0.3, 0.3, 0.3, 1);
rgba_char_args_set_fl(btheme->tfile.list, 0.4, 0.4, 0.4, 1);
rgba_char_args_set(btheme->tfile.text, 250, 250, 250, 255);
rgba_char_args_set(btheme->tfile.text_hi, 15, 15, 15, 255);
rgba_char_args_set(btheme->tfile.panel, 145, 145, 145, 255); /* bookmark/ui regions */
// rgba_char_args_set(btheme->tfile.panel, 145, 145, 145, 255); /* bookmark/ui regions */
rgba_char_args_set(btheme->tfile.active, 130, 130, 130, 255); /* selected files */
rgba_char_args_set(btheme->tfile.hilite, 255, 140, 25, 255); /* selected files */
@ -2024,6 +2030,38 @@ void init_userdef_do_versions(void)
}
}
}
/* panel header/backdrop supported locally per editor now */
if (bmain->versionfile < 265 || (bmain->versionfile == 265 && bmain->subversionfile < 2)) {
bTheme *btheme;
for (btheme = U.themes.first; btheme; btheme = btheme->next) {
/* new color, panel backdrop. Not used anywhere yet, until you enable it */
copy_v3_v3_char(btheme->tui.panel.back, btheme->tbuts.button);
btheme->tui.panel.back[3] = 128;
btheme->tbuts.panelcolors = btheme->tui.panel;
btheme->tv3d.panelcolors = btheme->tui.panel;
btheme->tfile.panelcolors = btheme->tui.panel;
btheme->tipo.panelcolors = btheme->tui.panel;
btheme->tinfo.panelcolors = btheme->tui.panel;
btheme->tact.panelcolors = btheme->tui.panel;
btheme->tnla.panelcolors = btheme->tui.panel;
btheme->tseq.panelcolors = btheme->tui.panel;
btheme->tima.panelcolors = btheme->tui.panel;
btheme->text.panelcolors = btheme->tui.panel;
btheme->toops.panelcolors = btheme->tui.panel;
btheme->ttime.panelcolors = btheme->tui.panel;
btheme->tnode.panelcolors = btheme->tui.panel;
btheme->tlogic.panelcolors = btheme->tui.panel;
btheme->tuserpref.panelcolors = btheme->tui.panel;
btheme->tconsole.panelcolors = btheme->tui.panel;
btheme->tclip.panelcolors = btheme->tui.panel;
}
}
if (U.pixelsize == 0.0f)
U.pixelsize = 1.0f;

@ -1021,11 +1021,8 @@ static int area_move_init(bContext *C, wmOperator *op)
select_connected_scredge(sc, actedge);
/* now all vertices with 'flag==1' are the ones that can be moved. Move this to editflag */
for (v1 = sc->vertbase.first; v1; v1 = v1->next) {
v1->editflag = 0;
if (v1->flag)
v1->editflag = 1;
}
for (v1 = sc->vertbase.first; v1; v1 = v1->next)
v1->editflag = v1->flag;
area_move_set_limits(sc, md->dir, &md->bigger, &md->smaller);

@ -533,7 +533,7 @@ static void file_ui_area_draw(const bContext *C, ARegion *ar)
{
float col[3];
/* clear */
UI_GetThemeColor3fv(TH_PANEL, col);
UI_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);

@ -143,8 +143,10 @@ typedef struct uiWidgetStateColors {
typedef struct uiPanelColors {
char header[4];
char back[4];
short show_header;
short pad;
short show_back;
int pad;
} uiPanelColors;
typedef struct ThemeUI {
@ -157,7 +159,7 @@ typedef struct ThemeUI {
uiWidgetStateColors wcol_state;
uiPanelColors panel;
uiPanelColors panel; /* depricated, but we keep it for do_versions (2.66.1) */
char iconfile[256]; // FILE_MAXFILE length
float icon_alpha;
@ -172,33 +174,36 @@ typedef struct ThemeUI {
typedef struct ThemeSpace {
/* main window colors */
char back[4];
char title[4];
char title[4]; /* panel title */
char text[4];
char text_hi[4];
/* header colors */
char header[4];
char header_title[4];
char header[4]; /* region background */
char header_title[4]; /* unused */
char header_text[4];
char header_text_hi[4];
/* button/tool regions */
char button[4];
char button_title[4];
char button[4]; /* region background */
char button_title[4]; /* panel title */
char button_text[4];
char button_text_hi[4];
/* listview regions */
char list[4];
char list_title[4];
char list[4]; /* region background */
char list_title[4]; /* panel title */
char list_text[4];
char list_text_hi[4];
/* float panel */
char panel[4];
char panel_title[4];
char panel_text[4];
char panel_text_hi[4];
/* char panel[4]; unused */
/* char panel_title[4]; unused */
/* char panel_text[4]; unused */
/* char panel_text_hi[4]; unused */
/* note, cannot use name 'panel' because of DNA mapping old files */
uiPanelColors panelcolors;
char shade1[4];
char shade2[4];

@ -504,12 +504,12 @@ static void rna_def_userdef_theme_ui_style(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Panel Zoom", "Default zoom level for panel areas");
#endif
prop = RNA_def_property(srna, "panel_title", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "paneltitle");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
RNA_def_property_ui_text(prop, "Panel Style", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
// prop = RNA_def_property(srna, "panel_title", PROP_POINTER, PROP_NONE);
// RNA_def_property_flag(prop, PROP_NEVER_NULL);
// RNA_def_property_pointer_sdna(prop, NULL, "paneltitle");
// RNA_def_property_struct_type(prop, "ThemeFontStyle");
// RNA_def_property_ui_text(prop, "Panel Style", "");
// RNA_def_property_update(prop, 0, "rna_userdef_update");
/* (not used yet) */
#if 0
@ -650,10 +650,18 @@ static void rna_def_userdef_theme_ui_panel(BlenderRNA *brna)
prop = RNA_def_property(srna, "header", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_ui_text(prop, "Header", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "back", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_ui_text(prop, "Background", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "show_header", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Show Header", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "show_back", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Show Background", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
}
static void rna_def_userdef_theme_ui(BlenderRNA *brna)
@ -759,11 +767,6 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "State Colors", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "panel", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_ui_text(prop, "Panel Colors", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "icon_file", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "iconfile");
RNA_def_property_ui_text(prop, "Icon File", "");
@ -839,6 +842,12 @@ static void rna_def_userdef_theme_space_generic(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Header Text Highlight", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
/* panel settings */
prop = RNA_def_property(srna, "panelcolors", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_ui_text(prop, "Panel Colors", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
/* buttons */
/* if (! ELEM(spacetype, SPACE_BUTS, SPACE_OUTLINER)) { */
prop = RNA_def_property(srna, "button", PROP_FLOAT, PROP_COLOR_GAMMA);
@ -1116,10 +1125,10 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Grid", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Panel", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
// prop = RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
// RNA_def_property_array(prop, 4);
// RNA_def_property_ui_text(prop, "Panel", "");
// RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "wire", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
@ -1275,10 +1284,10 @@ static void rna_def_userdef_theme_space_graph(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Grid", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Panel", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
// prop = RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
// RNA_def_property_array(prop, 3);
// RNA_def_property_ui_text(prop, "Panel", "");
// RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "window_sliders", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, NULL, "shade1");
@ -1362,11 +1371,11 @@ static void rna_def_userdef_theme_space_file(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Selected File", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "tiles", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, NULL, "panel");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Tiles", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
// prop = RNA_def_property(srna, "tiles", PROP_FLOAT, PROP_COLOR_GAMMA);
// RNA_def_property_float_sdna(prop, NULL, "panel");
// RNA_def_property_array(prop, 3);
// RNA_def_property_ui_text(prop, "Tiles", "");
// RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "scrollbar", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, NULL, "shade1");
@ -1656,7 +1665,7 @@ static void rna_def_userdef_theme_space_node(BlenderRNA *brna)
static void rna_def_userdef_theme_space_logic(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
// PropertyRNA *prop;
/* space_logic */
@ -1667,17 +1676,17 @@ static void rna_def_userdef_theme_space_logic(BlenderRNA *brna)
rna_def_userdef_theme_spaces_main(srna);
prop = RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Panel", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
// prop = RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
// RNA_def_property_array(prop, 3);
// RNA_def_property_ui_text(prop, "Panel", "");
// RNA_def_property_update(prop, 0, "rna_userdef_update");
}
static void rna_def_userdef_theme_space_buts(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
// PropertyRNA *prop;
/* space_buts */
@ -1688,10 +1697,10 @@ static void rna_def_userdef_theme_space_buts(BlenderRNA *brna)
rna_def_userdef_theme_spaces_main(srna);
prop = RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Panel", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
// prop = RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
// RNA_def_property_array(prop, 3);
// RNA_def_property_ui_text(prop, "Panel", "");
// RNA_def_property_update(prop, 0, "rna_userdef_update");
}
static void rna_def_userdef_theme_space_time(BlenderRNA *brna)