2 * $Id: resources.c 12755 2007-12-02 05:50:38Z aligorith $
4 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version. The Blender
10 * Foundation also sells licenses for use in proprietary software under
11 * the Blender License. See http://www.blender.org/BL/ for information
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software Foundation,
21 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24 * All rights reserved.
26 * The Original Code is: all of this file.
28 * Contributor(s): none yet.
30 * ***** END GPL/BL DUAL LICENSE BLOCK *****
41 #include "MEM_guardedalloc.h"
43 #include "DNA_listBase.h"
44 #include "DNA_userdef_types.h"
45 #include "DNA_screen_types.h"
46 #include "DNA_space_types.h"
48 #include "IMB_imbuf.h"
49 #include "IMB_imbuf_types.h"
51 #include "BKE_utildefines.h"
55 #include "UI_resources.h"
56 #include "UI_interface_icons.h"
57 //#include "UI_icons.h"
59 #include "BLI_blenlib.h"
61 /* global for themes */
62 typedef void (*VectorDrawFunc)(int x, int y, int w, int h, float alpha);
64 static bTheme *theme_active=NULL;
65 static int theme_spacetype= SPACE_VIEW3D;
68 void ui_resources_init(void)
70 UI_icons_init(BIFICONID_LAST+1);
73 void ui_resources_free(void)
79 /* ******************************************************** */
81 /* ******************************************************** */
83 char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
86 static char error[4]={240, 0, 240, 255};
87 static char alert[4]={240, 60, 60, 255};
88 static char headerdesel[4]={0,0,0,255};
89 static char custom[4]={0,0,0,255};
95 // first check for ui buttons theme
96 if(colorid < TH_THEMEUI) {
100 cp= btheme->tui.outline; break;
102 cp= btheme->tui.neutral; break;
104 cp= btheme->tui.action; break;
106 cp= btheme->tui.setting; break;
107 case TH_BUT_SETTING1:
108 cp= btheme->tui.setting1; break;
109 case TH_BUT_SETTING2:
110 cp= btheme->tui.setting2; break;
112 cp= btheme->tui.num; break;
113 case TH_BUT_TEXTFIELD:
114 cp= btheme->tui.textfield; break;
115 case TH_BUT_TEXTFIELD_HI:
116 cp= btheme->tui.textfield_hi; break;
118 cp= btheme->tui.popup; break;
120 cp= btheme->tui.text; break;
122 cp= btheme->tui.text_hi; break;
124 cp= btheme->tui.menu_back; break;
126 cp= btheme->tui.menu_item; break;
128 cp= btheme->tui.menu_hilite; break;
130 cp= btheme->tui.menu_text; break;
131 case TH_MENU_TEXT_HI:
132 cp= btheme->tui.menu_text_hi; break;
134 case TH_BUT_DRAWTYPE:
135 cp= &btheme->tui.but_drawtype; break;
138 cp= btheme->tui.iconfile; break;
174 ts= &btheme->timasel;
205 cp= ts->text_hi; break;
207 cp= ts->header; break;
209 /* we calculate a dynamic builtin header deselect color, also for pulldowns... */
211 headerdesel[0]= cp[0]>10?cp[0]-10:0;
212 headerdesel[1]= cp[1]>10?cp[1]-10:0;
213 headerdesel[2]= cp[2]>10?cp[2]-10:0;
217 cp= ts->panel; break;
219 cp= ts->shade1; break;
221 cp= ts->shade2; break;
223 cp= ts->hilite; break;
232 cp= ts->select; break;
234 cp= ts->active; break;
236 cp= ts->group; break;
237 case TH_GROUP_ACTIVE:
238 cp= ts->group_active; break;
240 cp= ts->transform; break;
242 cp= ts->vertex; break;
243 case TH_VERTEX_SELECT:
244 cp= ts->vertex_select; break;
246 cp= &ts->vertex_size; break;
250 cp= ts->edge_select; break;
252 cp= ts->edge_seam; break;
254 cp= ts->edge_sharp; break;
255 case TH_EDITMESH_ACTIVE:
256 cp= ts->editmesh_active; break;
257 case TH_EDGE_FACESEL:
258 cp= ts->edge_facesel; break;
262 cp= ts->face_select; break;
264 cp= ts->face_dot; break;
265 case TH_FACEDOT_SIZE:
266 cp= &ts->facedot_size; break;
268 cp= ts->normal; break;
270 cp= ts->bone_solid; break;
272 cp= ts->bone_pose; break;
274 cp= ts->strip; break;
275 case TH_STRIP_SELECT:
276 cp= ts->strip_select; break;
278 cp= ts->cframe; break;
281 cp= ts->syntaxb; break;
283 cp= ts->syntaxv; break;
285 cp= ts->syntaxc; break;
287 cp= ts->syntaxl; break;
289 cp= ts->syntaxn; break;
292 cp= ts->syntaxl; break;
294 cp= ts->syntaxn; break;
295 case TH_NODE_OPERATOR:
296 cp= ts->syntaxb; break;
297 case TH_NODE_CONVERTOR:
298 cp= ts->syntaxv; break;
300 cp= ts->syntaxc; break;
303 cp= ts->movie; break;
305 cp= ts->image; break;
307 cp= ts->scene; break;
309 cp= ts->audio; break;
311 cp= ts->effect; break;
313 cp= ts->plugin; break;
314 case TH_SEQ_TRANSITION:
315 cp= ts->transition; break;
319 case TH_HANDLE_VERTEX:
320 cp= ts->handle_vertex;
322 case TH_HANDLE_VERTEX_SELECT:
323 cp= ts->handle_vertex_select;
325 case TH_HANDLE_VERTEX_SIZE:
326 cp= &ts->handle_vertex_size;
329 case TH_DOPESHEET_CHANNELOB:
332 case TH_DOPESHEET_CHANNELSUBOB:
333 cp= ts->ds_subchannel;
343 #define SETCOL(col, r, g, b, a) col[0]=r; col[1]=g; col[2]= b; col[3]= a;
346 Note: when you add new colors, created & saved themes need initialized
347 in usiblender.c, search for "versionfile"
349 void ui_theme_init_userdef(void)
351 bTheme *btheme= U.themes.first;
353 /* we search for the theme with name Default */
354 for(btheme= U.themes.first; btheme; btheme= btheme->next) {
355 if(strcmp("Default", btheme->name)==0) break;
359 btheme= MEM_callocN(sizeof(bTheme), "theme");
360 BLI_addtail(&U.themes, btheme);
361 strcpy(btheme->name, "Default");
364 UI_SetTheme(NULL); // make sure the global used in this file is set
366 /* UI buttons (todo) */
367 SETCOL(btheme->tui.outline, 0xA0,0xA0,0xA0, 255);
368 SETCOL(btheme->tui.neutral, 180, 180, 180, 255);
369 SETCOL(btheme->tui.action, 180, 180, 180, 255);
370 SETCOL(btheme->tui.setting, 180, 180, 180, 255);
371 SETCOL(btheme->tui.setting1, 180, 180, 180, 255);
372 SETCOL(btheme->tui.setting2, 180, 180, 180, 255);
373 SETCOL(btheme->tui.num, 180, 180, 180, 255);
374 SETCOL(btheme->tui.textfield, 143, 142, 143, 255);
375 SETCOL(btheme->tui.textfield_hi,255, 151, 26, 255);
376 SETCOL(btheme->tui.popup, 174, 174, 174, 255);
378 SETCOL(btheme->tui.text, 0,0,0, 255);
379 SETCOL(btheme->tui.text_hi, 255, 255, 255, 255);
381 SETCOL(btheme->tui.menu_back, 220, 220, 220, 235);
382 SETCOL(btheme->tui.menu_item, 255, 255, 255, 20);
383 SETCOL(btheme->tui.menu_hilite, 110, 110, 110, 255);
384 SETCOL(btheme->tui.menu_text, 0, 0, 0, 255);
385 SETCOL(btheme->tui.menu_text_hi, 255, 255, 255, 255);
387 btheme->tui.but_drawtype= TH_ROUNDSHADED;
388 BLI_strncpy(btheme->tui.iconfile, "", sizeof(btheme->tui.iconfile));
391 SETCOL(btheme->tv3d.back, 90, 90, 90, 255);
392 SETCOL(btheme->tv3d.text, 0, 0, 0, 255);
393 SETCOL(btheme->tv3d.text_hi, 255, 255, 255, 255);
394 SETCOL(btheme->tv3d.header, 195, 195, 195, 255);
395 SETCOL(btheme->tv3d.panel, 165, 165, 165, 127);
397 SETCOL(btheme->tv3d.shade1, 160, 160, 160, 100);
398 SETCOL(btheme->tv3d.shade2, 0x7f, 0x70, 0x70, 100);
400 SETCOL(btheme->tv3d.grid, 74, 74, 74 , 255);
401 SETCOL(btheme->tv3d.wire, 0x0, 0x0, 0x0, 255);
402 SETCOL(btheme->tv3d.lamp, 0, 0, 0, 40);
403 SETCOL(btheme->tv3d.select, 241, 88, 0, 255);
404 SETCOL(btheme->tv3d.active, 255, 140, 25, 255);
405 SETCOL(btheme->tv3d.group, 16, 64, 16, 255);
406 SETCOL(btheme->tv3d.group_active, 85, 187, 85, 255);
407 SETCOL(btheme->tv3d.transform, 0xff, 0xff, 0xff, 255);
408 SETCOL(btheme->tv3d.vertex, 0, 0, 0, 255);
409 SETCOL(btheme->tv3d.vertex_select, 255, 133, 0, 255);
410 btheme->tv3d.vertex_size= 3;
411 SETCOL(btheme->tv3d.edge, 0x0, 0x0, 0x0, 255);
412 SETCOL(btheme->tv3d.edge_select, 255, 160, 0, 255);
413 SETCOL(btheme->tv3d.edge_seam, 219, 37, 18, 255);
414 SETCOL(btheme->tv3d.edge_facesel, 75, 75, 75, 255);
415 SETCOL(btheme->tv3d.face, 0, 0, 0, 18);
416 SETCOL(btheme->tv3d.face_select, 255, 133, 0, 60);
417 SETCOL(btheme->tv3d.normal, 0x22, 0xDD, 0xDD, 255);
418 SETCOL(btheme->tv3d.face_dot, 255, 133, 0, 255);
419 btheme->tv3d.facedot_size= 4;
420 SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255);
422 SETCOL(btheme->tv3d.bone_solid, 200, 200, 200, 255);
423 SETCOL(btheme->tv3d.bone_pose, 80, 200, 255, 80); // alpha 80 is not meant editable, used for wire+action draw
427 /* to have something initialized */
428 btheme->tbuts= btheme->tv3d;
430 SETCOL(btheme->tbuts.back, 180, 180, 180, 255);
431 SETCOL(btheme->tbuts.header, 195, 195, 195, 255);
432 SETCOL(btheme->tbuts.panel, 255, 255, 255, 40);
435 /* to have something initialized */
436 btheme->tipo= btheme->tv3d;
438 SETCOL(btheme->tipo.grid, 94, 94, 94, 255);
439 SETCOL(btheme->tipo.back, 120, 120, 120, 255);
440 SETCOL(btheme->tipo.header, 195, 195, 195, 255);
441 SETCOL(btheme->tipo.panel, 255, 255, 255, 150);
442 SETCOL(btheme->tipo.shade1, 172, 172, 172, 100);
443 SETCOL(btheme->tipo.shade2, 0x70, 0x70, 0x70, 100);
444 SETCOL(btheme->tipo.vertex, 0, 0, 0, 255);
445 SETCOL(btheme->tipo.vertex_select, 255, 133, 0, 255);
446 SETCOL(btheme->tipo.hilite, 0x60, 0xc0, 0x40, 255);
447 btheme->tipo.vertex_size= 3;
449 SETCOL(btheme->tipo.handle_vertex, 0, 0, 0, 255);
450 SETCOL(btheme->tipo.handle_vertex_select, 255, 133, 0, 255);
451 btheme->tipo.handle_vertex_size= 3;
453 SETCOL(btheme->tipo.ds_channel, 82, 96, 110, 255);
454 SETCOL(btheme->tipo.ds_subchannel, 124, 137, 150, 255);
455 SETCOL(btheme->tipo.group, 79, 101, 73, 255);
456 SETCOL(btheme->tipo.group_active, 135, 177, 125, 255);
459 /* to have something initialized */
460 btheme->tfile= btheme->tv3d;
461 SETCOL(btheme->tfile.back, 90, 90, 90, 255);
462 SETCOL(btheme->tfile.text, 250, 250, 250, 255);
463 SETCOL(btheme->tfile.text_hi, 15, 15, 15, 255);
464 SETCOL(btheme->tfile.header, 195, 195, 195, 255);
465 SETCOL(btheme->tfile.panel, 195, 195, 195, 255); // bookmark/ui regions
466 SETCOL(btheme->tfile.active, 130, 130, 130, 255); // selected files
467 SETCOL(btheme->tfile.hilite, 255, 140, 25, 255); // selected files
469 SETCOL(btheme->tfile.grid, 250, 250, 250, 255);
470 SETCOL(btheme->tfile.image, 250, 250, 250, 255);
471 SETCOL(btheme->tfile.movie, 250, 250, 250, 255);
472 SETCOL(btheme->tfile.scene, 250, 250, 250, 255);
476 btheme->tact= btheme->tv3d;
477 SETCOL(btheme->tact.back, 116, 116, 116, 255);
478 SETCOL(btheme->tact.text, 0, 0, 0, 255);
479 SETCOL(btheme->tact.text_hi, 255, 255, 255, 255);
480 SETCOL(btheme->tact.header, 182, 182, 182, 255);
481 SETCOL(btheme->tact.grid, 94, 94, 94, 255);
482 SETCOL(btheme->tact.face, 166, 166, 166, 255); // RVK
483 SETCOL(btheme->tact.shade1, 172, 172, 172, 255); // sliders
484 SETCOL(btheme->tact.shade2, 74, 74, 74, 100); // bar
485 SETCOL(btheme->tact.hilite, 255, 160, 0, 100); // bar
486 SETCOL(btheme->tact.strip_select, 255, 160, 0, 255);
487 SETCOL(btheme->tact.strip, 78, 78, 78, 255);
488 SETCOL(btheme->tact.group, 79, 101, 73, 255);
489 SETCOL(btheme->tact.group_active, 135, 177, 125, 255)
490 SETCOL(btheme->tact.ds_channel, 82, 96, 110, 255);
491 SETCOL(btheme->tact.ds_subchannel, 124, 137, 150, 255);
495 btheme->tnla= btheme->tv3d;
496 SETCOL(btheme->tnla.back, 116, 116, 116, 255);
497 SETCOL(btheme->tnla.text, 0, 0, 0, 255);
498 SETCOL(btheme->tnla.text_hi, 255, 255, 255, 255);
499 SETCOL(btheme->tnla.header, 182, 182, 182, 255);
500 SETCOL(btheme->tnla.grid, 94, 94, 94, 255);
501 SETCOL(btheme->tnla.shade1, 172, 172, 172, 255); // sliders
502 SETCOL(btheme->tnla.shade2, 84, 44, 31, 100); // bar
503 SETCOL(btheme->tnla.hilite, 17, 27, 60, 100); // bar
504 SETCOL(btheme->tnla.strip_select, 0xff, 0xff, 0xaa, 255);
505 SETCOL(btheme->tnla.strip, 0xe4, 0x9c, 0xc6, 255);
508 btheme->tseq= btheme->tv3d;
509 SETCOL(btheme->tseq.back, 116, 116, 116, 255);
510 SETCOL(btheme->tseq.movie, 81, 105, 135, 255);
511 SETCOL(btheme->tseq.image, 109, 88, 129, 255);
512 SETCOL(btheme->tseq.scene, 78, 152, 62, 255);
513 SETCOL(btheme->tseq.audio, 46, 143, 143, 255);
514 SETCOL(btheme->tseq.effect, 169, 84, 124, 255);
515 SETCOL(btheme->tseq.plugin, 126, 126, 80, 255);
516 SETCOL(btheme->tseq.transition, 162, 95, 111, 255);
517 SETCOL(btheme->tseq.meta, 109, 145, 131, 255);
521 btheme->tima= btheme->tv3d;
522 SETCOL(btheme->tima.back, 53, 53, 53, 255);
523 SETCOL(btheme->tima.vertex, 0, 0, 0, 255);
524 SETCOL(btheme->tima.vertex_select, 255, 133, 0, 255);
525 btheme->tima.vertex_size= 3;
526 btheme->tima.facedot_size= 3;
527 SETCOL(btheme->tima.face, 255, 255, 255, 10);
528 SETCOL(btheme->tima.face_select, 255, 133, 0, 60);
529 SETCOL(btheme->tima.editmesh_active, 255, 255, 255, 128);
531 /* space imageselect */
532 btheme->timasel= btheme->tv3d;
533 SETCOL(btheme->timasel.active, 195, 195, 195, 255); /* active tile */
534 SETCOL(btheme->timasel.grid, 94, 94, 94, 255); /* active file text */
535 SETCOL(btheme->timasel.back, 110, 110, 110, 255);
536 SETCOL(btheme->timasel.header, 195, 195, 195, 255);
537 SETCOL(btheme->timasel.shade1, 94, 94, 94, 255); /* bar */
538 SETCOL(btheme->timasel.shade2, 172, 172, 172, 255); /* sliders */
539 SETCOL(btheme->timasel.hilite, 17, 27, 60, 100); /* selected tile */
540 SETCOL(btheme->timasel.text, 0, 0, 0, 255);
541 SETCOL(btheme->timasel.text_hi, 255, 255, 255, 255);
542 SETCOL(btheme->timasel.panel, 132, 132, 132, 255);
545 btheme->text= btheme->tv3d;
546 SETCOL(btheme->text.back, 153, 153, 153, 255);
547 SETCOL(btheme->text.shade1, 143, 143, 143, 255);
548 SETCOL(btheme->text.shade2, 0xc6, 0x77, 0x77, 255);
549 SETCOL(btheme->text.hilite, 255, 0, 0, 255);
551 /* syntax highlighting */
552 SETCOL(btheme->text.syntaxn, 0, 0, 200, 255); /* Numbers Blue*/
553 SETCOL(btheme->text.syntaxl, 100, 0, 0, 255); /* Strings red */
554 SETCOL(btheme->text.syntaxc, 0, 100, 50, 255); /* Comments greenish */
555 SETCOL(btheme->text.syntaxv, 95, 95, 0, 255); /* Special */
556 SETCOL(btheme->text.syntaxb, 128, 0, 80, 255); /* Builtin, red-purple */
559 btheme->toops= btheme->tv3d;
560 SETCOL(btheme->toops.back, 153, 153, 153, 255);
563 btheme->tinfo= btheme->tv3d;
564 SETCOL(btheme->tinfo.back, 153, 153, 153, 255);
567 btheme->tsnd= btheme->tv3d;
568 SETCOL(btheme->tsnd.back, 153, 153, 153, 255);
569 SETCOL(btheme->tsnd.shade1, 173, 173, 173, 255); // sliders
570 SETCOL(btheme->tsnd.grid, 140, 140, 140, 255);
573 btheme->ttime= btheme->tsnd; // same as sound space
575 /* space node, re-uses syntax color storage */
576 btheme->tnode= btheme->tv3d;
577 SETCOL(btheme->tnode.edge_select, 255, 255, 255, 255);
578 SETCOL(btheme->tnode.syntaxl, 150, 150, 150, 255); /* TH_NODE, backdrop */
579 SETCOL(btheme->tnode.syntaxn, 129, 131, 144, 255); /* in/output */
580 SETCOL(btheme->tnode.syntaxb, 127,127,127, 255); /* operator */
581 SETCOL(btheme->tnode.syntaxv, 142, 138, 145, 255); /* generator */
582 SETCOL(btheme->tnode.syntaxc, 120, 145, 120, 255); /* group */
586 char *UI_ThemeColorsPup(int spacetype)
588 char *cp= MEM_callocN(32*32, "theme pup");
592 str += sprintf(str, "Outline %%x%d|", TH_BUT_OUTLINE);
593 str += sprintf(str, "Neutral %%x%d|", TH_BUT_NEUTRAL);
594 str += sprintf(str, "Action %%x%d|", TH_BUT_ACTION);
595 str += sprintf(str, "Setting %%x%d|", TH_BUT_SETTING);
596 str += sprintf(str, "Special Setting 1%%x%d|", TH_BUT_SETTING1);
597 str += sprintf(str, "Special Setting 2 %%x%d|", TH_BUT_SETTING2);
598 str += sprintf(str, "Number Input %%x%d|", TH_BUT_NUM);
599 str += sprintf(str, "Text Input %%x%d|", TH_BUT_TEXTFIELD);
600 str += sprintf(str, "Text Input Highlight %%x%d|", TH_BUT_TEXTFIELD_HI);
601 str += sprintf(str, "Popup %%x%d|", TH_BUT_POPUP);
602 str += sprintf(str, "Text %%x%d|", TH_BUT_TEXT);
603 str += sprintf(str, "Text Highlight %%x%d|", TH_BUT_TEXT_HI);
604 str += sprintf(str, "%%l|");
605 str += sprintf(str, "Menu Background %%x%d|", TH_MENU_BACK);
606 str += sprintf(str, "Menu Item %%x%d|", TH_MENU_ITEM);
607 str += sprintf(str, "Menu Item Highlight %%x%d|", TH_MENU_HILITE);
608 str += sprintf(str, "Menu Text %%x%d|", TH_MENU_TEXT);
609 str += sprintf(str, "Menu Text Highlight %%x%d|", TH_MENU_TEXT_HI);
610 str += sprintf(str, "%%l|");
611 str += sprintf(str, "Drawtype %%x%d|", TH_BUT_DRAWTYPE);
612 str += sprintf(str, "%%l|");
613 str += sprintf(str, "Icon File %%x%d|", TH_ICONFILE);
616 // first defaults for each space
617 str += sprintf(str, "Background %%x%d|", TH_BACK);
618 str += sprintf(str, "Text %%x%d|", TH_TEXT);
619 str += sprintf(str, "Text Highlight %%x%d|", TH_TEXT_HI);
620 str += sprintf(str, "Header %%x%d|", TH_HEADER);
624 str += sprintf(str, "Panel %%x%d|", TH_PANEL);
625 str += sprintf(str, "%%l|");
626 str += sprintf(str, "Grid %%x%d|", TH_GRID);
627 str += sprintf(str, "Wire %%x%d|", TH_WIRE);
628 str += sprintf(str, "Lamp %%x%d|", TH_LAMP);
629 str += sprintf(str, "Object Selected %%x%d|", TH_SELECT);
630 str += sprintf(str, "Object Active %%x%d|", TH_ACTIVE);
631 str += sprintf(str, "Object Grouped %%x%d|", TH_GROUP);
632 str += sprintf(str, "Object Grouped Active %%x%d|", TH_GROUP_ACTIVE);
633 str += sprintf(str, "Transform %%x%d|", TH_TRANSFORM);
634 str += sprintf(str, "%%l|");
635 str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
636 str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
637 str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
638 str += sprintf(str, "Edge Selected %%x%d|", TH_EDGE_SELECT);
639 str += sprintf(str, "Edge Seam %%x%d|", TH_EDGE_SEAM);
640 str += sprintf(str, "Edge Sharp %%x%d|", TH_EDGE_SHARP);
641 str += sprintf(str, "Edge UV Face Select %%x%d|", TH_EDGE_FACESEL);
642 str += sprintf(str, "Face (transp) %%x%d|", TH_FACE);
643 str += sprintf(str, "Face Selected (transp) %%x%d|", TH_FACE_SELECT);
644 str += sprintf(str, "Face Dot Selected %%x%d|", TH_FACE_DOT);
645 str += sprintf(str, "Face Dot Size %%x%d|", TH_FACEDOT_SIZE);
646 str += sprintf(str, "Active Vert/Edge/Face %%x%d|", TH_EDITMESH_ACTIVE);
647 str += sprintf(str, "Normal %%x%d|", TH_NORMAL);
648 str += sprintf(str, "Bone Solid %%x%d|", TH_BONE_SOLID);
649 str += sprintf(str, "Bone Pose %%x%d", TH_BONE_POSE);
650 str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
653 str += sprintf(str, "Panel %%x%d|", TH_PANEL);
654 str += sprintf(str, "%%l|");
655 str += sprintf(str, "Grid %%x%d|", TH_GRID);
656 str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1);
657 str += sprintf(str, "Ipo Channels %%x%d|", TH_SHADE2);
658 str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
659 str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
660 str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
661 str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
664 str += sprintf(str, "Selected file %%x%d", TH_HILITE);
667 //str += sprintf(str, "Panel %%x%d|", TH_PANEL);
668 str += sprintf(str, "%%l|");
669 str += sprintf(str, "Grid %%x%d|", TH_GRID);
670 str += sprintf(str, "View Sliders %%x%d|", TH_SHADE1);
671 str += sprintf(str, "Bars %%x%d|", TH_SHADE2);
672 str += sprintf(str, "Bars selected %%x%d|", TH_HILITE);
673 str += sprintf(str, "Strips %%x%d|", TH_STRIP);
674 str += sprintf(str, "Strips selected %%x%d|", TH_STRIP_SELECT);
675 str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
678 //str += sprintf(str, "Panel %%x%d|", TH_PANEL);
679 str += sprintf(str, "%%l|");
680 str += sprintf(str, "Grid %%x%d|", TH_GRID);
681 str += sprintf(str, "RVK Sliders %%x%d|", TH_FACE);
682 str += sprintf(str, "View Sliders %%x%d|", TH_SHADE1);
683 str += sprintf(str, "Channels %%x%d|", TH_SHADE2);
684 str += sprintf(str, "Channels Selected %%x%d|", TH_HILITE);
685 str += sprintf(str, "Long Key %%x%d|", TH_STRIP);
686 str += sprintf(str, "Long Key selected %%x%d|", TH_STRIP_SELECT);
687 str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
690 str += sprintf(str, "%%l|");
691 str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
692 str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
693 str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
694 str += sprintf(str, "Face %%x%d|", TH_FACE);
695 str += sprintf(str, "Face Selected %%x%d", TH_FACE_SELECT);
698 str += sprintf(str, "Grid %%x%d|", TH_GRID);
699 str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1);
700 str += sprintf(str, "%%l|");
701 str += sprintf(str, "Movie Strip %%x%d|", TH_SEQ_MOVIE);
702 str += sprintf(str, "Image Strip %%x%d|", TH_SEQ_IMAGE);
703 str += sprintf(str, "Scene Strip %%x%d|", TH_SEQ_SCENE);
704 str += sprintf(str, "Audio Strip %%x%d|", TH_SEQ_AUDIO);
705 str += sprintf(str, "Effect Strip %%x%d|", TH_SEQ_EFFECT);
706 str += sprintf(str, "Plugin Strip %%x%d|", TH_SEQ_PLUGIN);
707 str += sprintf(str, "Transition Strip %%x%d|", TH_SEQ_TRANSITION);
708 str += sprintf(str, "Meta Strip %%x%d|", TH_SEQ_META);
709 str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
712 str += sprintf(str, "Grid %%x%d|", TH_GRID);
713 str += sprintf(str, "Window Slider %%x%d|", TH_SHADE1);
714 str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
717 str += sprintf(str, "Panel %%x%d|", TH_PANEL);
720 str += sprintf(str, "Tiles %%x%d|", TH_PANEL);
721 str += sprintf(str, "Scrollbar %%x%d|", TH_SHADE1);
722 str += sprintf(str, "Scroll Handle %%x%d|", TH_SHADE2);
723 str += sprintf(str, "Selected File %%x%d|", TH_HILITE);
724 str += sprintf(str, "Active File %%x%d|", TH_ACTIVE);
725 str += sprintf(str, "Active File Text%%x%d|", TH_GRID);
728 str += sprintf(str, "Scroll Bar %%x%d|", TH_SHADE1);
729 str += sprintf(str, "Selected Text %%x%d|", TH_SHADE2);
730 str += sprintf(str, "Cursor %%x%d|", TH_HILITE);
731 str += sprintf(str, "%%l|");
732 str += sprintf(str, "Syntax Builtin %%x%d|", TH_SYNTAX_B);
733 str += sprintf(str, "Syntax Special %%x%d|", TH_SYNTAX_V);
734 str += sprintf(str, "Syntax Comment %%x%d|", TH_SYNTAX_C);
735 str += sprintf(str, "Syntax Strings %%x%d|", TH_SYNTAX_L);
736 str += sprintf(str, "Syntax Numbers %%x%d|", TH_SYNTAX_N);
739 str += sprintf(str, "Grid %%x%d|", TH_GRID);
740 str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
743 str += sprintf(str, "Wires %%x%d|", TH_WIRE);
744 str += sprintf(str, "Wires Select %%x%d|", TH_EDGE_SELECT);
745 str += sprintf(str, "%%l|");
746 str += sprintf(str, "Node Backdrop %%x%d|", TH_NODE);
747 str += sprintf(str, "In/Out Node %%x%d|", TH_NODE_IN_OUT);
748 str += sprintf(str, "Convertor Node %%x%d|", TH_NODE_CONVERTOR);
749 str += sprintf(str, "Operator Node %%x%d|", TH_NODE_OPERATOR);
750 str += sprintf(str, "Group Node %%x%d|", TH_NODE_GROUP);
757 void UI_SetTheme(ScrArea *sa)
759 if(sa==NULL) { // called for safety, when delete themes
760 theme_active= U.themes.first;
761 theme_spacetype= SPACE_VIEW3D;
764 // later on, a local theme can be found too
765 theme_active= U.themes.first;
766 theme_spacetype= sa->spacetype;
771 // for space windows only
772 void UI_ThemeColor(int colorid)
776 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
777 glColor3ub(cp[0], cp[1], cp[2]);
782 void UI_ThemeColor4(int colorid)
786 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
787 glColor4ub(cp[0], cp[1], cp[2], cp[3]);
791 // set the color with offset for shades
792 void UI_ThemeColorShade(int colorid, int offset)
797 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
798 r= offset + (int) cp[0];
800 g= offset + (int) cp[1];
802 b= offset + (int) cp[2];
804 //glColor3ub(r, g, b);
805 glColor4ub(r, g, b, cp[3]);
807 void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset)
812 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
813 r= coloffset + (int) cp[0];
815 g= coloffset + (int) cp[1];
817 b= coloffset + (int) cp[2];
819 a= alphaoffset + (int) cp[3];
821 glColor4ub(r, g, b, a);
824 // blend between to theme colors, and set it
825 void UI_ThemeColorBlend(int colorid1, int colorid2, float fac)
830 cp1= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
831 cp2= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
833 if(fac<0.0) fac=0.0; else if(fac>1.0) fac= 1.0;
834 r= floor((1.0-fac)*cp1[0] + fac*cp2[0]);
835 g= floor((1.0-fac)*cp1[1] + fac*cp2[1]);
836 b= floor((1.0-fac)*cp1[2] + fac*cp2[2]);
841 // blend between to theme colors, shade it, and set it
842 void UI_ThemeColorBlendShade(int colorid1, int colorid2, float fac, int offset)
847 cp1= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
848 cp2= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
850 if(fac<0.0) fac=0.0; else if(fac>1.0) fac= 1.0;
851 r= offset+floor((1.0-fac)*cp1[0] + fac*cp2[0]);
852 g= offset+floor((1.0-fac)*cp1[1] + fac*cp2[1]);
853 b= offset+floor((1.0-fac)*cp1[2] + fac*cp2[2]);
862 // blend between to theme colors, shade it, and set it
863 void UI_ThemeColorBlendShadeAlpha(int colorid1, int colorid2, float fac, int offset, int alphaoffset)
868 cp1= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
869 cp2= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
871 if(fac<0.0) fac=0.0; else if(fac>1.0) fac= 1.0;
872 r= offset+floor((1.0-fac)*cp1[0] + fac*cp2[0]);
873 g= offset+floor((1.0-fac)*cp1[1] + fac*cp2[1]);
874 b= offset+floor((1.0-fac)*cp1[2] + fac*cp2[2]);
875 a= alphaoffset+floor((1.0-fac)*cp1[3] + fac*cp2[3]);
882 glColor4ub(r, g, b, a);
886 // get individual values, not scaled
887 float UI_GetThemeValuef(int colorid)
891 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
892 return ((float)cp[0]);
896 // get individual values, not scaled
897 int UI_GetThemeValue(int colorid)
901 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
902 return ((int) cp[0]);
907 // get the color, range 0.0-1.0
908 void UI_GetThemeColor3fv(int colorid, float *col)
912 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
913 col[0]= ((float)cp[0])/255.0;
914 col[1]= ((float)cp[1])/255.0;
915 col[2]= ((float)cp[2])/255.0;
918 // get the color, in char pointer
919 void UI_GetThemeColor3ubv(int colorid, char *col)
923 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
929 // get the color, in char pointer
930 void UI_GetThemeColor4ubv(int colorid, char *col)
934 cp= UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
941 void UI_GetThemeColorType4ubv(int colorid, int spacetype, char *col)
945 cp= UI_ThemeGetColorPtr(theme_active, spacetype, colorid);
952 // blends and shades between two char color pointers
953 void UI_ColorPtrBlendShade3ubv(char *cp1, char *cp2, float fac, int offset)
957 if(fac<0.0) fac=0.0; else if(fac>1.0) fac= 1.0;
958 r= offset+floor((1.0-fac)*cp1[0] + fac*cp2[0]);
959 g= offset+floor((1.0-fac)*cp1[1] + fac*cp2[1]);
960 b= offset+floor((1.0-fac)*cp1[2] + fac*cp2[2]);
962 r= r<0?0:(r>255?255:r);
963 g= g<0?0:(g>255?255:g);
964 b= b<0?0:(b>255?255:b);
969 // get a 3 byte color, blended and shaded between two other char color pointers
970 void UI_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, int offset)
974 if(fac<0.0) fac=0.0; else if(fac>1.0) fac= 1.0;
975 r= offset+floor((1.0-fac)*cp1[0] + fac*cp2[0]);
976 g= offset+floor((1.0-fac)*cp1[1] + fac*cp2[1]);
977 b= offset+floor((1.0-fac)*cp1[2] + fac*cp2[2]);
979 r= r<0?0:(r>255?255:r);
980 g= g<0?0:(g>255?255:g);
981 b= b<0?0:(b>255?255:b);