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.
This commit is contained in:
2009-04-27 13:44:11 +00:00
parent 1d3c2b83a1
commit 9b82d1474f
25 changed files with 1308 additions and 1107 deletions

View File

@@ -178,7 +178,7 @@ READ
- read associated 'direct data'
- link direct data (internal and to LibBlock)
- read FileGlobal
- read USER data, only when indicated (file is ~/.B.blend)
- read USER data, only when indicated (file is ~/.B.blend or .B25.blend)
- free file
- per Library (per Main)
- read file

View File

@@ -2240,8 +2240,7 @@ int BLO_write_file(Main *mainvar, char *dir, int write_flags, ReportList *report
return 0;
}
BLI_make_file_string(G.sce, userfilename, BLI_gethome(), ".B.blend");
BLI_make_file_string(G.sce, userfilename, BLI_gethome(), ".B25.blend");
write_user_block= BLI_streq(dir, userfilename);
err= write_file_handle(mainvar, file, NULL,NULL, write_user_block, write_flags);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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 {

View File

@@ -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);
}

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -88,13 +88,41 @@ 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;
return arnew;
}
/* ******************** default callbacks for view3d space ***************** */
@@ -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");

View File

@@ -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");
}

View File

@@ -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 */

View File

@@ -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);

View File

@@ -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);

View File

@@ -217,6 +217,7 @@ typedef struct ARegion {
#define RGN_TYPE_CHANNELS 2
#define RGN_TYPE_TEMPORARY 3
#define RGN_TYPE_UI 4
#define RGN_TYPE_TOOLS 5
/* region alignment */
#define RGN_ALIGN_NONE 0

View File

@@ -98,41 +98,62 @@ typedef struct uiStyle {
} uiStyle;
/* global, button colors */
typedef struct ThemeUI {
typedef struct uiWidgetColors {
char outline[4];
char neutral[4];
char action[4];
char setting[4];
char setting1[4];
char setting2[4];
char num[4];
char textfield[4];
char textfield_hi[4];
char popup[4];
char inner[4];
char inner_sel[4];
char item[4];
char text[4];
char text_hi[4];
char menu_back[4];
char menu_item[4];
char menu_hilite[4];
char menu_text[4];
char menu_text_hi[4];
char text_sel[4];
short shaded;
short shadetop, shadedown;
short pad;
} uiWidgetColors;
typedef struct ThemeUI {
/* Interface Elements (buttons, menus, icons) */
uiWidgetColors wcol_regular, wcol_tool, wcol_radio, wcol_text, wcol_option;
uiWidgetColors wcol_num, wcol_numslider;
uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item;
char but_drawtype;
char pad[3];
char iconfile[80]; // FILE_MAXFILE length
} ThemeUI;
/* try to put them all in one, if needed a special struct can be created as well
* for example later on, when we introduce wire colors for ob types or so...
*/
typedef struct ThemeSpace {
/* main window colors */
char back[4];
char title[4];
char text[4];
char text_hi[4];
/* header colors */
char header[4];
char header_title[4];
char header_text[4];
char header_text_hi[4];
/* button/tool regions */
char button[4];
char button_title[4];
char button_text[4];
char button_text_hi[4];
/* listview regions */
char list[4];
char list_title[4];
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 shade1[4];
char shade2[4];
@@ -166,8 +187,12 @@ typedef struct ThemeSpace {
char handle_vertex[4];
char handle_vertex_select[4];
char handle_vertex_size;
char hpad[3];
char pad[4];
} ThemeSpace;
@@ -190,7 +215,6 @@ typedef struct bTheme {
struct bTheme *next, *prev;
char name[32];
/* Interface Elements (buttons, menus, icons) */
ThemeUI tui;
/* Individual Spacetypes */
@@ -213,7 +237,7 @@ typedef struct bTheme {
/* 20 sets of bone colors for this theme */
ThemeWireColor tarm[20];
/*ThemeWireColor tobj[20];*/
} bTheme;
typedef struct SolidLight {

View File

@@ -30,8 +30,11 @@
#include "rna_internal.h"
#include "DNA_curve_types.h"
#include "DNA_space_types.h"
#include "DNA_userdef_types.h"
#include "BKE_utildefines.h"
#ifdef RNA_RUNTIME
static void rna_userdef_lmb_select_set(struct PointerRNA *ptr,int value)
@@ -118,130 +121,264 @@ static PointerRNA rna_UserDef_system_get(PointerRNA *ptr)
#else
static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
srna= RNA_def_struct(brna, "ThemeFontStyle", NULL);
RNA_def_struct_sdna(srna, "uiFontStyle");
RNA_def_struct_ui_text(srna, "Font Style", "Theme settings for Font.");
prop= RNA_def_property(srna, "points", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 6, 48);
RNA_def_property_ui_text(prop, "Points", "");
prop= RNA_def_property(srna, "shadow", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 0, 5);
RNA_def_property_ui_text(prop, "Shadow Size", "Shadow size in pixels (0, 3 and 5 supported)");
prop= RNA_def_property(srna, "shadx", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, -10, 10);
RNA_def_property_ui_text(prop, "Shadow X Offset", "Shadow offset in pixels");
prop= RNA_def_property(srna, "shady", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, -10, 10);
RNA_def_property_ui_text(prop, "Shadow Y Offset", "Shadow offset in pixels");
prop= RNA_def_property(srna, "shadowalpha", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Shadow Alpha", "");
prop= RNA_def_property(srna, "shadowcolor", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Shadow Brightness", "Shadow color in grey value");
}
static void rna_def_userdef_theme_ui_style(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
rna_def_userdef_theme_ui_font_style(brna);
srna= RNA_def_struct(brna, "ThemeStyle", NULL);
RNA_def_struct_sdna(srna, "uiStyle");
RNA_def_struct_ui_text(srna, "Style", "Theme settings for style sets.");
prop= RNA_def_property(srna, "paneltitle", PROP_POINTER, 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 Font", "");
prop= RNA_def_property(srna, "grouplabel", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "grouplabel");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
RNA_def_property_ui_text(prop, "Group Label Font", "");
prop= RNA_def_property(srna, "widgetlabel", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "widgetlabel");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
RNA_def_property_ui_text(prop, "Widget Label Font", "");
prop= RNA_def_property(srna, "widget", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "widget");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
RNA_def_property_ui_text(prop, "Widget Font", "");
}
static void rna_def_userdef_theme_ui_wcol(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
srna= RNA_def_struct(brna, "ThemeWidgetColors", NULL);
RNA_def_struct_sdna(srna, "uiWidgetColors");
RNA_def_struct_ui_text(srna, "Theme Widget Color Set", "Theme settings for widget color sets.");
prop= RNA_def_property(srna, "outline", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Outline", "");
prop= RNA_def_property(srna, "inner", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Inner", "");
prop= RNA_def_property(srna, "inner_sel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Inner Selected", "");
prop= RNA_def_property(srna, "item", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Item", "");
prop= RNA_def_property(srna, "text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text", "");
prop= RNA_def_property(srna, "text_sel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text Selected", "");
prop= RNA_def_property(srna, "shaded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shaded", 1);
RNA_def_property_ui_text(prop, "Shaded", "");
prop= RNA_def_property(srna, "shadetop", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, -100, 100);
RNA_def_property_ui_text(prop, "Shade Top", "");
prop= RNA_def_property(srna, "shadedown", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, -100, 100);
RNA_def_property_ui_text(prop, "Shade Down", "");
}
static void rna_def_userdef_theme_ui(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
static EnumPropertyItem button_theme_styles[] = {
{TH_MINIMAL, "MINIMAL", "Minimal", ""},
{TH_SHADED, "SHADED", "Shaded", ""},
{TH_ROUNDED, "ROUNDED", "Rounded", ""},
{TH_ROUNDSHADED, "ROUNDSHADED", "Round Shaded", ""},
{TH_OLDSKOOL, "OLDSKOOL", "Old Skool", ""},
{0, NULL, NULL, NULL}};
rna_def_userdef_theme_ui_wcol(brna);
srna= RNA_def_struct(brna, "ThemeUserInterface", NULL);
RNA_def_struct_sdna(srna, "ThemeUI");
RNA_def_struct_ui_text(srna, "Theme User Interface", "Theme settings for user interface elements.");
prop= RNA_def_property(srna, "outline", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Outline", "");
prop= RNA_def_property(srna, "neutral", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Neutral", "");
prop= RNA_def_property(srna, "action", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Action", "");
prop= RNA_def_property(srna, "setting", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Setting", "");
prop= RNA_def_property(srna, "special_setting_1", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "setting1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Special Setting 1", "");
prop= RNA_def_property(srna, "special_setting_2", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "setting2");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Special Setting 2", "");
prop= RNA_def_property(srna, "number_input", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "num");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Number Input", "");
prop= RNA_def_property(srna, "text_field", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "textfield");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text Field", "");
prop= RNA_def_property(srna, "textfield_highlight", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "textfield_hi");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text Field Highlight", "");
prop= RNA_def_property(srna, "popup", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Popup", "");
prop= RNA_def_property(srna, "text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text", "");
prop= RNA_def_property(srna, "text_highlight", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "text_hi");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text highlight", "");
prop= RNA_def_property(srna, "menu_background", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "menu_back");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Menu Background", "");
prop= RNA_def_property(srna, "menu_item", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Menu Item", "");
prop= RNA_def_property(srna, "menu_highlight", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "menu_hilite");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Menu Highlight", "");
prop= RNA_def_property(srna, "menu_text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Menu Text", "");
prop= RNA_def_property(srna, "menu_text_highlight", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "menu_text_hi");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Menu Text Highlight", "");
prop= RNA_def_property(srna, "button_draw_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "but_drawtype");
RNA_def_property_enum_items(prop, button_theme_styles);
RNA_def_property_ui_text(prop, "Button Draw Type", "");
prop= RNA_def_property(srna, "wcol_regular", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_regular");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Regular Widget Colors", "");
prop= RNA_def_property(srna, "wcol_tool", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_tool");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Tool Widget Colors", "");
prop= RNA_def_property(srna, "wcol_radio", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_radio");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Radio Widget Colors", "");
prop= RNA_def_property(srna, "wcol_text", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_text");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Text Widget Colors", "");
prop= RNA_def_property(srna, "wcol_option", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_option");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Option Widget Colors", "");
prop= RNA_def_property(srna, "wcol_num", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_num");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Number Widget Colors", "");
prop= RNA_def_property(srna, "wcol_numslider", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_numslider");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Slider Widget Colors", "");
prop= RNA_def_property(srna, "wcol_menu", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Menu Widget Colors", "");
prop= RNA_def_property(srna, "wcol_pulldown", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_pulldown");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Pulldown Widget Colors", "");
prop= RNA_def_property(srna, "wcol_menu_back", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu_back");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Menu Backdrop Colors", "");
prop= RNA_def_property(srna, "wcol_menu_item", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu_item");
RNA_def_property_struct_type(prop, "ThemeWidgetColors");
RNA_def_property_ui_text(prop, "Menu Item Colors", "");
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", "");
}
static void rna_def_userdef_theme_spaces_main(StructRNA *srna)
static void rna_def_userdef_theme_spaces_main(StructRNA *srna, int spacetype)
{
PropertyRNA *prop;
/* window */
prop= RNA_def_property(srna, "back", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Back", "");
RNA_def_property_ui_text(prop, "Window Back", "");
prop= RNA_def_property(srna, "title", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Window Title", "");
prop= RNA_def_property(srna, "text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text", "");
RNA_def_property_ui_text(prop, "Window Text", "");
prop= RNA_def_property(srna, "text_highlight", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "text_hi");
prop= RNA_def_property(srna, "text_hi", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text Highlight", "");
RNA_def_property_ui_text(prop, "Window Text Highlight", "");
/* header */
prop= RNA_def_property(srna, "header", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Header", "");
prop= RNA_def_property(srna, "header_text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Header Text", "");
prop= RNA_def_property(srna, "header_text_hi", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Header Text Highlight", "");
/* buttons */
if(! ELEM(spacetype, SPACE_BUTS, SPACE_OUTLINER)) {
prop= RNA_def_property(srna, "button", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Button Back", "");
prop= RNA_def_property(srna, "button_title", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Button Title", "");
prop= RNA_def_property(srna, "button_text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Button Text", "");
prop= RNA_def_property(srna, "button_text_hi", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Button Text Highlight", "");
}
/* list/channels */
if(ELEM4(spacetype, SPACE_IPO, SPACE_ACTION, SPACE_NLA, SPACE_NODE)) {
prop= RNA_def_property(srna, "list", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "List Back", "");
prop= RNA_def_property(srna, "list_title", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "List Title", "");
prop= RNA_def_property(srna, "list_text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "List Text", "");
prop= RNA_def_property(srna, "list_text_hi", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "List Text Highlight", "");
}
}
static void rna_def_userdef_theme_spaces_vertex(StructRNA *srna)
@@ -314,7 +451,7 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme 3D View", "Theme settings for the 3D View.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_VIEW3D);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
@@ -382,18 +519,18 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Current Frame", "");
}
static void rna_def_userdef_theme_space_ipo(BlenderRNA *brna)
static void rna_def_userdef_theme_space_graph(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
/* space_ipo */
/* space_graph */
srna= RNA_def_struct(brna, "ThemeGraphEditor", NULL);
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Graph Editor", "Theme settings for the Ipo Editor.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_IPO);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
@@ -464,7 +601,7 @@ static void rna_def_userdef_theme_space_file(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme File Browser", "Theme settings for the File Browser.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_FILE);
prop= RNA_def_property(srna, "selected_file", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "hilite");
@@ -497,17 +634,17 @@ static void rna_def_userdef_theme_space_file(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active File Text", "");
}
static void rna_def_userdef_theme_space_oops(BlenderRNA *brna)
static void rna_def_userdef_theme_space_outliner(BlenderRNA *brna)
{
StructRNA *srna;
/* space_oops */
/* space_outliner */
srna= RNA_def_struct(brna, "ThemeOutliner", NULL);
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Outliner", "Theme settings for the Outliner.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_OUTLINER);
}
static void rna_def_userdef_theme_space_info(BlenderRNA *brna)
@@ -520,7 +657,7 @@ static void rna_def_userdef_theme_space_info(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme User Preferences", "Theme settings for the User Preferences.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_INFO);
}
static void rna_def_userdef_theme_space_text(BlenderRNA *brna)
@@ -534,7 +671,7 @@ static void rna_def_userdef_theme_space_text(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Text Editor", "Theme settings for the Text Editor.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_TEXT);
prop= RNA_def_property(srna, "line_numbers_background", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "grid");
@@ -593,7 +730,7 @@ static void rna_def_userdef_theme_space_node(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Node Editor", "Theme settings for the Node Editor.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_NODE);
prop= RNA_def_property(srna, "wires", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "wire");
@@ -647,7 +784,7 @@ static void rna_def_userdef_theme_space_buts(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Buttons Window", "Theme settings for the Buttons Window.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_BUTS);
prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
@@ -665,7 +802,7 @@ static void rna_def_userdef_theme_space_time(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Timeline", "Theme settings for the Timeline.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_TIME);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
@@ -688,7 +825,7 @@ static void rna_def_userdef_theme_space_sound(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Audio Window", "Theme settings for the Audio Window.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_SOUND);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
@@ -716,7 +853,7 @@ static void rna_def_userdef_theme_space_image(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Image Editor", "Theme settings for the Image Editor.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_IMAGE);
rna_def_userdef_theme_spaces_vertex(srna);
rna_def_userdef_theme_spaces_face(srna);
@@ -812,7 +949,7 @@ static void rna_def_userdef_theme_space_action(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme DopeSheet", "Theme settings for the DopeSheet.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_ACTION);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
@@ -885,7 +1022,7 @@ static void rna_def_userdef_theme_space_nla(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme NLA Editor", "Theme settings for the NLA Editor.");
rna_def_userdef_theme_spaces_main(srna);
rna_def_userdef_theme_spaces_main(srna, SPACE_NLA);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
@@ -1041,9 +1178,12 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
static void rna_def_userdef_dothemes(BlenderRNA *brna)
{
rna_def_userdef_theme_ui_style(brna);
rna_def_userdef_theme_ui(brna);
rna_def_userdef_theme_space_view3d(brna);
rna_def_userdef_theme_space_ipo(brna);
rna_def_userdef_theme_space_graph(brna);
rna_def_userdef_theme_space_file(brna);
rna_def_userdef_theme_space_nla(brna);
rna_def_userdef_theme_space_action(brna);
@@ -1053,7 +1193,7 @@ static void rna_def_userdef_dothemes(BlenderRNA *brna)
rna_def_userdef_theme_space_text(brna);
rna_def_userdef_theme_space_time(brna);
rna_def_userdef_theme_space_node(brna);
rna_def_userdef_theme_space_oops(brna);
rna_def_userdef_theme_space_outliner(brna);
rna_def_userdef_theme_space_info(brna);
rna_def_userdef_theme_space_sound(brna);
rna_def_userdef_theme_colorset(brna);
@@ -1791,6 +1931,11 @@ void RNA_def_userdef(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "themes", NULL);
RNA_def_property_struct_type(prop, "Theme");
RNA_def_property_ui_text(prop, "Themes", "");
prop= RNA_def_property(srna, "uistyles", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "uistyles", NULL);
RNA_def_property_struct_type(prop, "ThemeStyle");
RNA_def_property_ui_text(prop, "Styles", "");
/* nested structs */
prop= RNA_def_property(srna, "view", PROP_POINTER, PROP_NEVER_NULL);

View File

@@ -94,400 +94,6 @@
#include "wm.h"
#include "wm_window.h"
/***/
/* define for setting colors in theme below */
#define SETCOL(col, r, g, b, a) {col[0]=r; col[1]=g; col[2]= b; col[3]= a;}
/* patching UserDef struct and Themes */
static void init_userdef_themes(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;
}
/* check for text field selection highlight, set it to text editor highlight by default */
if(btheme->tui.textfield_hi[3]==0) {
SETCOL(btheme->tui.textfield_hi,
btheme->text.shade2[0],
btheme->text.shade2[1],
btheme->text.shade2[2],
255);
}
}
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);
}
if(!(btheme->tui.iconfile)) {
BLI_strncpy(btheme->tui.iconfile, "", sizeof(btheme->tui.iconfile));
}
}
/* 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;
}
/* 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;
}
MEM_CacheLimiter_set_maximum(U.memcachelimit * 1024 * 1024);
// sets themes, fonts, .. from userdef
UI_init_userdef();
/* funny name, but it is GE stuff, moves userdef stuff to engine */
// XXX space_set_commmandline_options();
/* this timer uses U */
// XXX reset_autosave();
}
/* To be able to read files without windows closing, opening, moving
we try to prepare for worst case:
@@ -612,6 +218,14 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
}
}
/* in case UserDef was read, we re-initialize all, and do versioning */
static void wm_init_userdef()
{
UI_init_userdef();
MEM_CacheLimiter_set_maximum(U.memcachelimit * 1024 * 1024);
}
void WM_read_file(bContext *C, char *name, ReportList *reports)
{
int retval;
@@ -639,7 +253,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
// XXX mainwindow_set_filename_to_title(G.main->name);
// XXX sound_initialize_sounds();
if(retval==2) init_userdef_themes(); // in case a userdef is read from regular .blend
if(retval==2) wm_init_userdef(); // in case a userdef is read from regular .blend
if (retval!=0) G.relbase_valid = 1;
@@ -663,6 +277,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
/* called on startup, (context entirely filled with NULLs) */
/* or called for 'Erase All' */
/* op can be NULL */
int WM_read_homefile(bContext *C, wmOperator *op)
{
ListBase wmbase;
@@ -676,7 +291,11 @@ int WM_read_homefile(bContext *C, wmOperator *op)
free_ttfont(); /* still weird... what does it here? */
G.relbase_valid = 0;
if (!from_memory) BLI_make_file_string(G.sce, tstr, home, ".B.blend");
if (!from_memory) {
BLI_make_file_string(G.sce, tstr, home, ".B25.blend");
if(!BLI_exists(tstr))
BLI_make_file_string(G.sce, tstr, home, ".B.blend");
}
strcpy(scestr, G.sce); /* temporary store */
/* prevent loading no UI */
@@ -697,7 +316,7 @@ int WM_read_homefile(bContext *C, wmOperator *op)
strcpy(G.sce, scestr); /* restore */
init_userdef_themes();
wm_init_userdef();
/* When loading factory settings, the reset solid OpenGL lights need to be applied. */
GPU_default_lights();
@@ -987,7 +606,7 @@ int WM_write_homefile(bContext *C, wmOperator *op)
char tstr[FILE_MAXDIR+FILE_MAXFILE];
int write_flags;
BLI_make_file_string("/", tstr, BLI_gethome(), ".B.blend");
BLI_make_file_string("/", tstr, BLI_gethome(), ".B25.blend");
/* force save as regular blend file */
write_flags = G.fileflags & ~(G_FILE_COMPRESS | G_FILE_LOCK | G_FILE_SIGN);