Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2009-04-27 17:44:11 +0400
committerTon Roosendaal <ton@blender.org>2009-04-27 17:44:11 +0400
commit9b82d1474ff29a5ff246b53e75f12319a58bcdff (patch)
tree01e65fa09f6d6f06fade5a678f8f8061c407e653 /source/blender/editors
parent1d3c2b83a1ef5bcd002d3279f130a2475e2c0181 (diff)
2.5
Summary of ain features: - Themes and Styles are now editable. - CTRL+U "Save user defaults" now goes to new .B25.blend, so you can use 2.4x and 2.5x next to each other. If B25 doesn't exist, it reads the regular .B.blend - Press Tkey in 3d window for (unfinished) toolbar WIP. It now only shows the last operator, if appropriate. Nkey properties moved to the other side. A lot of work was done on removing old themes for good and properly getting it work with the 2.5 region system. Here's some notes; - Buttons now all have a complete set of colors, based on button classifications (See outliner -> user prefs -> Interface - Theme colors have been extended with basic colors for region types. Currently colors are defined for Window, Header, List/Channels and for Button/Tool views. The screen manager handles this btw, so a TH_BACK will always pick the right backdrop color. - Menu backdrops are in in Button theme colors. Floating Panels will be in the per-space type Themes. - Styles were added in RNA too, but only for the font settings now. Only Panel font, widget font and widget-label work now. The 'group label' will be for templates mostly. Style settings will be expanded with spacing defaults, label conventions, etc. - Label text colors are stored in per-space Theme too, to make sure they fit. Same goes for Panel title color. Note that 'shadow' for fonts can conflict with text colors; shadow color is currently stored in Style... shadow code needs a bit of work still.
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/include/UI_interface.h1
-rw-r--r--source/blender/editors/include/UI_resources.h49
-rw-r--r--source/blender/editors/interface/interface.c17
-rw-r--r--source/blender/editors/interface/interface_draw.c65
-rw-r--r--source/blender/editors/interface/interface_intern.h19
-rw-r--r--source/blender/editors/interface/interface_layout.c2
-rw-r--r--source/blender/editors/interface/interface_panel.c15
-rw-r--r--source/blender/editors/interface/interface_utils.c41
-rw-r--r--source/blender/editors/interface/interface_widgets.c396
-rw-r--r--source/blender/editors/interface/resources.c765
-rw-r--r--source/blender/editors/screen/area.c75
-rw-r--r--source/blender/editors/space_action/action_draw.c2
-rw-r--r--source/blender/editors/space_graph/space_graph.c4
-rw-r--r--source/blender/editors/space_node/space_node.c2
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c78
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c1
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h6
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c5
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c8
19 files changed, 982 insertions, 569 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index c491dee6ba6..ea1a8efe9fc 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -589,6 +589,7 @@ void uiRegionHeaderLayout(const struct bContext *C, struct ARegion *ar);
void uiAnimContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index);
+
/* Styled text draw */
void uiStyleFontSet(struct uiFontStyle *fs);
void uiStyleFontDraw(struct uiFontStyle *fs, struct rcti *rect, char *str);
diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h
index c1b009fffac..1315e22133b 100644
--- a/source/blender/editors/include/UI_resources.h
+++ b/source/blender/editors/include/UI_resources.h
@@ -794,45 +794,31 @@ typedef enum {
} BIFColorID;
-/* XXX WARNING: this is saved in file, so do not change order! */
enum {
- TH_AUTO, /* for buttons, to signal automatic color assignment */
-
-// uibutton colors
- TH_BUT_OUTLINE,
- TH_BUT_NEUTRAL,
- TH_BUT_ACTION,
- TH_BUT_SETTING,
- TH_BUT_SETTING1,
- TH_BUT_SETTING2,
- TH_BUT_NUM,
- TH_BUT_TEXTFIELD,
- TH_BUT_POPUP,
- TH_BUT_TEXT,
- TH_BUT_TEXT_HI,
- TH_MENU_BACK,
- TH_MENU_ITEM,
- TH_MENU_HILITE,
- TH_MENU_TEXT,
- TH_MENU_TEXT_HI,
-
- TH_BUT_DRAWTYPE,
-
TH_REDALERT,
- TH_CUSTOM,
-
- TH_BUT_TEXTFIELD_HI,
- TH_ICONFILE,
-
+
TH_THEMEUI,
// common colors among spaces
TH_BACK,
TH_TEXT,
TH_TEXT_HI,
+ TH_TITLE,
+
TH_HEADER,
TH_HEADERDESEL,
+ TH_HEADER_TEXT,
+ TH_HEADER_TEXT_HI,
+
+ /* float panels */
TH_PANEL,
+ TH_PANEL_TEXT,
+ TH_PANEL_TEXT_HI,
+
+ TH_BUTBACK,
+ TH_BUTBACK_TEXT,
+ TH_BUTBACK_TEXT_HI,
+
TH_SHADE1,
TH_SHADE2,
TH_HILITE,
@@ -947,13 +933,8 @@ void UI_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, in
// get pointer from RNA pointer
int UI_GetIconRNA(struct PointerRNA *ptr);
-struct ScrArea;
-
// internal (blender) usage only, for init and set active
-void UI_SetTheme(struct ScrArea *sa);
-void ui_theme_init_userdef (void);
-void ui_resources_init (void);
-void ui_resources_free (void);
+void UI_SetTheme(int spacetype, int regionid);
/* only for buttons in theme editor! */
char *UI_ThemeGetColorPtr(struct bTheme *btheme, int spacetype, int colorid);
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 221ad23a846..22ecd8ee2f8 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -650,7 +650,7 @@ void uiDrawBlock(const bContext *C, uiBlock *block)
if(block->flag & UI_BLOCK_LOOP)
ui_draw_menu_back(&style, block, &rect);
else if(block->panel)
- ui_draw_panel(ar, &style, block, &rect);
+ ui_draw_aligned_panel(ar, &style, block, &rect);
if(block->drawextra) block->drawextra(C, block);
@@ -1970,12 +1970,6 @@ void uiBlockEndAlign(uiBlock *block)
{
uiBut *prev, *but=NULL, *next;
int flag= 0, cols=0, rows=0;
- int theme= UI_GetThemeValue(TH_BUT_DRAWTYPE);
-
- if ( !(ELEM4(theme, TH_MINIMAL, TH_SHADED, TH_ROUNDED, TH_ROUNDSHADED)) ) {
- block->flag &= ~UI_BUT_ALIGN; // all 4 flags
- return;
- }
/* auto align:
- go back to first button of align start (ALIGN_DOWN)
@@ -3052,10 +3046,15 @@ void UI_init(void)
ui_resources_init();
}
-void UI_init_userdef()
+/* after reading userdef file */
+void UI_init_userdef(void)
{
- uiStyleInit();
+ /* fix saved themes */
+ init_userdef_do_versions();
+ /* set default colors in default theme */
ui_theme_init_userdef();
+
+ uiStyleInit();
}
void UI_exit(void)
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 153db7aa77d..8be2084ab01 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -61,10 +61,7 @@ void uiSetRoundBox(int type)
/* Not sure the roundbox function is the best place to change this
* if this is undone, its not that big a deal, only makes curves edges
* square for the */
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) == TH_MINIMAL)
- roundboxtype= 0;
- else
- roundboxtype= type;
+ roundboxtype= type;
/* flags to set which corners will become rounded:
@@ -77,10 +74,7 @@ void uiSetRoundBox(int type)
int uiGetRoundBox(void)
{
- if (ELEM3(UI_GetThemeValue(TH_BUT_DRAWTYPE), TH_MINIMAL, TH_SHADED, TH_OLDSKOOL))
- return 0;
- else
- return roundboxtype;
+ return roundboxtype;
}
void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad)
@@ -176,10 +170,8 @@ void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy
coldown[1]= color[1]+shadedown; if(coldown[1]<0.0) coldown[1]= 0.0;
coldown[2]= color[2]+shadedown; if(coldown[2]<0.0) coldown[2]= 0.0;
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glShadeModel(GL_SMOOTH);
- glBegin(mode);
- }
+ glShadeModel(GL_SMOOTH);
+ glBegin(mode);
/* start with corner right-bottom */
if(roundboxtype & 4) {
@@ -285,10 +277,8 @@ void gl_round_box_vertical_shade(int mode, float minx, float miny, float maxx, f
colRight[1]= color[1]+shadeRight; if(colRight[1]<0.0) colRight[1]= 0.0;
colRight[2]= color[2]+shadeRight; if(colRight[2]<0.0) colRight[2]= 0.0;
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glShadeModel(GL_SMOOTH);
- glBegin(mode);
- }
+ glShadeModel(GL_SMOOTH);
+ glBegin(mode);
/* start with corner right-bottom */
if(roundboxtype & 4) {
@@ -379,10 +369,8 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad)
}
/* set antialias line */
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- }
+ glEnable( GL_LINE_SMOOTH );
+ glEnable( GL_BLEND );
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
@@ -435,10 +423,8 @@ void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad)
gl_round_box(GL_POLYGON, minx, miny, maxx, maxy, rad);
/* set antialias line */
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- }
+ glEnable( GL_LINE_SMOOTH );
+ glEnable( GL_BLEND );
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
@@ -663,7 +649,7 @@ static void ui_draw_but_CHARTAB(uiBut *but)
#endif // INTERNATIONAL
#endif
-void ui_draw_but_COLORBAND(uiBut *but, rcti *rect)
+void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
{
ColorBand *coba;
CBData *cbd;
@@ -790,7 +776,7 @@ void ui_draw_but_COLORBAND(uiBut *but, rcti *rect)
glEnd();
}
-void ui_draw_but_NORMAL(uiBut *but, rcti *rect)
+void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect)
{
static GLuint displist=0;
int a, old[8];
@@ -802,7 +788,7 @@ void ui_draw_but_NORMAL(uiBut *but, rcti *rect)
glGetMaterialfv(GL_FRONT, GL_DIFFUSE, diff);
/* backdrop */
- UI_ThemeColor(TH_BUT_NEUTRAL);
+ glColor3ubv(wcol->inner);
uiSetRoundBox(15);
gl_round_box(GL_POLYGON, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f);
@@ -892,7 +878,14 @@ static void ui_draw_but_curve_grid(rcti *rect, float zoomx, float zoomy, float o
}
-void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect)
+static void glColor3ubvShade(char *col, int shade)
+{
+ glColor3ub(col[0]-shade>0?col[0]-shade:0,
+ col[1]-shade>0?col[1]-shade:0,
+ col[2]-shade>0?col[2]-shade:0);
+}
+
+void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect)
{
CurveMapping *cumap;
CurveMap *cuma;
@@ -916,27 +909,27 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect)
/* backdrop */
if(cumap->flag & CUMA_DO_CLIP) {
- UI_ThemeColorShade(TH_BUT_NEUTRAL, -20);
+ glColor3ubvShade(wcol->inner, -20);
glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
- UI_ThemeColor(TH_BUT_NEUTRAL);
+ glColor3ubv(wcol->inner);
glRectf(rect->xmin + zoomx*(cumap->clipr.xmin-offsx),
rect->ymin + zoomy*(cumap->clipr.ymin-offsy),
rect->xmin + zoomx*(cumap->clipr.xmax-offsx),
rect->ymin + zoomy*(cumap->clipr.ymax-offsy));
}
else {
- UI_ThemeColor(TH_BUT_NEUTRAL);
+ glColor3ubv(wcol->inner);
glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
}
/* grid, every .25 step */
- UI_ThemeColorShade(TH_BUT_NEUTRAL, -16);
+ glColor3ubvShade(wcol->inner, -16);
ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 0.25f);
/* grid, every 1.0 step */
- UI_ThemeColorShade(TH_BUT_NEUTRAL, -24);
+ glColor3ubvShade(wcol->inner, -24);
ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 1.0f);
/* axes */
- UI_ThemeColorShade(TH_BUT_NEUTRAL, -50);
+ glColor3ubvShade(wcol->inner, -50);
glBegin(GL_LINES);
glVertex2f(rect->xmin, rect->ymin + zoomy*(-offsy));
glVertex2f(rect->xmax, rect->ymin + zoomy*(-offsy));
@@ -981,7 +974,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect)
}*/
/* the curve */
- UI_ThemeColorBlend(TH_TEXT, TH_BUT_NEUTRAL, 0.35);
+ glColor3ubv(wcol->item);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
glBegin(GL_LINE_STRIP);
@@ -1035,7 +1028,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect)
glScissor(scissor[0], scissor[1], scissor[2], scissor[3]);
/* outline */
- UI_ThemeColor(TH_BUT_OUTLINE);
+ glColor3ubv(wcol->outline);
fdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
}
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 06041dc202e..8aaec7f31b0 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -40,6 +40,7 @@ struct uiHandleButtonData;
struct wmEvent;
struct wmWindow;
struct uiStyle;
+struct uiWidgetColors;
/* ****************** general defines ************** */
@@ -47,6 +48,7 @@ struct uiStyle;
/* for time being separated from functional types */
typedef enum {
/* standard set */
+ UI_WTYPE_LABEL,
UI_WTYPE_TOGGLE,
UI_WTYPE_OPTION,
UI_WTYPE_RADIO,
@@ -353,7 +355,7 @@ void autocomplete_end(struct AutoComplete *autocpl, char *autoname);
/* interface_panel.c */
extern int ui_handler_panel_region(struct bContext *C, struct wmEvent *event);
-extern void ui_draw_panel(struct ARegion *ar, struct uiStyle *style, uiBlock *block, rcti *rect);
+extern void ui_draw_aligned_panel(struct ARegion *ar, struct uiStyle *style, uiBlock *block, rcti *rect);
/* interface_draw.c */
extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select);
@@ -362,9 +364,9 @@ extern void gl_round_box(int mode, float minx, float miny, float maxx, float max
extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
extern void gl_round_box_vertical_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight);
-void ui_draw_but_COLORBAND(uiBut *but, rcti *rect);
-void ui_draw_but_NORMAL(uiBut *but, rcti *rect);
-void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect);
+void ui_draw_but_COLORBAND(uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
+void ui_draw_but_NORMAL(uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
+void ui_draw_but_CURVE(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
/* interface_handlers.c */
@@ -374,11 +376,20 @@ extern void ui_button_active_cancel(const struct bContext *C, uiBut *but);
void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3);
void ui_draw_menu_back(struct uiStyle *style, uiBlock *block, rcti *rect);
extern void ui_draw_but(ARegion *ar, struct uiStyle *style, uiBut *but, rcti *rect);
+ /* theme color init */
+struct ThemeUI;
+void ui_widget_color_init(struct ThemeUI *tui);
/* interface_style.c */
void uiStyleInit(void);
void uiStyleExit(void);
+/* resources.c */
+void init_userdef_do_versions(void);
+void ui_theme_init_userdef(void);
+void ui_resources_init(void);
+void ui_resources_free(void);
+
/* interface_anim.c */
void ui_but_anim_flag(uiBut *but, float cfra);
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 56acd755205..f9e08d29370 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -1722,7 +1722,7 @@ void uiRegionPanelLayout(const bContext *C, ARegion *ar, int vertical, char *con
// XXX this only hides cruft
/* clear */
- UI_GetThemeColor3fv(TH_HEADER, col);
+ UI_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 7d1f8d59552..9f86917217c 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -575,7 +575,6 @@ 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_ThemeColor(TH_TEXT_HI);
ui_draw_anti_x(x, y, x+9.375, y+9.375);
@@ -634,7 +633,7 @@ static void ui_draw_panel_dragwidget(rctf *rect)
}
-static void ui_draw_panel_header_style(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
+static void ui_draw_aligned_panel_header(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
{
Panel *panel= block->panel;
Panel *pa;
@@ -657,7 +656,7 @@ static void ui_draw_panel_header_style(ARegion *ar, uiStyle *style, uiBlock *blo
/* active tab */
/* draw text label */
- UI_ThemeColor(TH_TEXT);
+ UI_ThemeColor(TH_TITLE);
hrect= *rect;
hrect.xmin= rect->xmin+pnl_icons;
@@ -674,7 +673,7 @@ static void ui_draw_panel_header_style(ARegion *ar, uiStyle *style, uiBlock *blo
if((pa->runtime_flag & PNL_ACTIVE) && (pa==panel || pa->paneltab==panel)) {
float col[3];
- UI_GetThemeColor3fv(TH_TEXT, col);
+ UI_GetThemeColor3fv(TH_TITLE, col);
/* active tab */
if(pa==panel)
@@ -705,7 +704,8 @@ static void rectf_scale(rctf *rect, float scale)
rect->ymax= centy + sizey;
}
-void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
+/* panel integrated in buttonswindow, tool/property lists etc */
+void ui_draw_aligned_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
{
Panel *panel= block->panel, *prev;
rcti headrect;
@@ -741,7 +741,7 @@ void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
/* title */
if(!(panel->flag & PNL_CLOSEDX)) {
- ui_draw_panel_header_style(ar, style, block, &headrect);
+ ui_draw_aligned_panel_header(ar, style, block, &headrect);
/* itemrect smaller */
itemrect.xmax= headrect.xmax - 10.0f/block->aspect;
@@ -776,7 +776,7 @@ void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
if(panel->control & UI_PNL_SOLID) uiSetRoundBox(15);
else uiSetRoundBox(3);
- UI_ThemeColorShade(TH_HEADER, -120);
+ UI_ThemeColorShade(TH_BACK, -120);
uiRoundRect(rect->xmin, rect->ymin, rect->xmax, headrect.ymax+1, 8);
}
if(panel->flag & PNL_OVERLAP) {
@@ -796,6 +796,7 @@ void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
ofsx= 6;
if(panel->control & UI_PNL_CLOSE) {
+ UI_ThemeColor(TH_TEXT);
ui_draw_x_icon(rect->xmin+2+ofsx, rect->ymax+2);
ofsx= 22;
}
diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c
index 3bb7581b16c..67cca059d77 100644
--- a/source/blender/editors/interface/interface_utils.c
+++ b/source/blender/editors/interface/interface_utils.c
@@ -55,6 +55,8 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "interface_intern.h"
+
#define DEF_BUT_WIDTH 150
#define DEF_ICON_BUT_WIDTH 20
#define DEF_BUT_HEIGHT 20
@@ -326,6 +328,45 @@ int uiDefAutoButsRNA(const bContext *C, uiBlock *block, PointerRNA *ptr)
return -y;
}
+/* temp call, single collumn, test for toolbar only */
+int uiDefAutoButsRNA_single(const bContext *C, uiBlock *block, PointerRNA *ptr)
+{
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop, *prop;
+ uiLayout *layout;
+ char *name;
+ int x= 0, y= 0;
+
+ layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, x, y, block->panel->sizex, 20);
+
+ uiLayoutColumn(layout);
+ uiItemL(layout, (char*)RNA_struct_ui_name(ptr->type), 0);
+
+ iterprop= RNA_struct_iterator_property(ptr->type);
+ RNA_property_collection_begin(ptr, iterprop, &iter);
+
+ for(; iter.valid; RNA_property_collection_next(&iter)) {
+ prop= iter.ptr.data;
+
+ if(strcmp(RNA_property_identifier(prop), "rna_type") == 0)
+ continue;
+
+ uiLayoutSplit(layout, 1, 0);
+ uiLayoutColumn(uiLayoutSub(layout, 0));
+
+ name= (char*)RNA_property_ui_name(prop);
+ uiItemL(uiLayoutSub(layout, 0), name, 0);
+
+ uiItemFullR(uiLayoutSub(layout, 0), "", 0, ptr, prop, -1, 0, 0);
+ }
+
+ RNA_property_collection_end(&iter);
+ uiLayoutEnd(C, block, layout, &x, &y);
+
+ return -y;
+}
+
+
/***************************** ID Utilities *******************************/
typedef struct uiIDPoinParams {
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index 45faab19dbe..703328345e9 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -85,26 +85,14 @@ typedef struct uiWidgetTrias {
} uiWidgetTrias;
typedef struct uiWidgetStateColors {
- float inner_anim[4];
- float inner_anim_sel[4];
- float inner_key[4];
- float inner_key_sel[4];
- float inner_driven[4];
- float inner_driven_sel[4];
+ char inner_anim[4];
+ char inner_anim_sel[4];
+ char inner_key[4];
+ char inner_key_sel[4];
+ char inner_driven[4];
+ char inner_driven_sel[4];
} uiWidgetStateColors;
-typedef struct uiWidgetColors {
- float outline[3];
- float inner[4];
- float inner_sel[4];
- float item[3];
- float text[3];
- float text_sel[3];
- short shaded;
- float shadetop, shadedown;
-
-} uiWidgetColors;
-
typedef struct uiWidgetBase {
int totvert, halfwayvert;
@@ -133,7 +121,7 @@ typedef struct uiWidgetType {
void (*state)(struct uiWidgetType *, int state);
void (*draw)(uiWidgetColors *, rcti *, int state, int roundboxalign);
void (*custom)(uiBut *, uiWidgetColors *, rcti *, int state, int roundboxalign);
- void (*text)(uiFontStyle *, uiBut *, rcti *, float *col);
+ void (*text)(uiFontStyle *, uiWidgetColors *, uiBut *, rcti *);
} uiWidgetType;
@@ -518,30 +506,34 @@ static void widget_check_trias(uiWidgetTrias *tria, rcti *rect)
/* prepares shade colors */
-static void shadecolors4(float *coltop, float *coldown, float *color, float shadetop, float shadedown)
+static void shadecolors4(char *coltop, char *coldown, char *color, short shadetop, short shadedown)
{
- coltop[0]= CLAMPIS(color[0]+shadetop, 0.0f, 1.0f);
- coltop[1]= CLAMPIS(color[1]+shadetop, 0.0f, 1.0f);
- coltop[2]= CLAMPIS(color[2]+shadetop, 0.0f, 1.0f);
+ coltop[0]= CLAMPIS(color[0]+shadetop, 0, 255);
+ coltop[1]= CLAMPIS(color[1]+shadetop, 0, 255);
+ coltop[2]= CLAMPIS(color[2]+shadetop, 0, 255);
coltop[3]= color[3];
- coldown[0]= CLAMPIS(color[0]+shadedown, 0.0f, 1.0f);
- coldown[1]= CLAMPIS(color[1]+shadedown, 0.0f, 1.0f);
- coldown[2]= CLAMPIS(color[2]+shadedown, 0.0f, 1.0f);
+ coldown[0]= CLAMPIS(color[0]+shadedown, 0, 255);
+ coldown[1]= CLAMPIS(color[1]+shadedown, 0, 255);
+ coldown[2]= CLAMPIS(color[2]+shadedown, 0, 255);
coldown[3]= color[3];
}
-static void round_box_shade_col4(float *col1, float *col2, float fac)
+static void round_box_shade_col4(char *col1, char *col2, float fac)
{
- float col[4];
+ int faci, facm;
+ char col[4];
- col[0]= (fac*col1[0] + (1.0-fac)*col2[0]);
- col[1]= (fac*col1[1] + (1.0-fac)*col2[1]);
- col[2]= (fac*col1[2] + (1.0-fac)*col2[2]);
- col[3]= (fac*col1[3] + (1.0-fac)*col2[3]);
+ faci= floor(255.1f*fac);
+ facm= 255-faci;
- glColor4fv(col);
+ col[0]= (faci*col1[0] + facm*col2[0])>>8;
+ col[1]= (faci*col1[1] + facm*col2[1])>>8;
+ col[2]= (faci*col1[2] + facm*col2[2])>>8;
+ col[3]= (faci*col1[3] + facm*col2[3])>>8;
+
+ glColor4ubv(col);
}
static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
@@ -554,14 +546,14 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
if(wtb->inner) {
if(wcol->shaded==0) {
/* filled center, solid */
- glColor4fv(wcol->inner);
+ glColor4ubv(wcol->inner);
glBegin(GL_POLYGON);
for(a=0; a<wtb->totvert; a++)
glVertex2fv(wtb->inner_v[a]);
glEnd();
}
else {
- float col1[4], col2[4];
+ char col1[4], col2[4];
shadecolors4(col1, col2, wcol->inner, wcol->shadetop, wcol->shadedown);
@@ -582,7 +574,7 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f);
/* outline */
- glColor4f(wcol->outline[0], wcol->outline[1], wcol->outline[2], 0.125);
+ glColor4ub(wcol->outline[0], wcol->outline[1], wcol->outline[2], 32);
glBegin(GL_QUAD_STRIP);
for(a=0; a<wtb->totvert; a++) {
glVertex2fv(wtb->outer_v[a]);
@@ -614,11 +606,11 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f);
if(wtb->tria1.tot) {
- glColor4f(wcol->item[0], wcol->item[1], wcol->item[2], 0.125);
+ glColor4ub(wcol->item[0], wcol->item[1], wcol->item[2], 32);
widget_trias_draw(&wtb->tria1);
}
if(wtb->tria2.tot) {
- glColor4f(wcol->item[0], wcol->item[1], wcol->item[2], 0.125);
+ glColor4ub(wcol->item[0], wcol->item[1], wcol->item[2], 32);
widget_trias_draw(&wtb->tria2);
}
@@ -766,7 +758,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiBut *but, rcti *rect)
}
/* draws text and icons for buttons */
-static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, float *col)
+static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect)
{
short t, pos, ch;
short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw;
@@ -811,7 +803,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, f
but->drawstr[selend_tmp]= ch;
- UI_ThemeColor(TH_BUT_TEXTFIELD_HI);
+ glColor3ubv(wcol->item);
glRects(rect->xmin+selsta_draw+1, rect->ymin+2, rect->xmin+selwidth_draw+1, rect->ymax-2);
}
} else {
@@ -862,7 +854,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, f
else if(but->flag & UI_TEXT_LEFT)
rect->xmin += 5;
- glColor3fv(col);
+ glColor3ubv(wcol->text);
widget_draw_text(fstyle, but, rect);
}
@@ -879,22 +871,22 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, f
/* uiWidgetStateColors
- float inner_anim[4];
- float inner_anim_sel[4];
- float inner_key[4];
- float inner_key_sel[4];
- float inner_driven[4];
- float inner_driven_sel[4];
+ char inner_anim[4];
+ char inner_anim_sel[4];
+ char inner_key[4];
+ char inner_key_sel[4];
+ char inner_driven[4];
+ char inner_driven_sel[4];
*/
static struct uiWidgetStateColors wcol_state= {
- {0.45, 0.75, 0.3f, 1.0f},
- {0.35, 0.65, 0.2f, 1.0f},
- {0.95, 0.9, 0.4f, 1.0f},
- {0.85, 0.8, 0.3f, 1.0f},
- {0.7f, 0.0, 1.0f, 1.0f},
- {0.6f, 0.0, 0.9f, 1.0f}
+ {115, 190, 76, 255},
+ {90, 166, 51, 255},
+ {240, 235, 100, 255},
+ {148, 204, 76, 255},
+ {180, 0, 255, 255},
+ {153, 0, 230, 255}
};
/* uiWidgetColors
@@ -910,153 +902,172 @@ static struct uiWidgetStateColors wcol_state= {
*/
static struct uiWidgetColors wcol_num= {
- {0.1f, 0.1f, 0.1f},
- {0.7f, 0.7f, 0.7f, 1.0f},
- {0.6f, 0.6f, 0.6f, 1.0f},
- {0.35f, 0.35f, 0.35f},
+ {25, 25, 25, 255},
+ {180, 180, 180, 255},
+ {153, 153, 153, 255},
+ {90, 90, 90, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
1,
- -0.08f, 0.0f
+ -20, 0
};
static struct uiWidgetColors wcol_numslider= {
- {0.1f, 0.1f, 0.1f},
- {0.7f, 0.7f, 0.7f, 1.0f},
- {0.6f, 0.6f, 0.6f, 1.0f},
- {0.5f, 0.5f, 0.5f},
+ {25, 25, 25, 255},
+ {180, 180, 180, 255},
+ {153, 153, 153, 255},
+ {128, 128, 128, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
1,
- -0.08f, 0.0f
+ -20, 0
};
static struct uiWidgetColors wcol_text= {
- {0.1f, 0.1f, 0.1f},
- {0.6f, 0.6f, 0.6f, 1.0f},
- {0.6f, 0.6f, 0.6f, 1.0f},
- {0.35f, 0.35f, 0.35f},
+ {25, 25, 25, 255},
+ {153, 153, 153, 255},
+ {153, 153, 153, 255},
+ {90, 90, 90, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
1,
- 0.0f, 0.1f
+ 0, 25
};
static struct uiWidgetColors wcol_option= {
- {0.0f, 0.0f, 0.0f},
- {0.25f, 0.25f, 0.25f, 1.0f},
- {0.25f, 0.25f, 0.25f, 1.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {63, 63, 63, 255},
+ {63, 63, 63, 255},
+ {255, 255, 255, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
1,
- 0.1f, -0.08f
+ 25, -20
};
/* button that shows popup */
static struct uiWidgetColors wcol_menu= {
- {0.0f, 0.0f, 0.0f},
- {0.25f, 0.25f, 0.25f, 1.0f},
- {0.25f, 0.25f, 0.25f, 1.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {63, 63, 63, 255},
+ {63, 63, 63, 255},
+ {255, 255, 255, 255},
- {1.0f, 1.0f, 1.0f},
- {0.8f, 0.8f, 0.8f},
+ {255, 255, 255, 255},
+ {204, 204, 204, 255},
1,
- 0.1f, -0.08f
+ 25, -20
};
/* button that starts pulldown */
static struct uiWidgetColors wcol_pulldown= {
- {0.0f, 0.0f, 0.0f},
- {0.25f, 0.25f, 0.25f, 1.0f},
- {0.18f, 0.48f, 0.85f, 1.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {63, 63, 63, 255},
+ {46, 124, 217, 255},
+ {255, 255, 255, 255},
- {1.0f, 1.0f, 1.0f},
- {0.0f, 0.0f, 0.0f},
+ {255, 255, 255, 255},
+ {0, 0, 0, 255},
0,
- 0.1f, -0.08f
+ 25, -20
};
/* button inside menu */
static struct uiWidgetColors wcol_menu_item= {
- {0.0f, 0.0f, 0.0f},
- {0.0f, 0.0f, 0.0f, 0.3},
- {0.23f, 0.53f, 0.9f, 1.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {0, 0, 0, 76},
+ {59, 135, 230, 255},
+ {255, 255, 255, 255},
- {1.0f, 1.0f, 1.0f},
- {0.0f, 0.0f, 0.0f},
+ {255, 255, 255, 255},
+ {0, 0, 0, 255},
0,
- 0.15f, 0.0f
+ 38, 0
};
/* backdrop menu + title text color */
static struct uiWidgetColors wcol_menu_back= {
- {0.0f, 0.0f, 0.0f},
- {0.0f, 0.0f, 0.0f, 0.6},
- {0.18f, 0.48f, 0.85f, 0.8f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {0, 0, 0, 153},
+ {46, 124, 217, 204},
+ {255, 255, 255, 255},
- {1.0f, 1.0f, 1.0f},
- {0.0f, 0.0f, 0.0f},
+ {255, 255, 255, 255},
+ {0, 0, 0, 255},
0,
- 0.1f, -0.08f
+ 25, -20
};
static struct uiWidgetColors wcol_radio= {
- {0.0f, 0.0f, 0.0f},
- {0.25f, 0.25f, 0.25f, 1.0f},
- {0.34f, 0.5f, 0.76f, 1.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {63, 63, 63, 255},
+ {86, 128, 194, 255},
+ {255, 255, 255, 255},
- {1.0f, 1.0f, 1.0f},
- {0.0f, 0.0f, 0.0f},
+ {255, 255, 255, 255},
+ {0, 0, 0, 255},
1,
- 0.1f, -0.1f
+ 25, -25
};
static struct uiWidgetColors wcol_regular= {
- {0.1f, 0.1f, 0.1f},
- {0.6f, 0.6f, 0.6f, 1.0f},
- {0.4f, 0.4f, 0.4f, 1.0f},
- {0.1f, 0.1f, 0.1f},
+ {25, 25, 25, 255},
+ {153, 153, 153, 255},
+ {100, 100, 100, 255},
+ {25, 25, 25, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
0,
- 0.0f, 0.0f
+ 0, 0
};
-static struct uiWidgetColors wcol_regular_shade= {
- {0.1f, 0.1f, 0.1f},
- {0.6f, 0.6f, 0.6f, 1.0f},
- {0.4f, 0.4f, 0.4f, 1.0f},
- {0.1f, 0.1f, 0.1f},
+static struct uiWidgetColors wcol_tool= {
+ {25, 25, 25, 255},
+ {153, 153, 153, 255},
+ {100, 100, 100, 255},
+ {25, 25, 25, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
1,
- 0.1f, -0.1f
+ 25, -25
};
+/* called for theme init (new theme) and versions */
+void ui_widget_color_init(ThemeUI *tui)
+{
+
+ tui->wcol_regular= wcol_regular;
+ tui->wcol_tool= wcol_tool;
+ tui->wcol_radio= wcol_radio;
+ tui->wcol_text= wcol_text;
+ tui->wcol_option= wcol_option;
+ tui->wcol_num= wcol_num;
+ tui->wcol_numslider= wcol_numslider;
+ tui->wcol_menu= wcol_menu;
+ tui->wcol_pulldown= wcol_pulldown;
+ tui->wcol_menu_back= wcol_menu_back;
+ tui->wcol_menu_item= wcol_menu_item;
+
+ tui->iconfile[0]= 0;
+}
+
/* ************ button callbacks, state ***************** */
/* copy colors from theme, and set changes in it based on state */
@@ -1078,7 +1089,7 @@ static void widget_state(uiWidgetType *wt, int state)
/* only flip shade if it's not "pushed in" already */
if(wt->wcol.shaded && wt->wcol.shadetop>wt->wcol.shadedown) {
- SWAP(float, wt->wcol.shadetop, wt->wcol.shadedown);
+ SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
}
}
else {
@@ -1089,11 +1100,28 @@ static void widget_state(uiWidgetType *wt, int state)
else if(state & UI_BUT_DRIVEN)
QUATCOPY(wt->wcol.inner, wcol_state.inner_driven)
- if(state & UI_ACTIVE) /* mouse over? */
- VecMulf(wt->wcol.inner, 1.1f);
+ if(state & UI_ACTIVE) { /* mouse over? */
+ wt->wcol.inner[0]= wt->wcol.inner[0]>=240? 255 : wt->wcol.inner[0]+15;
+ wt->wcol.inner[1]= wt->wcol.inner[1]>=240? 255 : wt->wcol.inner[1]+15;
+ wt->wcol.inner[2]= wt->wcol.inner[2]>=240? 255 : wt->wcol.inner[2]+15;
+ }
}
}
+/* labels use theme colors for text */
+static void widget_state_label(uiWidgetType *wt, int state)
+{
+ /* call this for option button */
+ widget_state(wt, state);
+
+ if(state & UI_SELECT)
+ UI_GetThemeColor4ubv(TH_TEXT_HI, wt->wcol.text);
+ else
+ UI_GetThemeColor4ubv(TH_TEXT, wt->wcol.text);
+
+}
+
+
/* special case, button that calls pulldown */
static void widget_state_pulldown(uiWidgetType *wt, int state)
{
@@ -1342,7 +1370,8 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s
uiWidgetBase wtb, wtb1;
rcti rect1;
double value;
- float offs, fac, outline[3];
+ float offs, fac;
+ char outline[3];
widget_init(&wtb);
widget_init(&wtb1);
@@ -1368,11 +1397,11 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s
VECCOPY(outline, wcol->outline);
VECCOPY(wcol->outline, wcol->item);
VECCOPY(wcol->inner, wcol->item);
- SWAP(float, wcol->shadetop, wcol->shadedown);
+ SWAP(short, wcol->shadetop, wcol->shadedown);
widgetbase_draw(&wtb1, wcol);
VECCOPY(wcol->outline, outline);
- SWAP(float, wcol->shadetop, wcol->shadedown);
+ SWAP(short, wcol->shadetop, wcol->shadedown);
/* outline */
wtb.outline= 1;
@@ -1384,13 +1413,17 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s
static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
{
uiWidgetBase wtb;
+ float col[4];
widget_init(&wtb);
/* half rounded */
round_box_edges(&wtb, roundboxalign, rect, 4.0f);
- ui_get_but_vectorf(but, wcol->inner);
+ ui_get_but_vectorf(but, col);
+ wcol->inner[0]= FTOCHAR(col[0]);
+ wcol->inner[1]= FTOCHAR(col[1]);
+ wcol->inner[2]= FTOCHAR(col[2]);
widgetbase_draw(&wtb, wcol);
@@ -1545,48 +1578,55 @@ static void widget_disabled(rcti *rect)
static uiWidgetType *widget_type(uiWidgetTypeEnum type)
{
+ bTheme *btheme= U.themes.first;
static uiWidgetType wt;
/* defaults */
- wt.wcol_theme= &wcol_regular;
+ wt.wcol_theme= &btheme->tui.wcol_regular;
wt.state= widget_state;
wt.draw= widget_but;
wt.custom= NULL;
wt.text= widget_draw_text_icon;
switch(type) {
+ case UI_WTYPE_LABEL:
+ wt.draw= NULL;
+ wt.state= widget_state_label;
+ break;
+
case UI_WTYPE_TOGGLE:
break;
case UI_WTYPE_OPTION:
- wt.wcol_theme= &wcol_option;
+ wt.wcol_theme= &btheme->tui.wcol_option;
wt.draw= widget_optionbut;
+ wt.state= widget_state_label;
break;
case UI_WTYPE_RADIO:
- wt.wcol_theme= &wcol_radio;
+ wt.wcol_theme= &btheme->tui.wcol_radio;
wt.draw= widget_radiobut;
break;
case UI_WTYPE_NUMBER:
- wt.wcol_theme= &wcol_num;
+ wt.wcol_theme= &btheme->tui.wcol_num;
wt.draw= widget_numbut;
break;
case UI_WTYPE_SLIDER:
- wt.wcol_theme= &wcol_numslider;
+ wt.wcol_theme= &btheme->tui.wcol_numslider;
wt.custom= widget_numslider;
break;
case UI_WTYPE_EXEC:
- wt.wcol_theme= &wcol_regular_shade;
+ wt.wcol_theme= &btheme->tui.wcol_tool;
wt.draw= widget_roundbut;
break;
/* strings */
case UI_WTYPE_NAME:
- wt.wcol_theme= &wcol_text;
+ wt.wcol_theme= &btheme->tui.wcol_text;
wt.draw= widget_textbut;
break;
@@ -1602,31 +1642,31 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type)
/* start menus */
case UI_WTYPE_MENU_RADIO:
- wt.wcol_theme= &wcol_menu;
+ wt.wcol_theme= &btheme->tui.wcol_menu;
wt.draw= widget_menubut;
break;
case UI_WTYPE_MENU_POINTER_LINK:
- wt.wcol_theme= &wcol_menu;
+ wt.wcol_theme= &btheme->tui.wcol_menu;
wt.draw= widget_menubut;
break;
case UI_WTYPE_PULLDOWN:
- wt.wcol_theme= &wcol_pulldown;
+ wt.wcol_theme= &btheme->tui.wcol_pulldown;
wt.draw= widget_pulldownbut;
wt.state= widget_state_pulldown;
break;
/* in menus */
case UI_WTYPE_MENU_ITEM:
- wt.wcol_theme= &wcol_menu_item;
+ wt.wcol_theme= &btheme->tui.wcol_menu_item;
wt.draw= widget_menu_itembut;
wt.state= widget_state_menu_item;
break;
case UI_WTYPE_MENU_BACK:
- wt.wcol_theme= &wcol_menu_back;
+ wt.wcol_theme= &btheme->tui.wcol_menu_back;
wt.draw= widget_menu_back;
break;
@@ -1698,13 +1738,16 @@ static int widget_roundbox_set(uiBut *but, rcti *rect)
/* conversion from old to new buttons, so still messy */
void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect)
{
+ bTheme *btheme= U.themes.first;
+ ThemeUI *tui= &btheme->tui;
+ uiFontStyle *fstyle= &style->widget;
uiWidgetType *wt= NULL;
/* handle menus seperately */
if(but->dt==UI_EMBOSSP) {
switch (but->type) {
case LABEL:
- widget_draw_text_icon(&style->widgetlabel, but, rect, wcol_menu_back.text);
+ widget_draw_text_icon(&style->widgetlabel, &tui->wcol_menu_back, but, rect);
break;
case SEPR:
break;
@@ -1722,9 +1765,11 @@ void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect)
switch (but->type) {
case LABEL:
if(but->block->flag & UI_BLOCK_LOOP)
- widget_draw_text_icon(&style->widgetlabel, but, rect, wcol_menu_back.text);
- else
- widget_draw_text_icon(&style->widgetlabel, but, rect, wcol_regular.text);
+ widget_draw_text_icon(&style->widgetlabel, &tui->wcol_menu_back, but, rect);
+ else {
+ wt= widget_type(UI_WTYPE_LABEL);
+ fstyle= &style->widgetlabel;
+ }
break;
case SEPR:
break;
@@ -1781,13 +1826,13 @@ void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect)
ui_draw_but_HSVCUBE(but, rect);
break;
case BUT_COLORBAND:
- ui_draw_but_COLORBAND(but, rect);
+ ui_draw_but_COLORBAND(but, &tui->wcol_regular, rect);
break;
case BUT_NORMAL:
- ui_draw_but_NORMAL(but, rect);
+ ui_draw_but_NORMAL(but, &tui->wcol_regular, rect);
break;
case BUT_CURVE:
- ui_draw_but_CURVE(ar, but, rect);
+ ui_draw_but_CURVE(ar, but, &tui->wcol_regular, rect);
break;
default:
@@ -1808,7 +1853,7 @@ void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect)
wt->custom(but, &wt->wcol, rect, state, roundboxalign);
else if(wt->draw)
wt->draw(&wt->wcol, rect, state, roundboxalign);
- wt->text(&style->widget, but, rect, wt->wcol.text);
+ wt->text(fstyle, &wt->wcol, but, rect);
if(state & UI_BUT_DISABLED)
if(but->dt!=UI_EMBOSSP)
@@ -1828,39 +1873,4 @@ void ui_draw_menu_back(uiStyle *style, uiBlock *block, rcti *rect)
}
-/* test function only */
-void drawnewstuff()
-{
- rcti rect;
-
- rect.xmin= 10; rect.xmax= 10+100;
- rect.ymin= -30; rect.ymax= -30+18;
- widget_numbut(&wcol_num, &rect, 0, 15);
-
- rect.xmin= 120; rect.xmax= 120+100;
- rect.ymin= -30; rect.ymax= -30+20;
- widget_numbut(&wcol_num, &rect, 0, 15);
-
- rect.xmin= 10; rect.xmax= 10+100;
- rect.ymin= -60; rect.ymax= -60+20;
- widget_menubut(&wcol_menu, &rect, 0, 15);
-
- rect.xmin= 120; rect.xmax= 120+100;
- widget_but(&wcol_regular, &rect, 0, 15);
-
- rect.xmin= 10; rect.xmax= 10+100;
- rect.ymin= -90; rect.ymax= -90+20;
- widget_radiobut(&wcol_radio, &rect, 1, 9);
-
- rect.xmin= 109; rect.xmax= 110+100;
- rect.ymin= -90; rect.ymax= -90+20;
- widget_radiobut(&wcol_radio, &rect, 0, 6);
-
- rect.xmin= 240; rect.xmax= 240+30;
- rect.ymin= -90; rect.ymax= -90+30;
- widget_roundbut(&wcol_regular_shade, &rect, 0, 15);
-}
-
-
-
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 039ebcc91f9..332705f9066 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -40,30 +40,38 @@
#include "MEM_guardedalloc.h"
+
+#include "DNA_curve_types.h"
#include "DNA_listBase.h"
#include "DNA_userdef_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "BLI_blenlib.h"
+
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
+#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_interface_icons.h"
-//#include "UI_icons.h"
-#include "BLI_blenlib.h"
+#include "interface_intern.h"
/* global for themes */
typedef void (*VectorDrawFunc)(int x, int y, int w, int h, float alpha);
static bTheme *theme_active=NULL;
static int theme_spacetype= SPACE_VIEW3D;
-
+static int theme_regionid= RGN_TYPE_WINDOW;
void ui_resources_init(void)
{
@@ -86,7 +94,6 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
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 custom[4]={0,0,0,255};
char *cp= error;
@@ -96,51 +103,9 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
if(colorid < TH_THEMEUI) {
switch(colorid) {
- case TH_BUT_OUTLINE:
- cp= btheme->tui.outline; break;
- case TH_BUT_NEUTRAL:
- cp= btheme->tui.neutral; break;
- case TH_BUT_ACTION:
- cp= btheme->tui.action; break;
- case TH_BUT_SETTING:
- cp= btheme->tui.setting; break;
- case TH_BUT_SETTING1:
- cp= btheme->tui.setting1; break;
- case TH_BUT_SETTING2:
- cp= btheme->tui.setting2; break;
- case TH_BUT_NUM:
- cp= btheme->tui.num; break;
- case TH_BUT_TEXTFIELD:
- cp= btheme->tui.textfield; break;
- case TH_BUT_TEXTFIELD_HI:
- cp= btheme->tui.textfield_hi; break;
- case TH_BUT_POPUP:
- cp= btheme->tui.popup; break;
- case TH_BUT_TEXT:
- cp= btheme->tui.text; break;
- case TH_BUT_TEXT_HI:
- cp= btheme->tui.text_hi; break;
- case TH_MENU_BACK:
- cp= btheme->tui.menu_back; break;
- case TH_MENU_ITEM:
- cp= btheme->tui.menu_item; break;
- case TH_MENU_HILITE:
- cp= btheme->tui.menu_hilite; break;
- case TH_MENU_TEXT:
- cp= btheme->tui.menu_text; break;
- case TH_MENU_TEXT_HI:
- cp= btheme->tui.menu_text_hi; break;
-
- case TH_BUT_DRAWTYPE:
- cp= &btheme->tui.but_drawtype; break;
- case TH_ICONFILE:
- cp= btheme->tui.iconfile; break;
-
case TH_REDALERT:
cp= alert; break;
- case TH_CUSTOM:
- cp= custom; break;
}
}
else {
@@ -198,11 +163,46 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
switch(colorid) {
case TH_BACK:
- cp= ts->back; break;
+ if(theme_regionid==RGN_TYPE_WINDOW)
+ cp= ts->back;
+ else if(theme_regionid==RGN_TYPE_CHANNELS)
+ cp= ts->list;
+ else if(theme_regionid==RGN_TYPE_HEADER)
+ cp= ts->header;
+ else
+ cp= ts->button;
+ break;
case TH_TEXT:
- cp= ts->text; break;
+ if(theme_regionid==RGN_TYPE_WINDOW)
+ cp= ts->text;
+ else if(theme_regionid==RGN_TYPE_CHANNELS)
+ cp= ts->list_text;
+ else if(theme_regionid==RGN_TYPE_HEADER)
+ cp= ts->header_text;
+ else
+ cp= ts->button_text;
+ break;
case TH_TEXT_HI:
- cp= ts->text_hi; break;
+ if(theme_regionid==RGN_TYPE_WINDOW)
+ cp= ts->text_hi;
+ else if(theme_regionid==RGN_TYPE_CHANNELS)
+ cp= ts->list_text_hi;
+ else if(theme_regionid==RGN_TYPE_HEADER)
+ cp= ts->header_text_hi;
+ else
+ cp= ts->button_text_hi;
+ break;
+ case TH_TITLE:
+ if(theme_regionid==RGN_TYPE_WINDOW)
+ cp= ts->title;
+ else if(theme_regionid==RGN_TYPE_CHANNELS)
+ cp= ts->list_title;
+ else if(theme_regionid==RGN_TYPE_HEADER)
+ cp= ts->header_title;
+ else
+ cp= ts->button_title;
+ break;
+
case TH_HEADER:
cp= ts->header; break;
case TH_HEADERDESEL:
@@ -213,8 +213,25 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
headerdesel[2]= cp[2]>10?cp[2]-10:0;
cp= headerdesel;
break;
+ case TH_HEADER_TEXT:
+ cp= ts->header_text; break;
+ 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_BUTBACK:
+ cp= ts->button; break;
+ case TH_BUTBACK_TEXT:
+ cp= ts->button_text; break;
+ case TH_BUTBACK_TEXT_HI:
+ cp= ts->button_text_hi; break;
+
case TH_SHADE1:
cp= ts->shade1; break;
case TH_SHADE2:
@@ -340,11 +357,55 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
return cp;
}
+#define SETCOLTEST(col, r, g, b, a) if(col[3]==0) {col[0]=r; col[1]=g; col[2]= b; col[3]= a;}
+
+/* use this call to init new variables in themespace, if they're same for all */
+static void ui_theme_init_new_do(ThemeSpace *ts)
+{
+ SETCOLTEST(ts->header_text, 0, 0, 0, 255);
+ SETCOLTEST(ts->header_title, 0, 0, 0, 255);
+ SETCOLTEST(ts->header_text_hi, 255, 255, 255, 255);
+
+ SETCOLTEST(ts->panel_text, 0, 0, 0, 255);
+ SETCOLTEST(ts->panel_title, 0, 0, 0, 255);
+ SETCOLTEST(ts->panel_text_hi, 255, 255, 255, 255);
+
+ SETCOLTEST(ts->button, 145, 145, 145, 245);
+ SETCOLTEST(ts->button_title, 0, 0, 0, 255);
+ SETCOLTEST(ts->button_text, 0, 0, 0, 255);
+ SETCOLTEST(ts->button_text_hi, 255, 255, 255, 255);
+
+ SETCOLTEST(ts->list, 165, 165, 165, 255);
+ SETCOLTEST(ts->list_title, 0, 0, 0, 255);
+ SETCOLTEST(ts->list_text, 0, 0, 0, 255);
+ SETCOLTEST(ts->list_text_hi, 255, 255, 255, 255);
+}
+
+static void ui_theme_init_new(bTheme *btheme)
+{
+ ui_theme_init_new_do(&btheme->tbuts);
+ ui_theme_init_new_do(&btheme->tv3d);
+ ui_theme_init_new_do(&btheme->tfile);
+ ui_theme_init_new_do(&btheme->tipo);
+ ui_theme_init_new_do(&btheme->tinfo);
+ ui_theme_init_new_do(&btheme->tsnd);
+ ui_theme_init_new_do(&btheme->tact);
+ ui_theme_init_new_do(&btheme->tnla);
+ ui_theme_init_new_do(&btheme->tseq);
+ ui_theme_init_new_do(&btheme->tima);
+ ui_theme_init_new_do(&btheme->timasel);
+ ui_theme_init_new_do(&btheme->text);
+ ui_theme_init_new_do(&btheme->toops);
+ ui_theme_init_new_do(&btheme->ttime);
+ ui_theme_init_new_do(&btheme->tnode);
+
+}
+
#define SETCOL(col, r, g, b, a) col[0]=r; col[1]=g; col[2]= b; col[3]= a;
-/* initialize
+/* initialize default theme, can't be edited
Note: when you add new colors, created & saved themes need initialized
- in usiblender.c, search for "versionfile"
+ use function below, init_userdef_do_versions()
*/
void ui_theme_init_userdef(void)
{
@@ -361,39 +422,22 @@ void ui_theme_init_userdef(void)
strcpy(btheme->name, "Default");
}
- UI_SetTheme(NULL); // make sure the global used in this file is set
+ UI_SetTheme(0, 0); // make sure the global used in this file is set
/* UI buttons */
- SETCOL(btheme->tui.outline, 130, 130, 130, 255);
- SETCOL(btheme->tui.neutral, 165, 165, 165, 255);
- SETCOL(btheme->tui.action, 165, 165, 165, 255);
- SETCOL(btheme->tui.setting, 165, 165, 165, 255);
- SETCOL(btheme->tui.setting1, 165, 165, 165, 255);
- SETCOL(btheme->tui.setting2, 165, 165, 165, 255);
- SETCOL(btheme->tui.num, 165, 165, 165, 255);
- SETCOL(btheme->tui.textfield, 143, 142, 143, 255);
- SETCOL(btheme->tui.textfield_hi,255, 151, 26, 255);
- SETCOL(btheme->tui.popup, 174, 174, 174, 255);
-
- SETCOL(btheme->tui.text, 0,0,0, 255);
- SETCOL(btheme->tui.text_hi, 255, 255, 255, 255);
-
- SETCOL(btheme->tui.menu_back, 220, 220, 220, 235);
- SETCOL(btheme->tui.menu_item, 255, 255, 255, 20);
- SETCOL(btheme->tui.menu_hilite, 110, 110, 110, 255);
- SETCOL(btheme->tui.menu_text, 0, 0, 0, 255);
- SETCOL(btheme->tui.menu_text_hi, 255, 255, 255, 255);
-
- btheme->tui.but_drawtype= TH_ROUNDSHADED;
- BLI_strncpy(btheme->tui.iconfile, "", sizeof(btheme->tui.iconfile));
+ ui_widget_color_init(&btheme->tui);
+ /* common (new) variables */
+ ui_theme_init_new(btheme);
+
/* space view3d */
SETCOL(btheme->tv3d.back, 90, 90, 90, 255);
SETCOL(btheme->tv3d.text, 0, 0, 0, 255);
SETCOL(btheme->tv3d.text_hi, 255, 255, 255, 255);
+
SETCOL(btheme->tv3d.header, 185, 185, 185, 255);
SETCOL(btheme->tv3d.panel, 165, 165, 165, 127);
-
+
SETCOL(btheme->tv3d.shade1, 160, 160, 160, 100);
SETCOL(btheme->tv3d.shade2, 0x7f, 0x70, 0x70, 100);
@@ -583,188 +627,19 @@ void ui_theme_init_userdef(void)
}
-char *UI_ThemeColorsPup(int spacetype)
-{
- char *cp= MEM_callocN(32*32, "theme pup");
- char *str = cp;
-
- if(spacetype==0) {
- str += sprintf(str, "Outline %%x%d|", TH_BUT_OUTLINE);
- str += sprintf(str, "Neutral %%x%d|", TH_BUT_NEUTRAL);
- str += sprintf(str, "Action %%x%d|", TH_BUT_ACTION);
- str += sprintf(str, "Setting %%x%d|", TH_BUT_SETTING);
- str += sprintf(str, "Special Setting 1%%x%d|", TH_BUT_SETTING1);
- str += sprintf(str, "Special Setting 2 %%x%d|", TH_BUT_SETTING2);
- str += sprintf(str, "Number Input %%x%d|", TH_BUT_NUM);
- str += sprintf(str, "Text Input %%x%d|", TH_BUT_TEXTFIELD);
- str += sprintf(str, "Text Input Highlight %%x%d|", TH_BUT_TEXTFIELD_HI);
- str += sprintf(str, "Popup %%x%d|", TH_BUT_POPUP);
- str += sprintf(str, "Text %%x%d|", TH_BUT_TEXT);
- str += sprintf(str, "Text Highlight %%x%d|", TH_BUT_TEXT_HI);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Menu Background %%x%d|", TH_MENU_BACK);
- str += sprintf(str, "Menu Item %%x%d|", TH_MENU_ITEM);
- str += sprintf(str, "Menu Item Highlight %%x%d|", TH_MENU_HILITE);
- str += sprintf(str, "Menu Text %%x%d|", TH_MENU_TEXT);
- str += sprintf(str, "Menu Text Highlight %%x%d|", TH_MENU_TEXT_HI);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Drawtype %%x%d|", TH_BUT_DRAWTYPE);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Icon File %%x%d|", TH_ICONFILE);
- }
- else {
- // first defaults for each space
- str += sprintf(str, "Background %%x%d|", TH_BACK);
- str += sprintf(str, "Text %%x%d|", TH_TEXT);
- str += sprintf(str, "Text Highlight %%x%d|", TH_TEXT_HI);
- str += sprintf(str, "Header %%x%d|", TH_HEADER);
-
- switch(spacetype) {
- case SPACE_VIEW3D:
- str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Wire %%x%d|", TH_WIRE);
- str += sprintf(str, "Lamp %%x%d|", TH_LAMP);
- str += sprintf(str, "Object Selected %%x%d|", TH_SELECT);
- str += sprintf(str, "Object Active %%x%d|", TH_ACTIVE);
- str += sprintf(str, "Object Grouped %%x%d|", TH_GROUP);
- str += sprintf(str, "Object Grouped Active %%x%d|", TH_GROUP_ACTIVE);
- str += sprintf(str, "Transform %%x%d|", TH_TRANSFORM);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
- str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
- str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
- str += sprintf(str, "Edge Selected %%x%d|", TH_EDGE_SELECT);
- str += sprintf(str, "Edge Seam %%x%d|", TH_EDGE_SEAM);
- str += sprintf(str, "Edge Sharp %%x%d|", TH_EDGE_SHARP);
- str += sprintf(str, "Edge UV Face Select %%x%d|", TH_EDGE_FACESEL);
- str += sprintf(str, "Face (transp) %%x%d|", TH_FACE);
- str += sprintf(str, "Face Selected (transp) %%x%d|", TH_FACE_SELECT);
- str += sprintf(str, "Face Dot Selected %%x%d|", TH_FACE_DOT);
- str += sprintf(str, "Face Dot Size %%x%d|", TH_FACEDOT_SIZE);
- str += sprintf(str, "Active Vert/Edge/Face %%x%d|", TH_EDITMESH_ACTIVE);
- str += sprintf(str, "Normal %%x%d|", TH_NORMAL);
- str += sprintf(str, "Bone Solid %%x%d|", TH_BONE_SOLID);
- str += sprintf(str, "Bone Pose %%x%d", TH_BONE_POSE);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_IPO:
- str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1);
- str += sprintf(str, "Ipo Channels %%x%d|", TH_SHADE2);
- str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
- str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
- str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_FILE:
- str += sprintf(str, "Selected file %%x%d", TH_HILITE);
- break;
- case SPACE_NLA:
- //str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "View Sliders %%x%d|", TH_SHADE1);
- str += sprintf(str, "Bars %%x%d|", TH_SHADE2);
- str += sprintf(str, "Bars selected %%x%d|", TH_HILITE);
- str += sprintf(str, "Strips %%x%d|", TH_STRIP);
- str += sprintf(str, "Strips selected %%x%d|", TH_STRIP_SELECT);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_ACTION:
- //str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "RVK Sliders %%x%d|", TH_FACE);
- str += sprintf(str, "View Sliders %%x%d|", TH_SHADE1);
- str += sprintf(str, "Channels %%x%d|", TH_SHADE2);
- str += sprintf(str, "Channels Selected %%x%d|", TH_HILITE);
- str += sprintf(str, "Long Key %%x%d|", TH_STRIP);
- str += sprintf(str, "Long Key selected %%x%d|", TH_STRIP_SELECT);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_IMAGE:
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
- str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
- str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
- str += sprintf(str, "Face %%x%d|", TH_FACE);
- str += sprintf(str, "Face Selected %%x%d", TH_FACE_SELECT);
- break;
- case SPACE_SEQ:
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Movie Strip %%x%d|", TH_SEQ_MOVIE);
- str += sprintf(str, "Image Strip %%x%d|", TH_SEQ_IMAGE);
- str += sprintf(str, "Scene Strip %%x%d|", TH_SEQ_SCENE);
- str += sprintf(str, "Audio Strip %%x%d|", TH_SEQ_AUDIO);
- str += sprintf(str, "Effect Strip %%x%d|", TH_SEQ_EFFECT);
- str += sprintf(str, "Plugin Strip %%x%d|", TH_SEQ_PLUGIN);
- str += sprintf(str, "Transition Strip %%x%d|", TH_SEQ_TRANSITION);
- str += sprintf(str, "Meta Strip %%x%d|", TH_SEQ_META);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_SOUND:
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Window Slider %%x%d|", TH_SHADE1);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_BUTS:
- str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- break;
- case SPACE_IMASEL:
- str += sprintf(str, "Tiles %%x%d|", TH_PANEL);
- str += sprintf(str, "Scrollbar %%x%d|", TH_SHADE1);
- str += sprintf(str, "Scroll Handle %%x%d|", TH_SHADE2);
- str += sprintf(str, "Selected File %%x%d|", TH_HILITE);
- str += sprintf(str, "Active File %%x%d|", TH_ACTIVE);
- str += sprintf(str, "Active File Text%%x%d|", TH_GRID);
- break;
- case SPACE_TEXT:
- str += sprintf(str, "Scroll Bar %%x%d|", TH_SHADE1);
- str += sprintf(str, "Selected Text %%x%d|", TH_SHADE2);
- str += sprintf(str, "Cursor %%x%d|", TH_HILITE);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Syntax Builtin %%x%d|", TH_SYNTAX_B);
- str += sprintf(str, "Syntax Special %%x%d|", TH_SYNTAX_V);
- str += sprintf(str, "Syntax Comment %%x%d|", TH_SYNTAX_C);
- str += sprintf(str, "Syntax Strings %%x%d|", TH_SYNTAX_L);
- str += sprintf(str, "Syntax Numbers %%x%d|", TH_SYNTAX_N);
- break;
- case SPACE_TIME:
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_NODE:
- str += sprintf(str, "Wires %%x%d|", TH_WIRE);
- str += sprintf(str, "Wires Select %%x%d|", TH_EDGE_SELECT);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Node Backdrop %%x%d|", TH_NODE);
- str += sprintf(str, "In/Out Node %%x%d|", TH_NODE_IN_OUT);
- str += sprintf(str, "Convertor Node %%x%d|", TH_NODE_CONVERTOR);
- str += sprintf(str, "Operator Node %%x%d|", TH_NODE_OPERATOR);
- str += sprintf(str, "Group Node %%x%d|", TH_NODE_GROUP);
- break;
- }
- }
- return cp;
-}
-void UI_SetTheme(ScrArea *sa)
+void UI_SetTheme(int spacetype, int regionid)
{
- if(sa==NULL) { // called for safety, when delete themes
+ if(spacetype==0) { // called for safety, when delete themes
theme_active= U.themes.first;
theme_spacetype= SPACE_VIEW3D;
+ theme_regionid= RGN_TYPE_WINDOW;
}
else {
// later on, a local theme can be found too
theme_active= U.themes.first;
- theme_spacetype= sa->spacetype;
-
+ theme_spacetype= spacetype;
+ theme_regionid= regionid;
}
}
@@ -985,3 +860,395 @@ void UI_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, in
col[2] = b;
}
+
+/* ************************************************************* */
+
+/* patching UserDef struct and Themes */
+void init_userdef_do_versions(void)
+{
+// countall();
+
+ /* the UserDef struct is not corrected with do_versions() .... ugh! */
+ if(U.wheellinescroll == 0) U.wheellinescroll = 3;
+ if(U.menuthreshold1==0) {
+ U.menuthreshold1= 5;
+ U.menuthreshold2= 2;
+ }
+ if(U.tb_leftmouse==0) {
+ U.tb_leftmouse= 5;
+ U.tb_rightmouse= 5;
+ }
+ if(U.mixbufsize==0) U.mixbufsize= 2048;
+ if (BLI_streq(U.tempdir, "/")) {
+ char *tmp= getenv("TEMP");
+
+ strcpy(U.tempdir, tmp?tmp:"/tmp/");
+ }
+ if (U.savetime <= 0) {
+ U.savetime = 1;
+// XXX error(".B.blend is buggy, please consider removing it.\n");
+ }
+ /* transform widget settings */
+ if(U.tw_hotspot==0) {
+ U.tw_hotspot= 14;
+ U.tw_size= 20; // percentage of window size
+ U.tw_handlesize= 16; // percentage of widget radius
+ }
+ if(U.pad_rot_angle==0)
+ U.pad_rot_angle= 15;
+
+ if(U.flag & USER_CUSTOM_RANGE)
+ vDM_ColorBand_store(&U.coba_weight); /* signal for derivedmesh to use colorband */
+
+ if (G.main->versionfile <= 191) {
+ strcpy(U.plugtexdir, U.textudir);
+ strcpy(U.sounddir, "/");
+ }
+
+ /* patch to set Dupli Armature */
+ if (G.main->versionfile < 220) {
+ U.dupflag |= USER_DUP_ARM;
+ }
+
+ /* added seam, normal color, undo */
+ if (G.main->versionfile <= 234) {
+ bTheme *btheme;
+
+ U.uiflag |= USER_GLOBALUNDO;
+ if (U.undosteps==0) U.undosteps=32;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->tv3d.edge_seam[3]==0) {
+ SETCOL(btheme->tv3d.edge_seam, 230, 150, 50, 255);
+ }
+ if(btheme->tv3d.normal[3]==0) {
+ SETCOL(btheme->tv3d.normal, 0x22, 0xDD, 0xDD, 255);
+ }
+ if(btheme->tv3d.face_dot[3]==0) {
+ SETCOL(btheme->tv3d.face_dot, 255, 138, 48, 255);
+ btheme->tv3d.facedot_size= 4;
+ }
+ }
+ }
+ if (G.main->versionfile <= 235) {
+ /* illegal combo... */
+ if (U.flag & USER_LMOUSESELECT)
+ U.flag &= ~USER_TWOBUTTONMOUSE;
+ }
+ if (G.main->versionfile <= 236) {
+ bTheme *btheme;
+ /* new space type */
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->ttime.back[3]==0) {
+ btheme->ttime = btheme->tsnd; // copy from sound
+ }
+ if(btheme->text.syntaxn[3]==0) {
+ SETCOL(btheme->text.syntaxn, 0, 0, 200, 255); /* Numbers Blue*/
+ SETCOL(btheme->text.syntaxl, 100, 0, 0, 255); /* Strings red */
+ SETCOL(btheme->text.syntaxc, 0, 100, 50, 255); /* Comments greenish */
+ SETCOL(btheme->text.syntaxv, 95, 95, 0, 255); /* Special */
+ SETCOL(btheme->text.syntaxb, 128, 0, 80, 255); /* Builtin, red-purple */
+ }
+ }
+ }
+ if (G.main->versionfile <= 237) {
+ bTheme *btheme;
+ /* bone colors */
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->tv3d.bone_solid[3]==0) {
+ SETCOL(btheme->tv3d.bone_solid, 200, 200, 200, 255);
+ SETCOL(btheme->tv3d.bone_pose, 80, 200, 255, 80);
+ }
+ }
+ }
+ if (G.main->versionfile <= 238) {
+ bTheme *btheme;
+ /* bone colors */
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->tnla.strip[3]==0) {
+ SETCOL(btheme->tnla.strip_select, 0xff, 0xff, 0xaa, 255);
+ SETCOL(btheme->tnla.strip, 0xe4, 0x9c, 0xc6, 255);
+ }
+ }
+ }
+ if (G.main->versionfile <= 239) {
+ bTheme *btheme;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* Lamp theme, check for alpha==0 is safe, then color was never set */
+ if(btheme->tv3d.lamp[3]==0) {
+ SETCOL(btheme->tv3d.lamp, 0, 0, 0, 40);
+/* TEMPORAL, remove me! (ton) */
+ U.uiflag |= USER_PLAINMENUS;
+ }
+
+ }
+ if(U.obcenter_dia==0) U.obcenter_dia= 6;
+ }
+ if (G.main->versionfile <= 241) {
+ bTheme *btheme;
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* Node editor theme, check for alpha==0 is safe, then color was never set */
+ if(btheme->tnode.syntaxn[3]==0) {
+ /* re-uses syntax color storage */
+ btheme->tnode= btheme->tv3d;
+ SETCOL(btheme->tnode.edge_select, 255, 255, 255, 255);
+ SETCOL(btheme->tnode.syntaxl, 150, 150, 150, 255); /* TH_NODE, backdrop */
+ SETCOL(btheme->tnode.syntaxn, 129, 131, 144, 255); /* in/output */
+ SETCOL(btheme->tnode.syntaxb, 127,127,127, 255); /* operator */
+ SETCOL(btheme->tnode.syntaxv, 142, 138, 145, 255); /* generator */
+ SETCOL(btheme->tnode.syntaxc, 120, 145, 120, 255); /* group */
+ }
+ /* Group theme colors */
+ if(btheme->tv3d.group[3]==0) {
+ SETCOL(btheme->tv3d.group, 0x10, 0x40, 0x10, 255);
+ SETCOL(btheme->tv3d.group_active, 0x66, 0xFF, 0x66, 255);
+ }
+ /* Sequence editor theme*/
+ if(btheme->tseq.movie[3]==0) {
+ SETCOL(btheme->tseq.movie, 81, 105, 135, 255);
+ SETCOL(btheme->tseq.image, 109, 88, 129, 255);
+ SETCOL(btheme->tseq.scene, 78, 152, 62, 255);
+ SETCOL(btheme->tseq.audio, 46, 143, 143, 255);
+ SETCOL(btheme->tseq.effect, 169, 84, 124, 255);
+ SETCOL(btheme->tseq.plugin, 126, 126, 80, 255);
+ SETCOL(btheme->tseq.transition, 162, 95, 111, 255);
+ SETCOL(btheme->tseq.meta, 109, 145, 131, 255);
+ }
+ }
+
+ /* set defaults for 3D View rotating axis indicator */
+ /* since size can't be set to 0, this indicates it's not saved in .B.blend */
+ if (U.rvisize == 0) {
+ U.rvisize = 15;
+ U.rvibright = 8;
+ U.uiflag |= USER_SHOW_ROTVIEWICON;
+ }
+
+ }
+ if (G.main->versionfile <= 242) {
+ bTheme *btheme;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* long keyframe color */
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->tact.strip[3]==0) {
+ SETCOL(btheme->tv3d.edge_sharp, 255, 32, 32, 255);
+ SETCOL(btheme->tact.strip_select, 0xff, 0xff, 0xaa, 204);
+ SETCOL(btheme->tact.strip, 0xe4, 0x9c, 0xc6, 204);
+ }
+
+ /* IPO-Editor - Vertex Size*/
+ if(btheme->tipo.vertex_size == 0) {
+ btheme->tipo.vertex_size= 3;
+ }
+ }
+ }
+ if (G.main->versionfile <= 243) {
+ /* set default number of recently-used files (if not set) */
+ if (U.recent_files == 0) U.recent_files = 10;
+ }
+ if (G.main->versionfile < 245 || (G.main->versionfile == 245 && G.main->subversionfile < 3)) {
+ bTheme *btheme;
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ SETCOL(btheme->tv3d.editmesh_active, 255, 255, 255, 128);
+ }
+ if(U.coba_weight.tot==0)
+ init_colorband(&U.coba_weight, 1);
+ }
+ if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) {
+ bTheme *btheme;
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* these should all use the same colour */
+ SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255);
+ }
+ }
+ if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) {
+ bTheme *btheme;
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* these should all use the same color */
+ SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255);
+ }
+ }
+ if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 13)) {
+ bTheme *btheme;
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* action channel groups (recolor anyway) */
+ SETCOL(btheme->tact.group, 0x39, 0x7d, 0x1b, 255);
+ SETCOL(btheme->tact.group_active, 0x7d, 0xe9, 0x60, 255);
+
+ /* bone custom-color sets */
+ // FIXME: this check for initialised colors is bad
+ if (btheme->tarm[0].solid[3] == 0) {
+ /* set 1 */
+ SETCOL(btheme->tarm[0].solid, 0x9a, 0x00, 0x00, 255);
+ SETCOL(btheme->tarm[0].select, 0xbd, 0x11, 0x11, 255);
+ SETCOL(btheme->tarm[0].active, 0xf7, 0x0a, 0x0a, 255);
+ /* set 2 */
+ SETCOL(btheme->tarm[1].solid, 0xf7, 0x40, 0x18, 255);
+ SETCOL(btheme->tarm[1].select, 0xf6, 0x69, 0x13, 255);
+ SETCOL(btheme->tarm[1].active, 0xfa, 0x99, 0x00, 255);
+ /* set 3 */
+ SETCOL(btheme->tarm[2].solid, 0x1e, 0x91, 0x09, 255);
+ SETCOL(btheme->tarm[2].select, 0x59, 0xb7, 0x0b, 255);
+ SETCOL(btheme->tarm[2].active, 0x83, 0xef, 0x1d, 255);
+ /* set 4 */
+ SETCOL(btheme->tarm[3].solid, 0x0a, 0x36, 0x94, 255);
+ SETCOL(btheme->tarm[3].select, 0x36, 0x67, 0xdf, 255);
+ SETCOL(btheme->tarm[3].active, 0x5e, 0xc1, 0xef, 255);
+ /* set 5 */
+ SETCOL(btheme->tarm[4].solid, 0xa9, 0x29, 0x4e, 255);
+ SETCOL(btheme->tarm[4].select, 0xc1, 0x41, 0x6a, 255);
+ SETCOL(btheme->tarm[4].active, 0xf0, 0x5d, 0x91, 255);
+ /* set 6 */
+ SETCOL(btheme->tarm[5].solid, 0x43, 0x0c, 0x78, 255);
+ SETCOL(btheme->tarm[5].select, 0x54, 0x3a, 0xa3, 255);
+ SETCOL(btheme->tarm[5].active, 0x87, 0x64, 0xd5, 255);
+ /* set 7 */
+ SETCOL(btheme->tarm[6].solid, 0x24, 0x78, 0x5a, 255);
+ SETCOL(btheme->tarm[6].select, 0x3c, 0x95, 0x79, 255);
+ SETCOL(btheme->tarm[6].active, 0x6f, 0xb6, 0xab, 255);
+ /* set 8 */
+ SETCOL(btheme->tarm[7].solid, 0x4b, 0x70, 0x7c, 255);
+ SETCOL(btheme->tarm[7].select, 0x6a, 0x86, 0x91, 255);
+ SETCOL(btheme->tarm[7].active, 0x9b, 0xc2, 0xcd, 255);
+ /* set 9 */
+ SETCOL(btheme->tarm[8].solid, 0xf4, 0xc9, 0x0c, 255);
+ SETCOL(btheme->tarm[8].select, 0xee, 0xc2, 0x36, 255);
+ SETCOL(btheme->tarm[8].active, 0xf3, 0xff, 0x00, 255);
+ /* set 10 */
+ SETCOL(btheme->tarm[9].solid, 0x1e, 0x20, 0x24, 255);
+ SETCOL(btheme->tarm[9].select, 0x48, 0x4c, 0x56, 255);
+ SETCOL(btheme->tarm[9].active, 0xff, 0xff, 0xff, 255);
+ /* set 11 */
+ SETCOL(btheme->tarm[10].solid, 0x6f, 0x2f, 0x6a, 255);
+ SETCOL(btheme->tarm[10].select, 0x98, 0x45, 0xbe, 255);
+ SETCOL(btheme->tarm[10].active, 0xd3, 0x30, 0xd6, 255);
+ /* set 12 */
+ SETCOL(btheme->tarm[11].solid, 0x6c, 0x8e, 0x22, 255);
+ SETCOL(btheme->tarm[11].select, 0x7f, 0xb0, 0x22, 255);
+ SETCOL(btheme->tarm[11].active, 0xbb, 0xef, 0x5b, 255);
+ /* set 13 */
+ SETCOL(btheme->tarm[12].solid, 0x8d, 0x8d, 0x8d, 255);
+ SETCOL(btheme->tarm[12].select, 0xb0, 0xb0, 0xb0, 255);
+ SETCOL(btheme->tarm[12].active, 0xde, 0xde, 0xde, 255);
+ /* set 14 */
+ SETCOL(btheme->tarm[13].solid, 0x83, 0x43, 0x26, 255);
+ SETCOL(btheme->tarm[13].select, 0x8b, 0x58, 0x11, 255);
+ SETCOL(btheme->tarm[13].active, 0xbd, 0x6a, 0x11, 255);
+ /* set 15 */
+ SETCOL(btheme->tarm[14].solid, 0x08, 0x31, 0x0e, 255);
+ SETCOL(btheme->tarm[14].select, 0x1c, 0x43, 0x0b, 255);
+ SETCOL(btheme->tarm[14].active, 0x34, 0x62, 0x2b, 255);
+ }
+ }
+ }
+ if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 16)) {
+ U.flag |= USER_ADD_VIEWALIGNED|USER_ADD_EDITMODE;
+ }
+ if ((G.main->versionfile < 247) || (G.main->versionfile == 247 && G.main->subversionfile <= 2)) {
+ bTheme *btheme;
+
+ /* adjust themes */
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ char *col;
+
+ /* IPO Editor: Handles/Vertices */
+ col = btheme->tipo.vertex;
+ SETCOL(btheme->tipo.handle_vertex, col[0], col[1], col[2], 255);
+ col = btheme->tipo.vertex_select;
+ SETCOL(btheme->tipo.handle_vertex_select, col[0], col[1], col[2], 255);
+ btheme->tipo.handle_vertex_size= btheme->tipo.vertex_size;
+
+ /* Sequence/Image Editor: colors for GPencil text */
+ col = btheme->tv3d.bone_pose;
+ SETCOL(btheme->tseq.bone_pose, col[0], col[1], col[2], 255);
+ SETCOL(btheme->tima.bone_pose, col[0], col[1], col[2], 255);
+ col = btheme->tv3d.vertex_select;
+ SETCOL(btheme->tseq.vertex_select, col[0], col[1], col[2], 255);
+ }
+ }
+ if (G.main->versionfile < 250) {
+ bTheme *btheme;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* this was not properly initialized in 2.45 */
+ if(btheme->tima.face_dot[3]==0) {
+ SETCOL(btheme->tima.editmesh_active, 255, 255, 255, 128);
+ SETCOL(btheme->tima.face_dot, 255, 133, 0, 255);
+ btheme->tima.facedot_size= 2;
+ }
+
+ /* DopeSheet - (Object) Channel color */
+ SETCOL(btheme->tact.ds_channel, 82, 96, 110, 255);
+ SETCOL(btheme->tact.ds_subchannel, 124, 137, 150, 255);
+ /* DopeSheet - Group Channel color (saner version) */
+ SETCOL(btheme->tact.group, 79, 101, 73, 255);
+ SETCOL(btheme->tact.group_active, 135, 177, 125, 255);
+
+ /* Graph Editor - (Object) Channel color */
+ SETCOL(btheme->tipo.ds_channel, 82, 96, 110, 255);
+ SETCOL(btheme->tipo.ds_subchannel, 124, 137, 150, 255);
+ /* Graph Editor - Group Channel color */
+ SETCOL(btheme->tipo.group, 79, 101, 73, 255);
+ SETCOL(btheme->tipo.group_active, 135, 177, 125, 255);
+ }
+
+ /* adjust grease-pencil distances */
+ U.gp_manhattendist= 1;
+ U.gp_euclideandist= 2;
+
+ /* adjust default interpolation for new IPO-curves */
+ U.ipo_new= BEZT_IPO_BEZ;
+ }
+
+ if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 1)) {
+ bTheme *btheme;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+
+ /* common (new) variables, it checks for alpha==0 */
+ ui_theme_init_new(btheme);
+
+ if(btheme->tui.wcol_num.outline[3]==0)
+ ui_widget_color_init(&btheme->tui);
+ }
+ }
+
+ /* GL Texture Garbage Collection (variable abused above!) */
+ if (U.textimeout == 0) {
+ U.texcollectrate = 60;
+ U.textimeout = 120;
+ }
+ if (U.memcachelimit <= 0) {
+ U.memcachelimit = 32;
+ }
+ if (U.frameserverport == 0) {
+ U.frameserverport = 8080;
+ }
+
+ /* funny name, but it is GE stuff, moves userdef stuff to engine */
+// XXX space_set_commmandline_options();
+ /* this timer uses U */
+// XXX reset_autosave();
+
+}
+
+
+
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 54775c4e5ab..f7d1723b689 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -65,12 +65,15 @@
/* general area and region code */
-static void region_draw_emboss(ARegion *ar)
+static void region_draw_emboss(ARegion *ar, rcti *scirct)
{
- short winx, winy;
+ rcti rect;
- winx= ar->winrct.xmax-ar->winrct.xmin;
- winy= ar->winrct.ymax-ar->winrct.ymin;
+ /* translate scissor rect to region space */
+ rect.xmin= scirct->xmin - ar->winrct.xmin;
+ rect.ymin= scirct->ymin - ar->winrct.ymin;
+ rect.xmax= scirct->xmax - ar->winrct.xmin;
+ rect.ymax= scirct->ymax - ar->winrct.ymin;
/* set transp line */
glEnable( GL_BLEND );
@@ -78,19 +81,19 @@ static void region_draw_emboss(ARegion *ar)
/* right */
glColor4ub(0,0,0, 50);
- sdrawline(winx, 0, winx, winy);
+ sdrawline(rect.xmax, rect.ymin, rect.xmax, rect.ymax);
/* bottom */
glColor4ub(0,0,0, 80);
- sdrawline(0, 0, winx, 0);
+ sdrawline(rect.xmin, rect.ymin, rect.xmax, rect.ymin);
/* top */
glColor4ub(255,255,255, 60);
- sdrawline(0, winy, winx, winy);
+ sdrawline(rect.xmin, rect.ymax, rect.xmax, rect.ymax);
/* left */
glColor4ub(255,255,255, 50);
- sdrawline(0, 0, 0, winy);
+ sdrawline(rect.xmin, rect.ymin, rect.xmin, rect.ymax);
glDisable( GL_BLEND );
}
@@ -190,49 +193,75 @@ void ED_area_overdraw(bContext *C)
}
+/* get scissor rect, checking overlapping regions */
+static void region_scissor_winrct(ARegion *ar, rcti *winrct)
+{
+ *winrct= ar->winrct;
+
+ if(ELEM(ar->alignment, RGN_OVERLAP_LEFT, RGN_OVERLAP_RIGHT))
+ return;
+
+ while(ar->prev) {
+ ar= ar->prev;
+
+ if(ar->flag & RGN_FLAG_HIDDEN);
+ else if(ar->alignment==RGN_OVERLAP_LEFT) {
+ winrct->xmin= ar->winrct.xmax + 1;
+ }
+ else if(ar->alignment==RGN_OVERLAP_RIGHT) {
+ winrct->xmax= ar->winrct.xmin - 1;
+ }
+ else break;
+ }
+}
+
/* only exported for WM */
void ED_region_do_draw(bContext *C, ARegion *ar)
{
wmWindow *win= CTX_wm_window(C);
ScrArea *sa= CTX_wm_area(C);
ARegionType *at= ar->type;
-
+ rcti winrct;
+
+ /* checks other overlapping regions */
+ region_scissor_winrct(ar, &winrct);
+
/* if no partial draw rect set, full rect */
if(ar->drawrct.xmin == ar->drawrct.xmax)
- ar->drawrct= ar->winrct;
-
- /* extra clip for safety */
- ar->drawrct.xmin= MAX2(ar->winrct.xmin, ar->drawrct.xmin);
- ar->drawrct.ymin= MAX2(ar->winrct.ymin, ar->drawrct.ymin);
- ar->drawrct.xmax= MIN2(ar->winrct.xmax, ar->drawrct.xmax);
- ar->drawrct.ymax= MIN2(ar->winrct.ymax, ar->drawrct.ymax);
+ ar->drawrct= winrct;
+ else {
+ /* extra clip for safety */
+ ar->drawrct.xmin= MAX2(winrct.xmin, ar->drawrct.xmin);
+ ar->drawrct.ymin= MAX2(winrct.ymin, ar->drawrct.ymin);
+ ar->drawrct.xmax= MIN2(winrct.xmax, ar->drawrct.xmax);
+ ar->drawrct.ymax= MIN2(winrct.ymax, ar->drawrct.ymax);
+ }
/* note; this sets state, so we can use wmOrtho and friends */
wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct);
+ UI_SetTheme(sa?sa->spacetype:0, ar->type?ar->type->regionid:0);
+
/* optional header info instead? */
if(ar->headerstr) {
float col[3];
- UI_SetTheme(sa);
UI_GetThemeColor3fv(TH_HEADER, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
- UI_ThemeColor(TH_MENU_TEXT);
+ UI_ThemeColor(TH_TEXT);
glRasterPos2i(20, 6);
BMF_DrawString(G.font, ar->headerstr);
}
else if(at->draw) {
- UI_SetTheme(sa);
at->draw(C, ar);
- UI_SetTheme(NULL);
}
- if(sa)
- region_draw_emboss(ar);
-
uiFreeInactiveBlocks(C, &ar->uiblocks);
+ if(sa)
+ region_draw_emboss(ar, &winrct);
+
/* XXX test: add convention to end regions always in pixel space, for drawing of borders/gestures etc */
ED_region_pixelspace(ar);
diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c
index a551b4f463c..6eae581aa40 100644
--- a/source/blender/editors/space_action/action_draw.c
+++ b/source/blender/editors/space_action/action_draw.c
@@ -999,7 +999,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
/* get theme colors */
- UI_GetThemeColor3ubv(TH_SHADE2, col2);
+ UI_GetThemeColor3ubv(TH_BACK, col2);
UI_GetThemeColor3ubv(TH_HILITE, col1);
UI_GetThemeColor3ubv(TH_GROUP, col2a);
UI_GetThemeColor3ubv(TH_GROUP_ACTIVE, col1a);
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index 782611aaad7..66ebc145621 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -293,7 +293,7 @@ static void graph_channel_area_draw(const bContext *C, ARegion *ar)
float col[3];
/* clear and setup matrix */
- UI_GetThemeColor3fv(TH_SHADE2, col);
+ UI_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
@@ -359,7 +359,7 @@ static void graph_buttons_area_draw(const bContext *C, ARegion *ar)
float col[3];
/* clear */
- UI_GetThemeColor3fv(TH_HEADER, col);
+ UI_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 493ef6954b5..775f46b8e04 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -201,7 +201,7 @@ static void node_channel_area_draw(const bContext *C, ARegion *ar)
float col[3];
/* clear and setup matrix */
- UI_GetThemeColor3fv(TH_SHADE2, col);
+ UI_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index b7682225fe3..0c41d6b4917 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -88,7 +88,34 @@ ARegion *view3d_has_buttons_region(ScrArea *sa)
BLI_insertlinkafter(&sa->regionbase, ar, arnew);
arnew->regiontype= RGN_TYPE_UI;
- arnew->alignment= RGN_ALIGN_LEFT;
+ arnew->alignment= RGN_ALIGN_RIGHT;
+
+ arnew->flag = RGN_FLAG_HIDDEN;
+
+ return arnew;
+}
+
+ARegion *view3d_has_tools_region(ScrArea *sa)
+{
+ ARegion *ar, *arnew;
+
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ if(ar->regiontype==RGN_TYPE_TOOLS)
+ return ar;
+
+ /* add subdiv level; after header */
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ if(ar->regiontype==RGN_TYPE_HEADER)
+ break;
+
+ /* is error! */
+ if(ar==NULL) return NULL;
+
+ arnew= MEM_callocN(sizeof(ARegion), "tools for view3d");
+
+ BLI_insertlinkafter(&sa->regionbase, ar, arnew);
+ arnew->regiontype= RGN_TYPE_TOOLS;
+ arnew->alignment= RGN_OVERLAP_LEFT;
arnew->flag = RGN_FLAG_HIDDEN;
@@ -96,6 +123,7 @@ ARegion *view3d_has_buttons_region(ScrArea *sa)
}
+
/* ******************** default callbacks for view3d space ***************** */
static SpaceLink *view3d_new(const bContext *C)
@@ -474,7 +502,7 @@ static void view3d_buttons_area_draw(const bContext *C, ARegion *ar)
float col[3];
/* clear */
- UI_GetThemeColor3fv(TH_HEADER, col);
+ UI_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
@@ -517,6 +545,40 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn)
}
}
+/* add handlers, stuff you only do once or on area/region changes */
+static void view3d_tools_area_init(wmWindowManager *wm, ARegion *ar)
+{
+ ListBase *keymap;
+
+ keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0);
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+ keymap= WM_keymap_listbase(wm, "View3D Generic", SPACE_VIEW3D, 0);
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+ // XXX +20 temp... need init for this
+ UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx+20, ar->winy);
+}
+
+
+static void view3d_tools_area_draw(const bContext *C, ARegion *ar)
+{
+ float col[3];
+
+ /* clear */
+ UI_GetThemeColor3fv(TH_BACK, col);
+
+ glClearColor(col[0], col[1], col[2], 0.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ /* set view2d view matrix for scrolling (without scrollers) */
+ UI_view2d_view_ortho(C, &ar->v2d);
+
+ view3d_tools_area_defbuts(C, ar);
+
+ /* restore view matrix? */
+ UI_view2d_view_restore(C);
+}
+
+
/*
* Returns true if the Object is a from an external blend file (libdata)
*/
@@ -788,6 +850,18 @@ void ED_spacetype_view3d(void)
art->init= view3d_buttons_area_init;
art->draw= view3d_buttons_area_draw;
BLI_addhead(&st->regiontypes, art);
+
+ /* regions: tool(bar) */
+ art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
+ art->regionid = RGN_TYPE_TOOLS;
+ art->minsizex= 120; // XXX
+ art->minsizey= 50; // XXX
+ art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES;
+ art->listener= view3d_buttons_area_listener;
+ art->init= view3d_tools_area_init;
+ art->draw= view3d_tools_area_draw;
+ BLI_addhead(&st->regiontypes, art);
+
/* regions: header */
art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index f1a748dff3a..5dad3f8cc7d 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -984,7 +984,6 @@ static void view3d_panel_transform_spaces(const bContext *C, ARegion *ar, short
for (index = V3D_MANIP_CUSTOM, ts = transform_spaces->first ; ts ; ts = ts->next, index++) {
- UI_ThemeColor(TH_BUT_ACTION);
if (v3d->twmode == index) {
but = uiDefIconButS(block,ROW, B_REDR, ICON_CHECKBOX_HLT, xco,yco,XIC,YIC, &v3d->twmode, 5.0, (float)index, 0, 0, "Use this Custom Transform Orientation");
}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index ae77b4293bf..927773bf2ec 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -134,9 +134,12 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d);
/* view3d_buttons.c */
void VIEW3D_OT_properties(struct wmOperatorType *ot);
-
void view3d_buttons_area_defbuts(const struct bContext *C, ARegion *ar);
+/* view3d_buttons.c */
+void VIEW3D_OT_toolbar(struct wmOperatorType *ot);
+void view3d_tools_area_defbuts(const struct bContext *C, ARegion *ar);
+
/* view3d_snap.c */
int minmax_verts(Object *obedit, float *min, float *max);
@@ -150,6 +153,7 @@ void VIEW3D_OT_snap_menu(struct wmOperatorType *ot);
/* space_view3d.c */
ARegion *view3d_has_buttons_region(ScrArea *sa);
+ARegion *view3d_has_tools_region(ScrArea *sa);
#endif /* ED_VIEW3D_INTERN_H */
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index f4c8607d174..0ed43bead17 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -84,10 +84,12 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_setcameratoview);
WM_operatortype_append(VIEW3D_OT_drawtype);
WM_operatortype_append(VIEW3D_OT_editmesh_face_toolbox);
- WM_operatortype_append(VIEW3D_OT_properties);
WM_operatortype_append(VIEW3D_OT_localview);
WM_operatortype_append(VIEW3D_OT_layers);
+ WM_operatortype_append(VIEW3D_OT_properties);
+ WM_operatortype_append(VIEW3D_OT_toolbar);
+
WM_operatortype_append(VIEW3D_OT_snap_selected_to_grid);
WM_operatortype_append(VIEW3D_OT_snap_selected_to_cursor);
WM_operatortype_append(VIEW3D_OT_snap_selected_to_center);
@@ -108,6 +110,7 @@ void view3d_keymap(wmWindowManager *wm)
WM_keymap_add_item(keymap, "PAINT_OT_weight_paint_toggle", TABKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "VIEW3D_OT_properties", NKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "VIEW3D_OT_toolbar", TKEY, KM_PRESS, 0, 0);
/* only for region 3D window */
keymap= WM_keymap_listbase(wm, "View3D", SPACE_VIEW3D, 0);
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index d03586da2d5..9c4f0b576da 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -765,7 +765,7 @@ void VIEW3D_OT_select_lasso(wmOperatorType *ot)
ot->poll= WM_operator_winactive;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", "");
RNA_def_enum(ot->srna, "type", lasso_select_types, 0, "Type", "");
@@ -1546,7 +1546,7 @@ void VIEW3D_OT_select_border(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
/* rna */
RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX);
@@ -1599,7 +1599,7 @@ void VIEW3D_OT_select(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
/* properties */
RNA_def_enum(ot->srna, "type", prop_select_types, 0, "Type", "");
@@ -1834,7 +1834,7 @@ void VIEW3D_OT_select_circle(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX);