Blender V5.0
resources.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <cmath>
10#include <cstdlib>
11#include <cstring>
12
13#include "MEM_guardedalloc.h"
14
15#include "DNA_screen_types.h"
16#include "DNA_space_types.h"
17#include "DNA_userdef_types.h"
18
19#include "BLI_listbase.h"
20#include "BLI_math_vector.h"
21#include "BLI_string_utf8.h"
22#include "BLI_utildefines.h"
23
24#include "BKE_addon.h"
25#include "BKE_appdir.hh"
26
27#include "BLO_userdef_default.h"
28
29#include "BLF_api.hh"
30
31#include "ED_screen.hh"
32
33#include "UI_interface_icons.hh"
34
35#include "GPU_framebuffer.hh"
36#include "interface_intern.hh"
37
38/* be sure to keep 'bThemeState' in sync */
40 nullptr,
43};
44
45/* -------------------------------------------------------------------- */
48
50{
52}
53
55{
57}
58
60
61/* -------------------------------------------------------------------- */
64
65const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
66{
67 ThemeSpace *ts = nullptr;
68 static uchar error[4] = {240, 0, 240, 255};
69 static uchar back[4] = {0, 0, 0, 255};
70 static uchar none[4] = {0, 0, 0, 0};
71 static uchar white[4] = {255, 255, 255, 255};
72 static uchar black[4] = {0, 0, 0, 255};
73 static uchar setting = 0;
74 const uchar *cp = error;
75
76 /* ensure we're not getting a color after running BKE_blender_userdef_free */
77 BLI_assert(BLI_findindex(&U.themes, g_theme_state.theme) != -1);
78 BLI_assert(colorid != TH_UNDEFINED);
79
80 if (btheme) {
81
82 /* first check for ui buttons theme */
83 if (colorid < TH_THEMEUI) {
84
85 switch (colorid) {
86 case TH_NONE:
87 cp = none;
88 break;
89 case TH_BLACK:
90 cp = black;
91 break;
92 case TH_WHITE:
93 cp = white;
94 break;
95 case TH_REDALERT:
96 case TH_ERROR:
97 cp = btheme->tui.wcol_state.error;
98 break;
99 case TH_WARNING:
100 cp = btheme->tui.wcol_state.warning;
101 break;
102 case TH_INFO:
103 cp = btheme->tui.wcol_state.info;
104 break;
105 case TH_SUCCESS:
106 cp = btheme->tui.wcol_state.success;
107 break;
108 }
109 }
110 else {
111
112 switch (spacetype) {
113 case SPACE_PROPERTIES:
114 ts = &btheme->space_properties;
115 break;
116 case SPACE_VIEW3D:
117 ts = &btheme->space_view3d;
118 break;
119 case SPACE_GRAPH:
120 ts = &btheme->space_graph;
121 break;
122 case SPACE_FILE:
123 ts = &btheme->space_file;
124 break;
125 case SPACE_NLA:
126 ts = &btheme->space_nla;
127 break;
128 case SPACE_ACTION:
129 ts = &btheme->space_action;
130 break;
131 case SPACE_SEQ:
132 ts = &btheme->space_sequencer;
133 break;
134 case SPACE_IMAGE:
135 ts = &btheme->space_image;
136 break;
137 case SPACE_TEXT:
138 ts = &btheme->space_text;
139 break;
140 case SPACE_OUTLINER:
141 ts = &btheme->space_outliner;
142 break;
143 case SPACE_INFO:
144 ts = &btheme->space_info;
145 break;
146 case SPACE_USERPREF:
147 ts = &btheme->space_preferences;
148 break;
149 case SPACE_CONSOLE:
150 ts = &btheme->space_console;
151 break;
152 case SPACE_NODE:
153 ts = &btheme->space_node;
154 break;
155 case SPACE_CLIP:
156 ts = &btheme->space_clip;
157 break;
158 case SPACE_TOPBAR:
159 ts = &btheme->space_topbar;
160 break;
161 case SPACE_STATUSBAR:
162 ts = &btheme->space_statusbar;
163 break;
165 ts = &btheme->space_spreadsheet;
166 break;
167 default:
168 ts = &btheme->space_view3d;
169 break;
170 }
171
172 switch (colorid) {
173 case TH_BACK:
175 cp = ts->back;
176 }
177 else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
178 cp = btheme->regions.channels.back;
179 }
180 else if (ELEM(g_theme_state.regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) {
181 cp = ts->header;
182 }
183 else if (g_theme_state.regionid == RGN_TYPE_NAV_BAR) {
184 cp = btheme->regions.sidebars.tab_back;
185 }
186 else if (g_theme_state.regionid == RGN_TYPE_ASSET_SHELF) {
187 cp = btheme->regions.asset_shelf.back;
188 }
189 else if (g_theme_state.regionid == RGN_TYPE_ASSET_SHELF_HEADER) {
190 cp = btheme->regions.asset_shelf.header_back;
191 }
192 else {
193 cp = btheme->regions.sidebars.back;
194 }
195
196 copy_v4_v4_uchar(back, cp);
197 if (!ED_region_is_overlap(spacetype, g_theme_state.regionid)) {
198 back[3] = 255;
199 }
200 cp = back;
201 break;
202 case TH_BACK_GRAD:
203 cp = ts->back_grad;
204 break;
205
207 cp = &setting;
208 setting = ts->background_type;
209 break;
210 case TH_TEXT:
213 {
214 cp = btheme->tui.panel_text;
215 }
216 else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
217 cp = btheme->regions.channels.text;
218 }
219 else if (ELEM(g_theme_state.regionid,
223 {
224 cp = ts->header_text;
225 }
226 else {
227 cp = ts->text;
228 }
229 break;
230 case TH_TEXT_HI:
231 if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
232 cp = btheme->regions.channels.text_selected;
233 }
234 else if (ELEM(g_theme_state.regionid,
238 {
239 cp = ts->header_text_hi;
240 }
241 else {
242 cp = ts->text_hi;
243 }
244 break;
245 case TH_TITLE:
248 {
249 cp = btheme->tui.panel_title;
250 }
251 else if (ELEM(g_theme_state.regionid,
255 {
256 cp = ts->header_title;
257 }
258 else {
259 cp = ts->title;
260 }
261 break;
262
263 case TH_HEADER:
264 cp = ts->header;
265 break;
266
267 case TH_HEADER_TEXT:
268 cp = ts->header_text;
269 break;
271 cp = ts->header_text_hi;
272 break;
273
274 case TH_PANEL_HEADER:
275 cp = btheme->tui.panel_header;
276 break;
277 case TH_PANEL_BACK:
278 cp = btheme->tui.panel_back;
279 break;
281 cp = btheme->tui.panel_sub_back;
282 break;
283 case TH_PANEL_OUTLINE:
284 cp = btheme->tui.panel_outline;
285 break;
286 case TH_PANEL_ACTIVE:
287 cp = btheme->tui.panel_active;
288 break;
289
290 case TH_TAB_TEXT:
291 cp = btheme->tui.wcol_tab.text;
292 break;
293 case TH_TAB_TEXT_HI:
294 cp = btheme->tui.wcol_tab.text_sel;
295 break;
296 case TH_TAB_ACTIVE:
297 cp = btheme->tui.wcol_tab.inner_sel;
298 break;
299 case TH_TAB_INACTIVE:
300 cp = btheme->tui.wcol_tab.inner;
301 break;
302 case TH_TAB_OUTLINE:
303 cp = btheme->tui.wcol_tab.outline;
304 break;
306 cp = btheme->tui.wcol_tab.outline_sel;
307 break;
308 case TH_TAB_BACK:
309 cp = btheme->regions.sidebars.tab_back;
310 break;
311
312 case TH_SHADE1:
313 cp = ts->shade1;
314 break;
315 case TH_SHADE2:
316 cp = ts->shade2;
317 break;
318 case TH_HILITE:
319 cp = ts->hilite;
320 break;
321
322 case TH_GRID:
323 cp = ts->grid;
324 break;
326 cp = btheme->regions.scrubbing.back;
327 break;
329 cp = btheme->regions.scrubbing.text;
330 break;
332 cp = btheme->regions.scrubbing.time_marker;
333 break;
336 break;
337 case TH_VIEW_OVERLAY:
338 cp = ts->view_overlay;
339 break;
340 case TH_WIRE:
341 cp = ts->wire;
342 break;
343 case TH_WIRE_INNER:
344 cp = ts->syntaxr;
345 break;
346 case TH_WIRE_EDIT:
347 cp = ts->wire_edit;
348 break;
349 case TH_LIGHT:
350 cp = ts->lamp;
351 break;
352 case TH_SPEAKER:
353 cp = ts->speaker;
354 break;
355 case TH_CAMERA:
356 cp = ts->camera;
357 break;
358 case TH_EMPTY:
359 cp = ts->empty;
360 break;
361 case TH_SELECT:
362 cp = ts->select;
363 break;
364 case TH_ACTIVE:
365 cp = ts->active;
366 break;
367 case TH_GROUP:
368 cp = btheme->common.anim.channel_group;
369 break;
370 case TH_GROUP_ACTIVE:
371 cp = btheme->common.anim.channel_group_active;
372 break;
373 case TH_TRANSFORM:
374 cp = ts->transform;
375 break;
376 case TH_VERTEX:
377 cp = ts->vertex;
378 break;
379 case TH_VERTEX_SELECT:
380 cp = ts->vertex_select;
381 break;
382 case TH_VERTEX_ACTIVE:
383 cp = ts->vertex_active;
384 break;
386 cp = ts->vertex_unreferenced;
387 break;
388 case TH_VERTEX_SIZE:
389 cp = &ts->vertex_size;
390 break;
391 case TH_OUTLINE_WIDTH:
392 cp = &ts->outline_width;
393 break;
394 case TH_OBCENTER_DIA:
395 cp = &ts->obcenter_dia;
396 break;
397 case TH_EDGE:
398 cp = ts->edge;
399 break;
400 case TH_EDGE_WIDTH:
401 cp = &ts->edge_width;
402 break;
403 case TH_EDGE_SELECT:
404 cp = ts->edge_select;
405 break;
407 cp = ts->edge_mode_select;
408 break;
410 cp = ts->editmesh_active;
411 break;
412 case TH_FACE:
413 cp = ts->face;
414 break;
415 case TH_FACE_SELECT:
416 cp = ts->face_select;
417 break;
419 cp = ts->face_mode_select;
420 break;
422 cp = ts->face_retopology;
423 break;
424 case TH_FACE_BACK:
425 cp = ts->face_back;
426 break;
427 case TH_FACE_FRONT:
428 cp = ts->face_front;
429 break;
430 case TH_FACEDOT_SIZE:
431 cp = &ts->facedot_size;
432 break;
433
434 case TH_BEVEL:
435 cp = btheme->space_view3d.bevel;
436 break;
437 case TH_CREASE:
438 cp = btheme->space_view3d.crease;
439 break;
440 case TH_SEAM:
441 cp = btheme->space_view3d.seam;
442 break;
443 case TH_SHARP:
444 cp = btheme->space_view3d.sharp;
445 break;
446 case TH_FREESTYLE:
447 cp = btheme->space_view3d.freestyle;
448 break;
449
451 cp = ts->extra_edge_len;
452 break;
454 cp = ts->extra_edge_angle;
455 break;
457 cp = ts->extra_face_area;
458 break;
460 cp = ts->extra_face_angle;
461 break;
462 case TH_NORMAL:
463 cp = ts->normal;
464 break;
465 case TH_VNORMAL:
466 cp = ts->vertex_normal;
467 break;
468 case TH_LNORMAL:
469 cp = ts->loop_normal;
470 break;
471 case TH_BONE_SOLID:
472 cp = ts->bone_solid;
473 break;
474 case TH_BONE_POSE:
475 cp = ts->bone_pose;
476 break;
478 cp = ts->bone_pose_active;
479 break;
481 cp = ts->bone_locked_weight;
482 break;
483 case TH_LONGKEY:
484 cp = btheme->common.anim.long_key;
485 break;
487 cp = btheme->common.anim.long_key_selected;
488 break;
489 case TH_STRIP:
490 cp = ts->strip;
491 break;
492 case TH_STRIP_SELECT:
493 cp = ts->strip_select;
494 break;
495 case TH_CHANNEL:
496 cp = btheme->common.anim.channel;
497 break;
499 cp = btheme->common.anim.channel_selected;
500 break;
502 cp = btheme->common.anim.keyframe;
503 break;
505 cp = btheme->common.anim.keyframe_selected;
506 break;
508 cp = btheme->common.anim.keyframe_extreme;
509 break;
512 break;
514 cp = btheme->common.anim.keyframe_breakdown;
515 break;
518 break;
520 cp = btheme->common.anim.keyframe_jitter;
521 break;
524 break;
526 cp = btheme->common.anim.keyframe_moving_hold;
527 break;
530 break;
532 cp = btheme->common.anim.keyframe_generated;
533 break;
536 break;
537 case TH_KEYBORDER:
538 cp = ts->keyborder;
539 break;
541 cp = ts->keyborder_select;
542 break;
543 case TH_CFRAME:
544 cp = btheme->common.anim.playhead;
545 break;
546 case TH_FRAME_BEFORE:
547 cp = ts->before_current_frame;
548 break;
549 case TH_FRAME_AFTER:
550 cp = ts->after_current_frame;
551 break;
553 cp = ts->time_gp_keyframe;
554 break;
555
556 case TH_NURB_ULINE:
557 cp = ts->nurb_uline;
558 break;
559 case TH_NURB_VLINE:
560 cp = ts->nurb_vline;
561 break;
563 cp = ts->nurb_sel_uline;
564 break;
566 cp = ts->nurb_sel_vline;
567 break;
568
569 case TH_HANDLE_FREE:
570 cp = btheme->common.curves.handle_free;
571 break;
573 cp = btheme->common.curves.handle_sel_free;
574 break;
575 case TH_HANDLE_AUTO:
576 cp = btheme->common.curves.handle_auto;
577 break;
579 cp = btheme->common.curves.handle_sel_auto;
580 break;
581 case TH_HANDLE_VECT:
582 cp = btheme->common.curves.handle_vect;
583 break;
585 cp = btheme->common.curves.handle_sel_vect;
586 break;
587 case TH_HANDLE_ALIGN:
588 cp = btheme->common.curves.handle_align;
589 break;
591 cp = btheme->common.curves.handle_sel_align;
592 break;
594 cp = btheme->common.curves.handle_auto_clamped;
595 break;
598 break;
599
600 case TH_SYNTAX_B:
601 cp = ts->syntaxb;
602 break;
603 case TH_SYNTAX_V:
604 cp = ts->syntaxv;
605 break;
606 case TH_SYNTAX_C:
607 cp = ts->syntaxc;
608 break;
609 case TH_SYNTAX_L:
610 cp = ts->syntaxl;
611 break;
612 case TH_SYNTAX_D:
613 cp = ts->syntaxd;
614 break;
615 case TH_SYNTAX_R:
616 cp = ts->syntaxr;
617 break;
618 case TH_SYNTAX_N:
619 cp = ts->syntaxn;
620 break;
621 case TH_SYNTAX_S:
622 cp = ts->syntaxs;
623 break;
624 case TH_LINENUMBERS:
625 cp = ts->line_numbers;
626 break;
627
628 case TH_NODE:
629 cp = ts->syntaxl;
630 break;
631 case TH_NODE_OUTLINE:
632 cp = ts->node_outline;
633 break;
634 case TH_NODE_INPUT:
635 cp = ts->syntaxn;
636 break;
637 case TH_NODE_OUTPUT:
638 cp = ts->nodeclass_output;
639 break;
640 case TH_NODE_COLOR:
641 cp = ts->syntaxb;
642 break;
643 case TH_NODE_FILTER:
644 cp = ts->nodeclass_filter;
645 break;
646 case TH_NODE_VECTOR:
647 cp = ts->nodeclass_vector;
648 break;
649 case TH_NODE_TEXTURE:
650 cp = ts->nodeclass_texture;
651 break;
652 case TH_NODE_SCRIPT:
653 cp = ts->nodeclass_script;
654 break;
655 case TH_NODE_GEOMETRY:
656 cp = ts->nodeclass_geometry;
657 break;
659 cp = ts->nodeclass_attribute;
660 break;
661 case TH_NODE_SHADER:
662 cp = ts->nodeclass_shader;
663 break;
665 cp = ts->syntaxv;
666 break;
667 case TH_NODE_GROUP:
668 cp = ts->syntaxc;
669 break;
671 cp = ts->console_output;
672 break;
673 case TH_NODE_FRAME:
674 cp = ts->movie;
675 break;
676 case TH_NODE_MATTE:
677 cp = ts->syntaxs;
678 break;
679 case TH_NODE_DISTORT:
680 cp = ts->syntaxd;
681 break;
682 case TH_NODE_CURVING:
683 cp = &ts->noodle_curving;
684 break;
686 cp = &ts->grid_levels;
687 break;
689 cp = ts->node_zone_simulation;
690 break;
692 cp = ts->node_zone_repeat;
693 break;
696 break;
698 cp = ts->node_zone_closure;
699 break;
701 cp = ts->simulated_frames;
702 break;
703
704 case TH_SEQ_MOVIE:
705 cp = ts->movie;
706 break;
707 case TH_SEQ_MOVIECLIP:
708 cp = ts->movieclip;
709 break;
710 case TH_SEQ_MASK:
711 cp = ts->mask;
712 break;
713 case TH_SEQ_IMAGE:
714 cp = ts->image;
715 break;
716 case TH_SEQ_SCENE:
717 cp = ts->scene;
718 break;
719 case TH_SEQ_AUDIO:
720 cp = ts->audio;
721 break;
722 case TH_SEQ_EFFECT:
723 cp = ts->effect;
724 break;
726 cp = ts->transition;
727 break;
728 case TH_SEQ_META:
729 cp = ts->meta;
730 break;
731 case TH_SEQ_TEXT:
732 cp = ts->text_strip;
733 break;
734 case TH_SEQ_PREVIEW:
735 cp = ts->preview_back;
736 break;
737 case TH_SEQ_COLOR:
738 cp = ts->color_strip;
739 break;
740 case TH_SEQ_ACTIVE:
741 cp = ts->active_strip;
742 break;
743 case TH_SEQ_SELECTED:
744 cp = ts->selected_strip;
745 break;
747 cp = ts->text_strip_cursor;
748 break;
750 cp = ts->selected_text;
751 break;
752
754 cp = ts->console_output;
755 break;
756 case TH_CONSOLE_INPUT:
757 cp = ts->console_input;
758 break;
759 case TH_CONSOLE_INFO:
760 cp = ts->console_info;
761 break;
762 case TH_CONSOLE_ERROR:
763 cp = ts->console_error;
764 break;
766 cp = ts->console_cursor;
767 break;
769 cp = ts->console_select;
770 break;
771
772 case TH_HANDLE_VERTEX:
773 cp = btheme->common.curves.handle_vertex;
774 break;
777 break;
779 cp = &btheme->common.curves.handle_vertex_size;
780 break;
781
782 case TH_GP_VERTEX:
783 cp = ts->gp_vertex;
784 break;
786 cp = ts->gp_vertex_select;
787 break;
789 cp = &ts->gp_vertex_size;
790 break;
791
793 cp = btheme->common.anim.channels;
794 break;
796 cp = btheme->common.anim.channels_sub;
797 break;
799 cp = ts->ds_ipoline;
800 break;
801
802 case TH_PREVIEW_BACK:
803 cp = ts->preview_back;
804 break;
805
807 cp = ts->preview_stitch_face;
808 break;
809
811 cp = ts->preview_stitch_edge;
812 break;
813
815 cp = ts->preview_stitch_vert;
816 break;
817
820 break;
821
824 break;
826 cp = ts->preview_stitch_active;
827 break;
828
829 case TH_METADATA_BG:
830 cp = ts->metadatabg;
831 break;
832 case TH_METADATA_TEXT:
833 cp = ts->metadatatext;
834 break;
835
836 case TH_UV_SHADOW:
837 cp = ts->uv_shadow;
838 break;
839
841 cp = ts->marker_outline;
842 break;
843 case TH_MARKER:
844 cp = ts->marker;
845 break;
846 case TH_ACT_MARKER:
847 cp = ts->act_marker;
848 break;
849 case TH_SEL_MARKER:
850 cp = ts->sel_marker;
851 break;
852 case TH_BUNDLE_SOLID:
853 cp = ts->bundle_solid;
854 break;
855 case TH_DIS_MARKER:
856 cp = ts->dis_marker;
857 break;
858 case TH_PATH_BEFORE:
859 cp = ts->path_before;
860 break;
861 case TH_PATH_AFTER:
862 cp = ts->path_after;
863 break;
865 cp = ts->path_keyframe_before;
866 break;
868 cp = ts->path_keyframe_after;
869 break;
870 case TH_CAMERA_PATH:
871 cp = ts->camera_path;
872 break;
874 cp = ts->camera_passepartout;
875 break;
876 case TH_LOCK_MARKER:
877 cp = ts->lock_marker;
878 break;
879
880 case TH_MATCH:
881 cp = ts->match;
882 break;
883
885 cp = ts->selected_highlight;
886 break;
887
888 case TH_SELECT_ACTIVE:
889 cp = ts->active;
890 break;
891
893 cp = ts->selected_object;
894 break;
895
896 case TH_ACTIVE_OBJECT:
897 cp = ts->active_object;
898 break;
899
900 case TH_EDITED_OBJECT:
901 cp = ts->edited_object;
902 break;
903
904 case TH_ROW_ALTERNATE:
905 cp = ts->row_alternate;
906 break;
907
908 case TH_SKIN_ROOT:
909 cp = ts->skin_root;
910 break;
911
912 case TH_ANIM_ACTIVE:
913 cp = ts->anim_active;
914 break;
915 case TH_ANIM_INACTIVE:
916 cp = ts->anim_non_active;
917 break;
919 cp = btheme->common.anim.preview_range;
920 break;
922 cp = btheme->common.anim.scene_strip_range;
923 break;
924
925 case TH_NLA_TWEAK:
926 cp = ts->nla_tweaking;
927 break;
929 cp = ts->nla_tweakdupli;
930 break;
931
932 case TH_NLA_TRACK:
933 cp = btheme->common.anim.channel;
934 break;
936 cp = ts->nla_transition;
937 break;
939 cp = ts->nla_transition_sel;
940 break;
941 case TH_NLA_META:
942 cp = ts->nla_meta;
943 break;
944 case TH_NLA_META_SEL:
945 cp = ts->nla_meta_sel;
946 break;
947 case TH_NLA_SOUND:
948 cp = ts->nla_sound;
949 break;
950 case TH_NLA_SOUND_SEL:
951 cp = ts->nla_sound_sel;
952 break;
953
954 case TH_WIDGET_EMBOSS:
955 cp = btheme->tui.widget_emboss;
956 break;
957
958 case TH_EDITOR_BORDER:
959 cp = btheme->tui.editor_border;
960 break;
962 cp = btheme->tui.editor_outline;
963 break;
965 cp = btheme->tui.editor_outline_active;
966 break;
968 cp = btheme->tui.widget_text_cursor;
969 break;
971 cp = btheme->tui.wcol_text.item;
972 break;
974 cp = btheme->tui.wcol_text.text_sel;
975 break;
976
978 cp = btheme->tui.transparent_checker_primary;
979 break;
982 break;
984 cp = &btheme->tui.transparent_checker_size;
985 break;
986
987 case TH_AXIS_X:
988 cp = btheme->tui.xaxis;
989 break;
990 case TH_AXIS_Y:
991 cp = btheme->tui.yaxis;
992 break;
993 case TH_AXIS_Z:
994 cp = btheme->tui.zaxis;
995 break;
996 case TH_AXIS_W:
997 cp = btheme->tui.waxis;
998 break;
999
1000 case TH_GIZMO_HI:
1001 cp = btheme->tui.gizmo_hi;
1002 break;
1003 case TH_GIZMO_PRIMARY:
1004 cp = btheme->tui.gizmo_primary;
1005 break;
1006 case TH_GIZMO_SECONDARY:
1007 cp = btheme->tui.gizmo_secondary;
1008 break;
1010 cp = btheme->tui.gizmo_view_align;
1011 break;
1012 case TH_GIZMO_A:
1013 cp = btheme->tui.gizmo_a;
1014 break;
1015 case TH_GIZMO_B:
1016 cp = btheme->tui.gizmo_b;
1017 break;
1018
1019 case TH_ICON_SCENE:
1020 cp = btheme->tui.icon_scene;
1021 break;
1022 case TH_ICON_COLLECTION:
1023 cp = btheme->tui.icon_collection;
1024 break;
1025 case TH_ICON_OBJECT:
1026 cp = btheme->tui.icon_object;
1027 break;
1029 cp = btheme->tui.icon_object_data;
1030 break;
1031 case TH_ICON_MODIFIER:
1032 cp = btheme->tui.icon_modifier;
1033 break;
1034 case TH_ICON_SHADING:
1035 cp = btheme->tui.icon_shading;
1036 break;
1037 case TH_ICON_FOLDER:
1038 cp = btheme->tui.icon_folder;
1039 break;
1040 case TH_ICON_AUTOKEY:
1041 cp = btheme->tui.icon_autokey;
1042 break;
1043 case TH_ICON_FUND: {
1044 /* Development fund icon color is not part of theme. */
1045 static const uchar red[4] = {204, 48, 72, 255};
1046 cp = red;
1047 break;
1048 }
1049
1050 case TH_SCROLL_TEXT:
1051 cp = btheme->tui.wcol_scroll.text;
1052 break;
1053
1054 case TH_INFO_SELECTED:
1055 cp = ts->info_selected;
1056 break;
1058 cp = ts->info_selected_text;
1059 break;
1060 case TH_INFO_ERROR_TEXT:
1061 cp = ts->info_error_text;
1062 break;
1064 cp = ts->info_warning_text;
1065 break;
1066 case TH_INFO_INFO_TEXT:
1067 cp = ts->info_info_text;
1068 break;
1069 case TH_INFO_DEBUG:
1070 cp = ts->info_debug;
1071 break;
1072 case TH_INFO_DEBUG_TEXT:
1073 cp = ts->info_debug_text;
1074 break;
1075 case TH_INFO_PROPERTY:
1076 cp = ts->info_property;
1077 break;
1079 cp = ts->info_property_text;
1080 break;
1081 case TH_INFO_OPERATOR:
1082 cp = ts->info_operator;
1083 break;
1085 cp = ts->info_operator_text;
1086 break;
1088 cp = ts->clipping_border_3d;
1089 break;
1090 }
1091 }
1092 }
1093
1094 return (const uchar *)cp;
1095}
1096
1098{
1099 /* We search for the theme with the default name. */
1100 bTheme *btheme = static_cast<bTheme *>(
1102 if (btheme == nullptr) {
1103 btheme = MEM_callocN<bTheme>(__func__);
1104 STRNCPY_UTF8(btheme->name, U_theme_default.name);
1105 BLI_addhead(&U.themes, btheme);
1106 }
1107
1108 /* Must be first, see `U.themes` doc-string. */
1109 BLI_listbase_rotate_first(&U.themes, btheme);
1110
1111 UI_SetTheme(0, 0); /* make sure the global used in this file is set */
1112
1113 const int active_theme_area = btheme->active_theme_area;
1115 btheme->active_theme_area = active_theme_area;
1116}
1117
1119{
1120 BLI_freelistN(&U.uistyles);
1121 /* gets automatically re-allocated */
1122 uiStyleInit();
1123}
1124
1125void UI_SetTheme(int spacetype, int regionid)
1126{
1127 if (spacetype) {
1128 /* later on, a local theme can be found too */
1129 g_theme_state.theme = static_cast<bTheme *>(U.themes.first);
1130 g_theme_state.spacetype = spacetype;
1131 g_theme_state.regionid = regionid;
1132 }
1133 else if (regionid) {
1134 /* popups */
1135 g_theme_state.theme = static_cast<bTheme *>(U.themes.first);
1136 g_theme_state.spacetype = SPACE_PROPERTIES;
1137 g_theme_state.regionid = regionid;
1138 }
1139 else {
1140 /* for safety, when theme was deleted */
1141 g_theme_state.theme = static_cast<bTheme *>(U.themes.first);
1142 g_theme_state.spacetype = SPACE_VIEW3D;
1143 g_theme_state.regionid = RGN_TYPE_WINDOW;
1144 }
1145}
1146
1148{
1149 return static_cast<bTheme *>(U.themes.first);
1150}
1151
1152void UI_Theme_Store(bThemeState *theme_state)
1153{
1154 *theme_state = g_theme_state;
1155}
1156void UI_Theme_Restore(const bThemeState *theme_state)
1157{
1158 g_theme_state = *theme_state;
1159}
1160
1161void UI_GetThemeColorShadeAlpha4ubv(int colorid, int coloffset, int alphaoffset, uchar col[4])
1162{
1163 int r, g, b, a;
1164 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1165 r = coloffset + int(cp[0]);
1166 CLAMP(r, 0, 255);
1167 g = coloffset + int(cp[1]);
1168 CLAMP(g, 0, 255);
1169 b = coloffset + int(cp[2]);
1170 CLAMP(b, 0, 255);
1171 a = alphaoffset + int(cp[3]);
1172 CLAMP(a, 0, 255);
1173
1174 col[0] = r;
1175 col[1] = g;
1176 col[2] = b;
1177 col[3] = a;
1178}
1179
1180void UI_GetThemeColorBlend3ubv(int colorid1, int colorid2, float fac, uchar col[3])
1181{
1182 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1183 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1184
1185 CLAMP(fac, 0.0f, 1.0f);
1186 col[0] = floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
1187 col[1] = floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
1188 col[2] = floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
1189}
1190
1191void UI_GetThemeColorBlend3f(int colorid1, int colorid2, float fac, float r_col[3])
1192{
1193 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1194 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1195
1196 CLAMP(fac, 0.0f, 1.0f);
1197 r_col[0] = ((1.0f - fac) * cp1[0] + fac * cp2[0]) / 255.0f;
1198 r_col[1] = ((1.0f - fac) * cp1[1] + fac * cp2[1]) / 255.0f;
1199 r_col[2] = ((1.0f - fac) * cp1[2] + fac * cp2[2]) / 255.0f;
1200}
1201
1202void UI_GetThemeColorBlend4f(int colorid1, int colorid2, float fac, float r_col[4])
1203{
1204 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1205 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1206
1207 CLAMP(fac, 0.0f, 1.0f);
1208 r_col[0] = ((1.0f - fac) * cp1[0] + fac * cp2[0]) / 255.0f;
1209 r_col[1] = ((1.0f - fac) * cp1[1] + fac * cp2[1]) / 255.0f;
1210 r_col[2] = ((1.0f - fac) * cp1[2] + fac * cp2[2]) / 255.0f;
1211 r_col[3] = ((1.0f - fac) * cp1[3] + fac * cp2[3]) / 255.0f;
1212}
1213
1214void UI_FontThemeColor(int fontid, int colorid)
1215{
1216 uchar color[4];
1217 UI_GetThemeColor4ubv(colorid, color);
1218 BLF_color4ubv(fontid, color);
1219}
1220
1221float UI_GetThemeValuef(int colorid)
1222{
1223 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1224 return float(cp[0]);
1225}
1226
1227int UI_GetThemeValue(int colorid)
1228{
1229 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1230 return int(cp[0]);
1231}
1232
1233float UI_GetThemeValueTypef(int colorid, int spacetype)
1234{
1235 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1236 return float(cp[0]);
1237}
1238
1239int UI_GetThemeValueType(int colorid, int spacetype)
1240{
1241 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1242 return int(cp[0]);
1243}
1244
1245void UI_GetThemeColor3fv(int colorid, float col[3])
1246{
1247 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1248 col[0] = float(cp[0]) / 255.0f;
1249 col[1] = float(cp[1]) / 255.0f;
1250 col[2] = float(cp[2]) / 255.0f;
1251}
1252
1253void UI_GetThemeColor4fv(int colorid, float col[4])
1254{
1255 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1256 col[0] = float(cp[0]) / 255.0f;
1257 col[1] = float(cp[1]) / 255.0f;
1258 col[2] = float(cp[2]) / 255.0f;
1259 col[3] = float(cp[3]) / 255.0f;
1260}
1261
1262void UI_GetThemeColorType4fv(int colorid, int spacetype, float col[4])
1263{
1264 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1265 col[0] = float(cp[0]) / 255.0f;
1266 col[1] = float(cp[1]) / 255.0f;
1267 col[2] = float(cp[2]) / 255.0f;
1268 col[3] = float(cp[3]) / 255.0f;
1269}
1270
1271void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3])
1272{
1273 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1274 int r, g, b;
1275
1276 r = offset + int(cp[0]);
1277 CLAMP(r, 0, 255);
1278 g = offset + int(cp[1]);
1279 CLAMP(g, 0, 255);
1280 b = offset + int(cp[2]);
1281 CLAMP(b, 0, 255);
1282
1283 col[0] = float(r) / 255.0f;
1284 col[1] = float(g) / 255.0f;
1285 col[2] = float(b) / 255.0f;
1286}
1287
1288void UI_GetThemeColorShade3ubv(int colorid, int offset, uchar col[3])
1289{
1290 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1291 int r, g, b;
1292
1293 r = offset + int(cp[0]);
1294 CLAMP(r, 0, 255);
1295 g = offset + int(cp[1]);
1296 CLAMP(g, 0, 255);
1297 b = offset + int(cp[2]);
1298 CLAMP(b, 0, 255);
1299
1300 col[0] = r;
1301 col[1] = g;
1302 col[2] = b;
1303}
1304
1306 int colorid1, int colorid2, float fac, int offset, uchar col[3])
1307{
1308 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1309 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1310
1311 CLAMP(fac, 0.0f, 1.0f);
1312
1313 float blend[3];
1314 blend[0] = (offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0])) / 255.0f;
1315 blend[1] = (offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1])) / 255.0f;
1316 blend[2] = (offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2])) / 255.0f;
1317
1319}
1320
1321void UI_GetThemeColorShade4ubv(int colorid, int offset, uchar col[4])
1322{
1323 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1324 int r, g, b;
1325
1326 r = offset + int(cp[0]);
1327 CLAMP(r, 0, 255);
1328 g = offset + int(cp[1]);
1329 CLAMP(g, 0, 255);
1330 b = offset + int(cp[2]);
1331 CLAMP(b, 0, 255);
1332
1333 col[0] = r;
1334 col[1] = g;
1335 col[2] = b;
1336 col[3] = cp[3];
1337}
1338
1339void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4])
1340{
1341 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1342 int r, g, b, a;
1343
1344 r = coloffset + int(cp[0]);
1345 CLAMP(r, 0, 255);
1346 g = coloffset + int(cp[1]);
1347 CLAMP(g, 0, 255);
1348 b = coloffset + int(cp[2]);
1349 CLAMP(b, 0, 255);
1350 a = alphaoffset + int(cp[3]);
1351 CLAMP(a, 0, 255);
1352
1353 col[0] = float(r) / 255.0f;
1354 col[1] = float(g) / 255.0f;
1355 col[2] = float(b) / 255.0f;
1356 col[3] = float(a) / 255.0f;
1357}
1358
1359void UI_GetThemeColorBlendShade3fv(int colorid1, int colorid2, float fac, int offset, float col[3])
1360{
1361 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1362 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1363 int r, g, b;
1364
1365 CLAMP(fac, 0.0f, 1.0f);
1366
1367 r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
1368 CLAMP(r, 0, 255);
1369 g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
1370 CLAMP(g, 0, 255);
1371 b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
1372 CLAMP(b, 0, 255);
1373
1374 col[0] = float(r) / 255.0f;
1375 col[1] = float(g) / 255.0f;
1376 col[2] = float(b) / 255.0f;
1377}
1378
1379void UI_GetThemeColorBlendShade4fv(int colorid1, int colorid2, float fac, int offset, float col[4])
1380{
1381 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1382 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1383 int r, g, b, a;
1384
1385 CLAMP(fac, 0.0f, 1.0f);
1386
1387 r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
1388 CLAMP(r, 0, 255);
1389 g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
1390 CLAMP(g, 0, 255);
1391 b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
1392 CLAMP(b, 0, 255);
1393
1394 a = floorf((1.0f - fac) * cp1[3] + fac * cp2[3]); /* No shading offset. */
1395 CLAMP(a, 0, 255);
1396
1397 col[0] = float(r) / 255.0f;
1398 col[1] = float(g) / 255.0f;
1399 col[2] = float(b) / 255.0f;
1400 col[3] = float(a) / 255.0f;
1401}
1402
1403void UI_GetThemeColor3ubv(int colorid, uchar col[3])
1404{
1405 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1406 col[0] = cp[0];
1407 col[1] = cp[1];
1408 col[2] = cp[2];
1409}
1410
1411void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4])
1412{
1413 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1414 int r, g, b, a;
1415
1416 r = offset + int(cp[0]);
1417 CLAMP(r, 0, 255);
1418 g = offset + int(cp[1]);
1419 CLAMP(g, 0, 255);
1420 b = offset + int(cp[2]);
1421 CLAMP(b, 0, 255);
1422
1423 a = int(cp[3]); /* no shading offset... */
1424 CLAMP(a, 0, 255);
1425
1426 col[0] = float(r) / 255.0f;
1427 col[1] = float(g) / 255.0f;
1428 col[2] = float(b) / 255.0f;
1429 col[3] = float(a) / 255.0f;
1430}
1431
1432void UI_GetThemeColor4ubv(int colorid, uchar col[4])
1433{
1434 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1435 col[0] = cp[0];
1436 col[1] = cp[1];
1437 col[2] = cp[2];
1438 col[3] = cp[3];
1439}
1440
1441void UI_GetThemeColorType3fv(int colorid, int spacetype, float col[3])
1442{
1443 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1444 col[0] = float(cp[0]) / 255.0f;
1445 col[1] = float(cp[1]) / 255.0f;
1446 col[2] = float(cp[2]) / 255.0f;
1447}
1448
1449void UI_GetThemeColorType3ubv(int colorid, int spacetype, uchar col[3])
1450{
1451 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1452 col[0] = cp[0];
1453 col[1] = cp[1];
1454 col[2] = cp[2];
1455}
1456
1457void UI_GetThemeColorType4ubv(int colorid, int spacetype, uchar col[4])
1458{
1459 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1460 col[0] = cp[0];
1461 col[1] = cp[1];
1462 col[2] = cp[2];
1463 col[3] = cp[3];
1464}
1465
1467{
1468 if (colorid == 0) {
1469 return false;
1470 }
1471 if (colorid == TH_ICON_FUND) {
1472 /* Always color development fund icon. */
1473 }
1474 else if (!((g_theme_state.spacetype == SPACE_OUTLINER &&
1475 g_theme_state.regionid == RGN_TYPE_WINDOW) ||
1476 (g_theme_state.spacetype == SPACE_PROPERTIES &&
1477 g_theme_state.regionid == RGN_TYPE_NAV_BAR) ||
1478 (g_theme_state.spacetype == SPACE_FILE && g_theme_state.regionid == RGN_TYPE_WINDOW)))
1479 {
1480 /* Only colored icons in specific places, overall UI is intended
1481 * to stay monochrome and out of the way except a few places where it
1482 * is important to communicate different data types. */
1483 return false;
1484 }
1485
1486 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1487 col[0] = cp[0];
1488 col[1] = cp[1];
1489 col[2] = cp[2];
1490 col[3] = cp[3];
1491
1492 return true;
1493}
1494
1496 const float cp1[4], const float cp2[4], float fac, const float alphaoffset, float r_col[4])
1497{
1498 float r, g, b, a;
1499
1500 CLAMP(fac, 0.0f, 1.0f);
1501 r = (1.0f - fac) * cp1[0] + fac * cp2[0];
1502 g = (1.0f - fac) * cp1[1] + fac * cp2[1];
1503 b = (1.0f - fac) * cp1[2] + fac * cp2[2];
1504 a = (1.0f - fac) * cp1[3] + fac * cp2[3] + alphaoffset;
1505
1506 CLAMP(r, 0.0f, 1.0f);
1507 CLAMP(g, 0.0f, 1.0f);
1508 CLAMP(b, 0.0f, 1.0f);
1509 CLAMP(a, 0.0f, 1.0f);
1510
1511 r_col[0] = r;
1512 r_col[1] = g;
1513 r_col[2] = b;
1514 r_col[3] = a;
1515}
1516
1517void UI_GetColorPtrShade3ubv(const uchar cp[3], int offset, uchar r_col[3])
1518{
1519 int r, g, b;
1520
1521 r = offset + int(cp[0]);
1522 g = offset + int(cp[1]);
1523 b = offset + int(cp[2]);
1524
1525 CLAMP(r, 0, 255);
1526 CLAMP(g, 0, 255);
1527 CLAMP(b, 0, 255);
1528
1529 r_col[0] = r;
1530 r_col[1] = g;
1531 r_col[2] = b;
1532}
1533
1535 const uchar cp1[3], const uchar cp2[3], float fac, int offset, uchar r_col[3])
1536{
1537 int r, g, b;
1538
1539 CLAMP(fac, 0.0f, 1.0f);
1540 r = offset + floor((1.0f - fac) * cp1[0] + fac * cp2[0]);
1541 g = offset + floor((1.0f - fac) * cp1[1] + fac * cp2[1]);
1542 b = offset + floor((1.0f - fac) * cp1[2] + fac * cp2[2]);
1543
1544 CLAMP(r, 0, 255);
1545 CLAMP(g, 0, 255);
1546 CLAMP(b, 0, 255);
1547
1548 r_col[0] = r;
1549 r_col[1] = g;
1550 r_col[2] = b;
1551}
1552
1553void UI_ThemeClearColor(int colorid)
1554{
1555 float col[3];
1556
1557 UI_GetThemeColor3fv(colorid, col);
1558 GPU_clear_color(col[0], col[1], col[2], 1.0f);
1559}
1560
1562{
1563 const bTheme *btheme = UI_GetTheme();
1564 return int(btheme->tui.menu_shadow_width * UI_SCALE_FAC);
1565}
1566
1567void UI_make_axis_color(const uchar col[3], const char axis, uchar r_col[3])
1568{
1569 uchar col_axis[3];
1570
1571 switch (axis) {
1572 case 'X':
1574 UI_GetColorPtrBlendShade3ubv(col, col_axis, 0.5f, -10, r_col);
1575 break;
1576 case 'Y':
1578 UI_GetColorPtrBlendShade3ubv(col, col_axis, 0.5f, -10, r_col);
1579 break;
1580 case 'Z':
1582 UI_GetColorPtrBlendShade3ubv(col, col_axis, 0.5f, -10, r_col);
1583 break;
1584 default:
1585 BLI_assert(0);
1586 break;
1587 }
1588}
1589
void BLF_color4ubv(int fontid, const unsigned char rgba[4])
Definition blf.cc:452
#define BLI_assert(a)
Definition BLI_assert.h:46
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:586
void * BLI_findstring(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:608
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
Definition listbase.cc:497
void BLI_listbase_rotate_first(ListBase *lb, void *vlink) ATTR_NONNULL(1
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:91
MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
#define STRNCPY_UTF8(dst, src)
unsigned char uchar
#define CLAMP(a, b, c)
#define ELEM(...)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
const bTheme U_theme_default
@ RGN_TYPE_CHANNELS
@ RGN_TYPE_UI
@ RGN_TYPE_ASSET_SHELF_HEADER
@ RGN_TYPE_WINDOW
@ RGN_TYPE_ASSET_SHELF
@ RGN_TYPE_PREVIEW
@ RGN_TYPE_NAV_BAR
@ RGN_TYPE_FOOTER
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ SPACE_TEXT
@ SPACE_CLIP
@ SPACE_ACTION
@ SPACE_CONSOLE
@ SPACE_OUTLINER
@ SPACE_STATUSBAR
@ SPACE_TOPBAR
@ SPACE_NODE
@ SPACE_SPREADSHEET
@ SPACE_USERPREF
@ SPACE_FILE
@ SPACE_PROPERTIES
@ SPACE_NLA
@ SPACE_SEQ
@ SPACE_IMAGE
@ SPACE_GRAPH
@ SPACE_VIEW3D
@ SPACE_INFO
#define UI_SCALE_FAC
bool ED_region_is_overlap(int spacetype, int regiontype)
Definition area.cc:1478
void GPU_clear_color(float red, float green, float blue, float alpha)
Read Guarded memory(de)allocation.
void UI_icons_init()
void UI_icons_free()
#define TH_UNDEFINED
@ TH_SELECT_ACTIVE
@ TH_BLACK
@ TH_ICON_MODIFIER
@ TH_SIMULATED_FRAMES
@ TH_BONE_SOLID
@ TH_TAB_OUTLINE
@ TH_GIZMO_HI
@ TH_ROW_ALTERNATE
@ TH_HANDLE_ALIGN
@ TH_INFO_PROPERTY_TEXT
@ TH_NORMAL
@ TH_PATH_BEFORE
@ TH_LIGHT
@ TH_PANEL_HEADER
@ TH_NODE_FRAME
@ TH_KEYTYPE_GENERATED
@ TH_KEYBORDER_SELECT
@ TH_NODE_INPUT
@ TH_FACE_BACK
@ TH_NODE
@ TH_BACK_GRAD
@ TH_ICON_AUTOKEY
@ TH_MARKER_OUTLINE
@ TH_TIME_SCRUB_BACKGROUND
@ TH_LNORMAL
@ TH_KEYTYPE_BREAKDOWN
@ TH_NODE_FILTER
@ TH_SELECT_HIGHLIGHT
@ TH_INFO_WARNING_TEXT
@ TH_NURB_SEL_VLINE
@ TH_FRAME_AFTER
@ TH_ICON_OBJECT
@ TH_BUNDLE_SOLID
@ TH_NODE_GROUP
@ TH_KEYTYPE_KEYFRAME
@ TH_SEAM
@ TH_TRANSPARENT_CHECKER_PRIMARY
@ TH_NODE_ZONE_REPEAT
@ TH_WIDGET_TEXT_HIGHLIGHT
@ TH_BONE_POSE_ACTIVE
@ TH_DRAWEXTRA_EDGEANG
@ TH_SYNTAX_B
@ TH_NLA_TRACK
@ TH_INFO_DEBUG
@ TH_DRAWEXTRA_FACEANG
@ TH_ACTIVE_OBJECT
@ TH_ANIM_SCENE_STRIP_RANGE
@ TH_ICON_FOLDER
@ TH_TAB_ACTIVE
@ TH_HEADER
@ TH_GRID
@ TH_VERTEX_ACTIVE
@ TH_WHITE
@ TH_NODE_SCRIPT
@ TH_HANDLE_VERTEX_SIZE
@ TH_NLA_TRANSITION_SEL
@ TH_WARNING
@ TH_SEQ_SELECTED
@ TH_BACK
@ TH_NODE_GEOMETRY
@ TH_TAB_TEXT
@ TH_LOCK_MARKER
@ TH_NODE_OUTPUT
@ TH_SEQ_TRANSITION
@ TH_NODE_COLOR
@ TH_GIZMO_B
@ TH_NLA_META
@ TH_DOPESHEET_IPOLINE
@ TH_TIME_MARKER_LINE
@ TH_KEYBORDER
@ TH_WIRE
@ TH_KEYTYPE_JITTER
@ TH_INFO_INFO_TEXT
@ TH_SYNTAX_C
@ TH_SYNTAX_R
@ TH_INFO_PROPERTY
@ TH_SYNTAX_S
@ TH_BONE_LOCKED_WEIGHT
@ TH_TIME_GP_KEYFRAME
@ TH_KEYTYPE_EXTREME
@ TH_FACEDOT_SIZE
@ TH_WIDGET_EMBOSS
@ TH_BONE_POSE
@ TH_PANEL_OUTLINE
@ TH_TIME_MARKER_LINE_SELECTED
@ TH_GROUP
@ TH_ICON_COLLECTION
@ TH_DOPESHEET_CHANNELSUBOB
@ TH_NLA_META_SEL
@ TH_HANDLE_SEL_AUTO
@ TH_INFO_DEBUG_TEXT
@ TH_SHARP
@ TH_SKIN_ROOT
@ TH_EDGE_SELECT
@ TH_TRANSPARENT_CHECKER_SECONDARY
@ TH_ICON_OBJECT_DATA
@ TH_HANDLE_SEL_AUTOCLAMP
@ TH_STITCH_PREVIEW_VERT
@ TH_EDITED_OBJECT
@ TH_CAMERA
@ TH_KEYTYPE_KEYFRAME_SELECT
@ TH_SELECTED_OBJECT
@ TH_PATH_AFTER
@ TH_ICON_SHADING
@ TH_STITCH_PREVIEW_UNSTITCHABLE
@ TH_TRANSFORM
@ TH_NODE_ATTRIBUTE
@ TH_TIME_SCRUB_TEXT
@ TH_OUTLINE_WIDTH
@ TH_HANDLE_AUTO
@ TH_PANEL_SUB_BACK
@ TH_NODE_DISTORT
@ TH_ICON_SCENE
@ TH_ANIM_ACTIVE
@ TH_NURB_VLINE
@ TH_SEQ_TEXT
@ TH_REDALERT
@ TH_SPEAKER
@ TH_INFO_ERROR_TEXT
@ TH_VERTEX
@ TH_METADATA_TEXT
@ TH_CAMERA_PASSEPARTOUT
@ TH_CHANNEL
@ TH_EDITOR_BORDER
@ TH_SEQ_MASK
@ TH_VERTEX_SIZE
@ TH_INFO
@ TH_INFO_OPERATOR
@ TH_HANDLE_SEL_ALIGN
@ TH_SEQ_MOVIE
@ TH_GP_VERTEX_SELECT
@ TH_OBCENTER_DIA
@ TH_SEQ_SELECTED_TEXT
@ TH_CONSOLE_SELECT
@ TH_KEYTYPE_MOVEHOLD
@ TH_PANEL_ACTIVE
@ TH_CHANNEL_SELECT
@ TH_GIZMO_VIEW_ALIGN
@ TH_SEQ_COLOR
@ TH_GIZMO_A
@ TH_SHADE2
@ TH_CONSOLE_ERROR
@ TH_KEYTYPE_BREAKDOWN_SELECT
@ TH_DIS_MARKER
@ TH_UV_SHADOW
@ TH_NODE_MATTE
@ TH_TAB_TEXT_HI
@ TH_SUCCESS
@ TH_FACE_RETOPOLOGY
@ TH_STITCH_PREVIEW_EDGE
@ TH_NLA_TWEAK
@ TH_NODE_GRID_LEVELS
@ TH_PREVIEW_BACK
@ TH_BEVEL
@ TH_HANDLE_SEL_FREE
@ TH_SEQ_META
@ TH_FACE_SELECT
@ TH_CFRAME
@ TH_HANDLE_VERTEX_SELECT
@ TH_HANDLE_VERTEX
@ TH_SCROLL_TEXT
@ TH_LINENUMBERS
@ TH_STITCH_PREVIEW_ACTIVE
@ TH_ANIM_PREVIEW_RANGE
@ TH_NURB_ULINE
@ TH_MARKER
@ TH_KEYTYPE_EXTREME_SELECT
@ TH_NODE_ZONE_FOREACH_GEOMETRY_ELEMENT
@ TH_ERROR
@ TH_AXIS_Y
@ TH_AXIS_X
@ TH_NODE_TEXTURE
@ TH_EDITOR_OUTLINE_ACTIVE
@ TH_NODE_VECTOR
@ TH_EDGE
@ TH_SHADE1
@ TH_INFO_SELECTED_TEXT
@ TH_HANDLE_SEL_VECT
@ TH_VERTEX_SELECT
@ TH_NODE_OUTLINE
@ TH_STRIP
@ TH_NODE_CONVERTER
@ TH_KEYTYPE_MOVEHOLD_SELECT
@ TH_THEMEUI
@ TH_TAB_OUTLINE_ACTIVE
@ TH_CONSOLE_CURSOR
@ TH_EMPTY
@ TH_ANIM_INACTIVE
@ TH_KEYTYPE_JITTER_SELECT
@ TH_ICON_FUND
@ TH_FACE_FRONT
@ TH_VERTEX_UNREFERENCED
@ TH_GIZMO_PRIMARY
@ TH_TRANSPARENT_CHECKER_SIZE
@ TH_AXIS_W
@ TH_STITCH_PREVIEW_STITCHABLE
@ TH_HEADER_TEXT
@ TH_V3D_CLIPPING_BORDER
@ TH_NLA_TWEAK_DUPLI
@ TH_AXIS_Z
@ TH_EDGE_WIDTH
@ TH_EDITMESH_ACTIVE
@ TH_SEQ_PREVIEW
@ TH_LONGKEY_SELECT
@ TH_NONE
@ TH_GP_VERTEX_SIZE
@ TH_NODE_ZONE_CLOSURE
@ TH_CONSOLE_INFO
@ TH_GP_VERTEX
@ TH_INFO_OPERATOR_TEXT
@ TH_SEQ_TEXT_CURSOR
@ TH_FRAME_BEFORE
@ TH_SYNTAX_D
@ TH_VIEW_OVERLAY
@ TH_HILITE
@ TH_GIZMO_SECONDARY
@ TH_ACT_MARKER
@ TH_TITLE
@ TH_CONSOLE_OUTPUT
@ TH_CONSOLE_INPUT
@ TH_NODE_ZONE_SIMULATION
@ TH_PATH_KEYFRAME_AFTER
@ TH_WIDGET_TEXT_SELECTION
@ TH_KEYTYPE_GENERATED_SELECT
@ TH_SYNTAX_V
@ TH_EDGE_MODE_SELECT
@ TH_INFO_SELECTED
@ TH_SEQ_AUDIO
@ TH_NODE_CURVING
@ TH_SEL_MARKER
@ TH_FACE_MODE_SELECT
@ TH_TAB_BACK
@ TH_CAMERA_PATH
@ TH_SELECT
@ TH_WIDGET_TEXT_CURSOR
@ TH_HANDLE_FREE
@ TH_NLA_SOUND
@ TH_SYNTAX_L
@ TH_SEQ_ACTIVE
@ TH_HANDLE_AUTOCLAMP
@ TH_EDITOR_OUTLINE
@ TH_GROUP_ACTIVE
@ TH_TAB_INACTIVE
@ TH_BACKGROUND_TYPE
@ TH_SYNTAX_N
@ TH_DRAWEXTRA_EDGELEN
@ TH_MATCH
@ TH_NLA_TRANSITION
@ TH_SEQ_EFFECT
@ TH_SEQ_SCENE
@ TH_PANEL_BACK
@ TH_HANDLE_VECT
@ TH_HEADER_TEXT_HI
@ TH_TEXT
@ TH_METADATA_BG
@ TH_NODE_SHADER
@ TH_WIRE_EDIT
@ TH_SEQ_MOVIECLIP
@ TH_WIRE_INNER
@ TH_DRAWEXTRA_FACEAREA
@ TH_FREESTYLE
@ TH_SEQ_IMAGE
@ TH_NODE_INTERFACE
@ TH_STITCH_PREVIEW_FACE
@ TH_LONGKEY
@ TH_DOPESHEET_CHANNELOB
@ TH_NURB_SEL_ULINE
@ TH_ACTIVE
@ TH_STRIP_SELECT
@ TH_NLA_SOUND_SEL
@ TH_PATH_KEYFRAME_BEFORE
@ TH_FACE
@ TH_VNORMAL
@ TH_CREASE
@ TH_TEXT_HI
#define U
nullptr float
#define offsetof(t, d)
uint col
#define floor
void uiStyleInit()
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
#define unit_float_to_uchar_clamp_v3(v1, v2)
static void error(const char *str)
const char * name
#define floorf
bool UI_GetIconThemeColor4ubv(int colorid, uchar col[4])
void UI_Theme_Store(bThemeState *theme_state)
void UI_GetColorPtrBlendShade3ubv(const uchar cp1[3], const uchar cp2[3], float fac, int offset, uchar r_col[3])
void UI_Theme_Restore(const bThemeState *theme_state)
void UI_GetThemeColorType3fv(int colorid, int spacetype, float col[3])
void UI_GetColorPtrShade3ubv(const uchar cp[3], int offset, uchar r_col[3])
void ui_resources_free()
Definition resources.cc:54
void UI_GetThemeColor3fv(int colorid, float col[3])
void UI_make_axis_color(const uchar col[3], const char axis, uchar r_col[3])
const uchar * UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
Definition resources.cc:65
int UI_GetThemeValueType(int colorid, int spacetype)
void UI_GetThemeColorBlend4f(int colorid1, int colorid2, float fac, float r_col[4])
void UI_GetColorPtrBlendAlpha4fv(const float cp1[4], const float cp2[4], float fac, const float alphaoffset, float r_col[4])
void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3])
void UI_GetThemeColorBlendShade4fv(int colorid1, int colorid2, float fac, int offset, float col[4])
void UI_GetThemeColorShadeAlpha4ubv(int colorid, int coloffset, int alphaoffset, uchar col[4])
void UI_ThemeClearColor(int colorid)
float UI_GetThemeValueTypef(int colorid, int spacetype)
void UI_GetThemeColorType4fv(int colorid, int spacetype, float col[4])
void UI_GetThemeColorShade4ubv(int colorid, int offset, uchar col[4])
void UI_GetThemeColorBlendShade3fv(int colorid1, int colorid2, float fac, int offset, float col[3])
void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4])
void UI_GetThemeColor4fv(int colorid, float col[4])
void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4])
void UI_GetThemeColor4ubv(int colorid, uchar col[4])
void UI_style_init_default()
bTheme * UI_GetTheme()
int UI_GetThemeValue(int colorid)
void UI_GetThemeColorBlend3f(int colorid1, int colorid2, float fac, float r_col[3])
void UI_FontThemeColor(int fontid, int colorid)
static bThemeState g_theme_state
Definition resources.cc:39
void UI_GetThemeColorBlend3ubv(int colorid1, int colorid2, float fac, uchar col[3])
float UI_GetThemeValuef(int colorid)
void UI_GetThemeColorBlendShade3ubv(int colorid1, int colorid2, float fac, int offset, uchar col[3])
void UI_SetTheme(int spacetype, int regionid)
void UI_theme_init_default()
void UI_GetThemeColorType3ubv(int colorid, int spacetype, uchar col[3])
void UI_GetThemeColorShade3ubv(int colorid, int offset, uchar col[3])
void UI_GetThemeColorType4ubv(int colorid, int spacetype, uchar col[4])
void UI_GetThemeColor3ubv(int colorid, uchar col[3])
int UI_ThemeMenuShadowWidth()
void ui_resources_init()
Definition resources.cc:49
unsigned char keyframe_extreme_selected[4]
unsigned char keyframe_breakdown[4]
unsigned char keyframe[4]
unsigned char scene_strip_range[4]
unsigned char keyframe_jitter_selected[4]
unsigned char keyframe_jitter[4]
unsigned char keyframe_breakdown_selected[4]
unsigned char channel_selected[4]
unsigned char channels[4]
unsigned char keyframe_selected[4]
unsigned char keyframe_extreme[4]
unsigned char keyframe_moving_hold[4]
unsigned char keyframe_moving_hold_selected[4]
unsigned char long_key[4]
unsigned char playhead[4]
unsigned char long_key_selected[4]
unsigned char keyframe_generated[4]
unsigned char channel[4]
unsigned char channel_group_active[4]
unsigned char channel_group[4]
unsigned char channels_sub[4]
unsigned char preview_range[4]
unsigned char keyframe_generated_selected[4]
unsigned char handle_free[4]
unsigned char handle_sel_auto_clamped[4]
unsigned char handle_align[4]
unsigned char handle_auto_clamped[4]
unsigned char handle_auto[4]
unsigned char handle_sel_align[4]
unsigned char handle_vertex_size
unsigned char handle_sel_free[4]
unsigned char handle_vertex_select[4]
unsigned char handle_sel_auto[4]
unsigned char handle_vertex[4]
unsigned char handle_sel_vect[4]
unsigned char handle_vect[4]
ThemeCommonCurves curves
ThemeCommonAnim anim
unsigned char header_back[4]
unsigned char back[4]
unsigned char text[4]
unsigned char text_selected[4]
unsigned char text[4]
unsigned char time_marker_selected[4]
unsigned char time_marker[4]
unsigned char back[4]
unsigned char back[4]
unsigned char tab_back[4]
ThemeRegionsScrubbing scrubbing
ThemeRegionsChannels channels
ThemeRegionsSidebars sidebars
ThemeRegionsAssetShelf asset_shelf
unsigned char back_grad[4]
unsigned char preview_stitch_vert[4]
unsigned char path_before[4]
unsigned char noodle_curving
unsigned char active_strip[4]
unsigned char movie[4]
unsigned char edge_mode_select[4]
unsigned char lock_marker[4]
unsigned char movieclip[4]
unsigned char bundle_solid[4]
unsigned char dis_marker[4]
unsigned char ds_ipoline[4]
unsigned char sharp[4]
unsigned char syntaxl[4]
unsigned char active_object[4]
unsigned char nodeclass_filter[4]
unsigned char anim_active[4]
unsigned char anim_non_active[4]
unsigned char shade2[4]
unsigned char console_info[4]
unsigned char edge_select[4]
unsigned char selected_highlight[4]
unsigned char editmesh_active[4]
unsigned char console_select[4]
unsigned char vertex[4]
unsigned char vertex_size
unsigned char marker[4]
unsigned char text[4]
unsigned char gp_vertex_size
unsigned char syntaxv[4]
unsigned char freestyle[4]
unsigned char syntaxc[4]
unsigned char syntaxn[4]
unsigned char gp_vertex_select[4]
unsigned char sel_marker[4]
unsigned char vertex_unreferenced[4]
unsigned char effect[4]
unsigned char transition[4]
unsigned char active[4]
unsigned char vertex_select[4]
unsigned char outline_width
unsigned char selected_object[4]
unsigned char empty[4]
unsigned char header_text_hi[4]
unsigned char face_back[4]
unsigned char edge[4]
unsigned char selected_text[4]
unsigned char seam[4]
unsigned char info_property_text[4]
unsigned char normal[4]
unsigned char syntaxs[4]
unsigned char transform[4]
unsigned char select[4]
unsigned char before_current_frame[4]
unsigned char marker_outline[4]
unsigned char bone_pose_active[4]
unsigned char match[4]
unsigned char obcenter_dia
unsigned char act_marker[4]
unsigned char camera_path[4]
unsigned char nla_meta[4]
unsigned char info_selected_text[4]
unsigned char syntaxr[4]
unsigned char extra_edge_len[4]
unsigned char speaker[4]
unsigned char view_overlay[4]
unsigned char wire_edit[4]
unsigned char skin_root[4]
unsigned char node_zone_repeat[4]
unsigned char after_current_frame[4]
unsigned char console_error[4]
unsigned char camera_passepartout[4]
unsigned char bone_solid[4]
unsigned char clipping_border_3d[4]
unsigned char extra_edge_angle[4]
unsigned char header[4]
unsigned char face_select[4]
unsigned char mask[4]
unsigned char facedot_size
unsigned char loop_normal[4]
unsigned char node_zone_foreach_geometry_element[4]
unsigned char nodeclass_vector[4]
unsigned char camera[4]
unsigned char preview_stitch_face[4]
unsigned char path_after[4]
unsigned char title[4]
unsigned char face[4]
unsigned char bone_locked_weight[4]
unsigned char keyborder_select[4]
unsigned char extra_face_angle[4]
unsigned char metadatatext[4]
unsigned char preview_stitch_edge[4]
unsigned char nodeclass_attribute[4]
unsigned char edge_width
unsigned char face_mode_select[4]
unsigned char preview_back[4]
unsigned char gp_vertex[4]
unsigned char extra_face_area[4]
unsigned char crease[4]
unsigned char nurb_sel_vline[4]
unsigned char line_numbers[4]
unsigned char node_zone_simulation[4]
unsigned char preview_stitch_stitchable[4]
unsigned char console_cursor[4]
unsigned char text_strip[4]
unsigned char metadatabg[4]
unsigned char preview_stitch_unstitchable[4]
unsigned char meta[4]
unsigned char syntaxd[4]
unsigned char strip[4]
unsigned char nurb_sel_uline[4]
unsigned char info_property[4]
unsigned char info_selected[4]
unsigned char nurb_vline[4]
unsigned char text_strip_cursor[4]
unsigned char bone_pose[4]
unsigned char wire[4]
unsigned char shade1[4]
unsigned char color_strip[4]
unsigned char vertex_active[4]
unsigned char preview_stitch_active[4]
unsigned char nodeclass_geometry[4]
unsigned char path_keyframe_before[4]
unsigned char nodeclass_script[4]
unsigned char nodeclass_shader[4]
unsigned char image[4]
unsigned char vertex_normal[4]
unsigned char nla_tweakdupli[4]
unsigned char info_debug_text[4]
unsigned char nla_transition[4]
unsigned char face_retopology[4]
unsigned char nla_sound_sel[4]
unsigned char grid_levels
unsigned char nla_sound[4]
unsigned char header_text[4]
unsigned char text_hi[4]
unsigned char node_outline[4]
unsigned char uv_shadow[4]
unsigned char edited_object[4]
unsigned char node_zone_closure[4]
unsigned char grid[4]
unsigned char path_keyframe_after[4]
unsigned char hilite[4]
unsigned char nla_transition_sel[4]
unsigned char nodeclass_output[4]
unsigned char info_operator[4]
unsigned char simulated_frames[4]
unsigned char header_title[4]
unsigned char info_operator_text[4]
unsigned char back[4]
unsigned char console_output[4]
unsigned char info_info_text[4]
unsigned char time_gp_keyframe[4]
unsigned char lamp[4]
unsigned char audio[4]
unsigned char nurb_uline[4]
unsigned char info_debug[4]
unsigned char nodeclass_texture[4]
unsigned char face_front[4]
unsigned char keyborder[4]
unsigned char row_alternate[4]
unsigned char nla_tweaking[4]
unsigned char console_input[4]
unsigned char bevel[4]
unsigned char nla_meta_sel[4]
unsigned char strip_select[4]
unsigned char info_warning_text[4]
unsigned char info_error_text[4]
unsigned char selected_strip[4]
unsigned char scene[4]
unsigned char syntaxb[4]
unsigned char gizmo_primary[4]
unsigned char panel_active[4]
unsigned char editor_border[4]
unsigned char xaxis[4]
unsigned char panel_text[4]
unsigned char transparent_checker_secondary[4]
short menu_shadow_width
unsigned char icon_modifier[4]
unsigned char zaxis[4]
unsigned char editor_outline_active[4]
unsigned char icon_shading[4]
unsigned char transparent_checker_size
unsigned char gizmo_view_align[4]
unsigned char panel_header[4]
unsigned char panel_sub_back[4]
unsigned char panel_outline[4]
unsigned char icon_folder[4]
uiWidgetColors wcol_text
unsigned char icon_scene[4]
unsigned char gizmo_hi[4]
unsigned char editor_outline[4]
unsigned char gizmo_secondary[4]
unsigned char icon_object[4]
uiWidgetColors wcol_tab
uiWidgetStateColors wcol_state
unsigned char gizmo_a[4]
uiWidgetColors wcol_scroll
unsigned char icon_collection[4]
unsigned char widget_text_cursor[4]
unsigned char gizmo_b[4]
unsigned char widget_emboss[4]
unsigned char waxis[4]
unsigned char transparent_checker_primary[4]
unsigned char icon_autokey[4]
unsigned char panel_back[4]
unsigned char yaxis[4]
unsigned char panel_title[4]
unsigned char icon_object_data[4]
ThemeSpace space_sequencer
int active_theme_area
ThemeSpace space_clip
ThemeSpace space_topbar
ThemeSpace space_action
ThemeSpace space_view3d
ThemeSpace space_properties
ThemeSpace space_outliner
ThemeSpace space_nla
ThemeRegions regions
ThemeSpace space_graph
ThemeUI tui
ThemeSpace space_preferences
ThemeSpace space_image
ThemeCommon common
ThemeSpace space_node
ThemeSpace space_console
ThemeSpace space_spreadsheet
char name[64]
ThemeSpace space_text
ThemeSpace space_info
ThemeSpace space_statusbar
ThemeSpace space_file
unsigned char inner_sel[4]
unsigned char inner[4]
unsigned char outline[4]
unsigned char outline_sel[4]
unsigned char text[4]
unsigned char item[4]
unsigned char text_sel[4]
unsigned char success[4]
unsigned char info[4]
unsigned char warning[4]
unsigned char error[4]
static int blend(const Tex *tex, const float texvec[3], TexResult *texres)