Blender V4.5
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.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.hh"
34#include "UI_interface_icons.hh"
35
36#include "GPU_framebuffer.hh"
37#include "interface_intern.hh"
38
39/* be sure to keep 'bThemeState' in sync */
41 nullptr,
44};
45
47{
49}
50
52{
54}
55
56/* ******************************************************** */
57/* THEMES */
58/* ******************************************************** */
59
60const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
61{
62 ThemeSpace *ts = nullptr;
63 static uchar error[4] = {240, 0, 240, 255};
64 static uchar back[4] = {0, 0, 0, 255};
65 static uchar none[4] = {0, 0, 0, 0};
66 static uchar white[4] = {255, 255, 255, 255};
67 static uchar black[4] = {0, 0, 0, 255};
68 static uchar setting = 0;
69 const uchar *cp = error;
70
71 /* ensure we're not getting a color after running BKE_blender_userdef_free */
72 BLI_assert(BLI_findindex(&U.themes, g_theme_state.theme) != -1);
73 BLI_assert(colorid != TH_UNDEFINED);
74
75 if (btheme) {
76
77 /* first check for ui buttons theme */
78 if (colorid < TH_THEMEUI) {
79
80 switch (colorid) {
81 case TH_NONE:
82 cp = none;
83 break;
84 case TH_BLACK:
85 cp = black;
86 break;
87 case TH_WHITE:
88 cp = white;
89 break;
90 case TH_REDALERT:
91 case TH_ERROR:
92 cp = btheme->tui.wcol_state.error;
93 break;
94 case TH_WARNING:
95 cp = btheme->tui.wcol_state.warning;
96 break;
97 case TH_INFO:
98 cp = btheme->tui.wcol_state.info;
99 break;
100 case TH_SUCCESS:
101 cp = btheme->tui.wcol_state.success;
102 break;
103 }
104 }
105 else {
106
107 switch (spacetype) {
108 case SPACE_PROPERTIES:
109 ts = &btheme->space_properties;
110 break;
111 case SPACE_VIEW3D:
112 ts = &btheme->space_view3d;
113 break;
114 case SPACE_GRAPH:
115 ts = &btheme->space_graph;
116 break;
117 case SPACE_FILE:
118 ts = &btheme->space_file;
119 break;
120 case SPACE_NLA:
121 ts = &btheme->space_nla;
122 break;
123 case SPACE_ACTION:
124 ts = &btheme->space_action;
125 break;
126 case SPACE_SEQ:
127 ts = &btheme->space_sequencer;
128 break;
129 case SPACE_IMAGE:
130 ts = &btheme->space_image;
131 break;
132 case SPACE_TEXT:
133 ts = &btheme->space_text;
134 break;
135 case SPACE_OUTLINER:
136 ts = &btheme->space_outliner;
137 break;
138 case SPACE_INFO:
139 ts = &btheme->space_info;
140 break;
141 case SPACE_USERPREF:
142 ts = &btheme->space_preferences;
143 break;
144 case SPACE_CONSOLE:
145 ts = &btheme->space_console;
146 break;
147 case SPACE_NODE:
148 ts = &btheme->space_node;
149 break;
150 case SPACE_CLIP:
151 ts = &btheme->space_clip;
152 break;
153 case SPACE_TOPBAR:
154 ts = &btheme->space_topbar;
155 break;
156 case SPACE_STATUSBAR:
157 ts = &btheme->space_statusbar;
158 break;
160 ts = &btheme->space_spreadsheet;
161 break;
162 default:
163 ts = &btheme->space_view3d;
164 break;
165 }
166
167 switch (colorid) {
168 case TH_BACK:
170 cp = ts->back;
171 }
172 else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
173 cp = ts->list;
174 }
175 else if (ELEM(g_theme_state.regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) {
176 cp = ts->header;
177 }
178 else if (g_theme_state.regionid == RGN_TYPE_NAV_BAR) {
179 cp = ts->navigation_bar;
180 }
181 else if (g_theme_state.regionid == RGN_TYPE_EXECUTE) {
182 cp = ts->execution_buts;
183 }
184 else if (g_theme_state.regionid == RGN_TYPE_ASSET_SHELF) {
185 cp = ts->asset_shelf.back;
186 }
187 else if (g_theme_state.regionid == RGN_TYPE_ASSET_SHELF_HEADER) {
188 cp = ts->asset_shelf.header_back;
189 }
190 else {
191 cp = ts->button;
192 }
193
194 copy_v4_v4_uchar(back, cp);
195 if (!ED_region_is_overlap(spacetype, g_theme_state.regionid)) {
196 back[3] = 255;
197 }
198 cp = back;
199 break;
200 case TH_BACK_GRAD:
201 cp = ts->back_grad;
202 break;
203
205 cp = &setting;
206 setting = ts->background_type;
207 break;
208 case TH_TEXT:
209 if (g_theme_state.regionid == RGN_TYPE_WINDOW) {
210 cp = ts->text;
211 }
212 else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
213 cp = ts->list_text;
214 }
215 else if (ELEM(g_theme_state.regionid,
219 {
220 cp = ts->header_text;
221 }
222 else {
223 cp = ts->button_text;
224 }
225 break;
226 case TH_TEXT_HI:
227 if (g_theme_state.regionid == RGN_TYPE_WINDOW) {
228 cp = ts->text_hi;
229 }
230 else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
231 cp = ts->list_text_hi;
232 }
233 else if (ELEM(g_theme_state.regionid,
237 {
238 cp = ts->header_text_hi;
239 }
240 else {
241 cp = ts->button_text_hi;
242 }
243 break;
244 case TH_TITLE:
245 if (g_theme_state.regionid == RGN_TYPE_WINDOW) {
246 cp = ts->title;
247 }
248 else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
249 cp = ts->list_title;
250 }
251 else if (ELEM(g_theme_state.regionid,
255 {
256 cp = ts->header_title;
257 }
258 else {
259 cp = ts->button_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 = ts->panelcolors.header;
276 break;
277 case TH_PANEL_BACK:
278 cp = ts->panelcolors.back;
279 break;
281 cp = ts->panelcolors.sub_back;
282 break;
283
284 case TH_BUTBACK:
285 cp = ts->button;
286 break;
287 case TH_BUTBACK_TEXT:
288 cp = ts->button_text;
289 break;
291 cp = ts->button_text_hi;
292 break;
293
294 case TH_TAB_ACTIVE:
295 cp = ts->tab_active;
296 break;
297 case TH_TAB_INACTIVE:
298 cp = ts->tab_inactive;
299 break;
300 case TH_TAB_BACK:
301 cp = ts->tab_back;
302 break;
303 case TH_TAB_OUTLINE:
304 cp = ts->tab_outline;
305 break;
306
307 case TH_SHADE1:
308 cp = ts->shade1;
309 break;
310 case TH_SHADE2:
311 cp = ts->shade2;
312 break;
313 case TH_HILITE:
314 cp = ts->hilite;
315 break;
316
317 case TH_GRID:
318 cp = ts->grid;
319 break;
321 cp = ts->time_scrub_background;
322 break;
324 cp = ts->time_marker_line;
325 break;
328 break;
329 case TH_VIEW_OVERLAY:
330 cp = ts->view_overlay;
331 break;
332 case TH_WIRE:
333 cp = ts->wire;
334 break;
335 case TH_WIRE_INNER:
336 cp = ts->syntaxr;
337 break;
338 case TH_WIRE_EDIT:
339 cp = ts->wire_edit;
340 break;
341 case TH_LIGHT:
342 cp = ts->lamp;
343 break;
344 case TH_SPEAKER:
345 cp = ts->speaker;
346 break;
347 case TH_CAMERA:
348 cp = ts->camera;
349 break;
350 case TH_EMPTY:
351 cp = ts->empty;
352 break;
353 case TH_SELECT:
354 cp = ts->select;
355 break;
356 case TH_ACTIVE:
357 cp = ts->active;
358 break;
359 case TH_GROUP:
360 cp = ts->group;
361 break;
362 case TH_GROUP_ACTIVE:
363 cp = ts->group_active;
364 break;
365 case TH_TRANSFORM:
366 cp = ts->transform;
367 break;
368 case TH_VERTEX:
369 cp = ts->vertex;
370 break;
371 case TH_VERTEX_SELECT:
372 cp = ts->vertex_select;
373 break;
374 case TH_VERTEX_ACTIVE:
375 cp = ts->vertex_active;
376 break;
377 case TH_VERTEX_BEVEL:
378 cp = ts->vertex_bevel;
379 break;
381 cp = ts->vertex_unreferenced;
382 break;
383 case TH_VERTEX_SIZE:
384 cp = &ts->vertex_size;
385 break;
386 case TH_OUTLINE_WIDTH:
387 cp = &ts->outline_width;
388 break;
389 case TH_OBCENTER_DIA:
390 cp = &ts->obcenter_dia;
391 break;
392 case TH_EDGE:
393 cp = ts->edge;
394 break;
395 case TH_EDGE_WIDTH:
396 cp = &ts->edge_width;
397 break;
398 case TH_EDGE_SELECT:
399 cp = ts->edge_select;
400 break;
402 cp = ts->edge_mode_select;
403 break;
404 case TH_EDGE_SEAM:
405 cp = ts->edge_seam;
406 break;
407 case TH_EDGE_SHARP:
408 cp = ts->edge_sharp;
409 break;
410 case TH_EDGE_CREASE:
411 cp = ts->edge_crease;
412 break;
413 case TH_EDGE_BEVEL:
414 cp = ts->edge_bevel;
415 break;
417 cp = ts->editmesh_active;
418 break;
419 case TH_EDGE_FACESEL:
420 cp = ts->edge_facesel;
421 break;
422 case TH_FACE:
423 cp = ts->face;
424 break;
425 case TH_FACE_SELECT:
426 cp = ts->face_select;
427 break;
429 cp = ts->face_mode_select;
430 break;
432 cp = ts->face_retopology;
433 break;
434 case TH_FACE_BACK:
435 cp = ts->face_back;
436 break;
437 case TH_FACE_FRONT:
438 cp = ts->face_front;
439 break;
440 case TH_FACE_DOT:
441 cp = ts->face_dot;
442 break;
443 case TH_FACEDOT_SIZE:
444 cp = &ts->facedot_size;
445 break;
447 cp = ts->extra_edge_len;
448 break;
450 cp = ts->extra_edge_angle;
451 break;
453 cp = ts->extra_face_area;
454 break;
456 cp = ts->extra_face_angle;
457 break;
458 case TH_NORMAL:
459 cp = ts->normal;
460 break;
461 case TH_VNORMAL:
462 cp = ts->vertex_normal;
463 break;
464 case TH_LNORMAL:
465 cp = ts->loop_normal;
466 break;
467 case TH_BONE_SOLID:
468 cp = ts->bone_solid;
469 break;
470 case TH_BONE_POSE:
471 cp = ts->bone_pose;
472 break;
474 cp = ts->bone_pose_active;
475 break;
477 cp = ts->bone_locked_weight;
478 break;
479 case TH_STRIP:
480 cp = ts->strip;
481 break;
482 case TH_STRIP_SELECT:
483 cp = ts->strip_select;
484 break;
486 cp = ts->keytype_keyframe;
487 break;
490 break;
492 cp = ts->keytype_extreme;
493 break;
495 cp = ts->keytype_extreme_select;
496 break;
498 cp = ts->keytype_breakdown;
499 break;
502 break;
504 cp = ts->keytype_jitter;
505 break;
507 cp = ts->keytype_jitter_select;
508 break;
510 cp = ts->keytype_movehold;
511 break;
514 break;
516 cp = ts->keytype_generated;
517 break;
520 break;
521 case TH_KEYBORDER:
522 cp = ts->keyborder;
523 break;
525 cp = ts->keyborder_select;
526 break;
527 case TH_CFRAME:
528 cp = ts->cframe;
529 break;
530 case TH_FRAME_BEFORE:
531 cp = ts->before_current_frame;
532 break;
533 case TH_FRAME_AFTER:
534 cp = ts->after_current_frame;
535 break;
536 case TH_TIME_KEYFRAME:
537 cp = ts->time_keyframe;
538 break;
540 cp = ts->time_gp_keyframe;
541 break;
542 case TH_NURB_ULINE:
543 cp = ts->nurb_uline;
544 break;
545 case TH_NURB_VLINE:
546 cp = ts->nurb_vline;
547 break;
549 cp = ts->nurb_sel_uline;
550 break;
552 cp = ts->nurb_sel_vline;
553 break;
554 case TH_ACTIVE_SPLINE:
555 cp = ts->act_spline;
556 break;
557 case TH_ACTIVE_VERT:
558 cp = ts->lastsel_point;
559 break;
560 case TH_HANDLE_FREE:
561 cp = ts->handle_free;
562 break;
563 case TH_HANDLE_AUTO:
564 cp = ts->handle_auto;
565 break;
567 cp = ts->handle_auto_clamped;
568 break;
569 case TH_HANDLE_VECT:
570 cp = ts->handle_vect;
571 break;
572 case TH_HANDLE_ALIGN:
573 cp = ts->handle_align;
574 break;
576 cp = ts->handle_sel_free;
577 break;
579 cp = ts->handle_sel_auto;
580 break;
583 break;
585 cp = ts->handle_sel_vect;
586 break;
588 cp = ts->handle_sel_align;
589 break;
591 cp = ts->freestyle_edge_mark;
592 break;
594 cp = ts->freestyle_face_mark;
595 break;
596
597 case TH_SYNTAX_B:
598 cp = ts->syntaxb;
599 break;
600 case TH_SYNTAX_V:
601 cp = ts->syntaxv;
602 break;
603 case TH_SYNTAX_C:
604 cp = ts->syntaxc;
605 break;
606 case TH_SYNTAX_L:
607 cp = ts->syntaxl;
608 break;
609 case TH_SYNTAX_D:
610 cp = ts->syntaxd;
611 break;
612 case TH_SYNTAX_R:
613 cp = ts->syntaxr;
614 break;
615 case TH_SYNTAX_N:
616 cp = ts->syntaxn;
617 break;
618 case TH_SYNTAX_S:
619 cp = ts->syntaxs;
620 break;
621 case TH_LINENUMBERS:
622 cp = ts->line_numbers;
623 break;
624
625 case TH_NODE:
626 cp = ts->syntaxl;
627 break;
628 case TH_NODE_INPUT:
629 cp = ts->syntaxn;
630 break;
631 case TH_NODE_OUTPUT:
632 cp = ts->nodeclass_output;
633 break;
634 case TH_NODE_COLOR:
635 cp = ts->syntaxb;
636 break;
637 case TH_NODE_FILTER:
638 cp = ts->nodeclass_filter;
639 break;
640 case TH_NODE_VECTOR:
641 cp = ts->nodeclass_vector;
642 break;
643 case TH_NODE_TEXTURE:
644 cp = ts->nodeclass_texture;
645 break;
646 case TH_NODE_PATTERN:
647 cp = ts->nodeclass_pattern;
648 break;
649 case TH_NODE_SCRIPT:
650 cp = ts->nodeclass_script;
651 break;
652 case TH_NODE_LAYOUT:
653 cp = ts->nodeclass_layout;
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 = ts->handle_vertex;
774 break;
776 cp = ts->handle_vertex_select;
777 break;
779 cp = &ts->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 = ts->ds_channel;
794 break;
796 cp = ts->ds_subchannel;
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
830 cp = ts->paint_curve_handle;
831 break;
833 cp = ts->paint_curve_pivot;
834 break;
835
836 case TH_METADATA_BG:
837 cp = ts->metadatabg;
838 break;
839 case TH_METADATA_TEXT:
840 cp = ts->metadatatext;
841 break;
842
843 case TH_UV_SHADOW:
844 cp = ts->uv_shadow;
845 break;
846
848 cp = ts->marker_outline;
849 break;
850 case TH_MARKER:
851 cp = ts->marker;
852 break;
853 case TH_ACT_MARKER:
854 cp = ts->act_marker;
855 break;
856 case TH_SEL_MARKER:
857 cp = ts->sel_marker;
858 break;
859 case TH_BUNDLE_SOLID:
860 cp = ts->bundle_solid;
861 break;
862 case TH_DIS_MARKER:
863 cp = ts->dis_marker;
864 break;
865 case TH_PATH_BEFORE:
866 cp = ts->path_before;
867 break;
868 case TH_PATH_AFTER:
869 cp = ts->path_after;
870 break;
872 cp = ts->path_keyframe_before;
873 break;
875 cp = ts->path_keyframe_after;
876 break;
877 case TH_CAMERA_PATH:
878 cp = ts->camera_path;
879 break;
881 cp = ts->camera_passepartout;
882 break;
883 case TH_LOCK_MARKER:
884 cp = ts->lock_marker;
885 break;
886
887 case TH_MATCH:
888 cp = ts->match;
889 break;
890
892 cp = ts->selected_highlight;
893 break;
894
895 case TH_SELECT_ACTIVE:
896 cp = ts->active;
897 break;
898
900 cp = ts->selected_object;
901 break;
902
903 case TH_ACTIVE_OBJECT:
904 cp = ts->active_object;
905 break;
906
907 case TH_EDITED_OBJECT:
908 cp = ts->edited_object;
909 break;
910
911 case TH_ROW_ALTERNATE:
912 cp = ts->row_alternate;
913 break;
914
915 case TH_SKIN_ROOT:
916 cp = ts->skin_root;
917 break;
918
919 case TH_ANIM_ACTIVE:
920 cp = ts->anim_active;
921 break;
922 case TH_ANIM_INACTIVE:
923 cp = ts->anim_non_active;
924 break;
926 cp = ts->anim_preview_range;
927 break;
928
929 case TH_NLA_TWEAK:
930 cp = ts->nla_tweaking;
931 break;
933 cp = ts->nla_tweakdupli;
934 break;
935
936 case TH_NLA_TRACK:
937 cp = ts->nla_track;
938 break;
940 cp = ts->nla_transition;
941 break;
943 cp = ts->nla_transition_sel;
944 break;
945 case TH_NLA_META:
946 cp = ts->nla_meta;
947 break;
948 case TH_NLA_META_SEL:
949 cp = ts->nla_meta_sel;
950 break;
951 case TH_NLA_SOUND:
952 cp = ts->nla_sound;
953 break;
954 case TH_NLA_SOUND_SEL:
955 cp = ts->nla_sound_sel;
956 break;
957
958 case TH_WIDGET_EMBOSS:
959 cp = btheme->tui.widget_emboss;
960 break;
961
962 case TH_EDITOR_BORDER:
963 cp = btheme->tui.editor_border;
964 break;
966 cp = btheme->tui.editor_outline;
967 break;
969 cp = btheme->tui.editor_outline_active;
970 break;
972 cp = btheme->tui.widget_text_cursor;
973 break;
975 cp = btheme->tui.wcol_text.item;
976 break;
978 cp = btheme->tui.wcol_text.text_sel;
979 break;
980
982 cp = btheme->tui.transparent_checker_primary;
983 break;
986 break;
988 cp = &btheme->tui.transparent_checker_size;
989 break;
990
991 case TH_AXIS_X:
992 cp = btheme->tui.xaxis;
993 break;
994 case TH_AXIS_Y:
995 cp = btheme->tui.yaxis;
996 break;
997 case TH_AXIS_Z:
998 cp = btheme->tui.zaxis;
999 break;
1000
1001 case TH_GIZMO_HI:
1002 cp = btheme->tui.gizmo_hi;
1003 break;
1004 case TH_GIZMO_PRIMARY:
1005 cp = btheme->tui.gizmo_primary;
1006 break;
1007 case TH_GIZMO_SECONDARY:
1008 cp = btheme->tui.gizmo_secondary;
1009 break;
1011 cp = btheme->tui.gizmo_view_align;
1012 break;
1013 case TH_GIZMO_A:
1014 cp = btheme->tui.gizmo_a;
1015 break;
1016 case TH_GIZMO_B:
1017 cp = btheme->tui.gizmo_b;
1018 break;
1019
1020 case TH_ICON_SCENE:
1021 cp = btheme->tui.icon_scene;
1022 break;
1023 case TH_ICON_COLLECTION:
1024 cp = btheme->tui.icon_collection;
1025 break;
1026 case TH_ICON_OBJECT:
1027 cp = btheme->tui.icon_object;
1028 break;
1030 cp = btheme->tui.icon_object_data;
1031 break;
1032 case TH_ICON_MODIFIER:
1033 cp = btheme->tui.icon_modifier;
1034 break;
1035 case TH_ICON_SHADING:
1036 cp = btheme->tui.icon_shading;
1037 break;
1038 case TH_ICON_FOLDER:
1039 cp = btheme->tui.icon_folder;
1040 break;
1041 case TH_ICON_AUTOKEY:
1042 cp = btheme->tui.icon_autokey;
1043 break;
1044 case TH_ICON_FUND: {
1045 /* Development fund icon color is not part of theme. */
1046 static const uchar red[4] = {204, 48, 72, 255};
1047 cp = red;
1048 break;
1049 }
1050
1051 case TH_SCROLL_TEXT:
1052 cp = btheme->tui.wcol_scroll.text;
1053 break;
1054
1055 case TH_INFO_SELECTED:
1056 cp = ts->info_selected;
1057 break;
1059 cp = ts->info_selected_text;
1060 break;
1061 case TH_INFO_ERROR_TEXT:
1062 cp = ts->info_error_text;
1063 break;
1065 cp = ts->info_warning_text;
1066 break;
1067 case TH_INFO_INFO_TEXT:
1068 cp = ts->info_info_text;
1069 break;
1070 case TH_INFO_DEBUG:
1071 cp = ts->info_debug;
1072 break;
1073 case TH_INFO_DEBUG_TEXT:
1074 cp = ts->info_debug_text;
1075 break;
1076 case TH_INFO_PROPERTY:
1077 cp = ts->info_property;
1078 break;
1080 cp = ts->info_property_text;
1081 break;
1082 case TH_INFO_OPERATOR:
1083 cp = ts->info_operator;
1084 break;
1086 cp = ts->info_operator_text;
1087 break;
1089 cp = ts->clipping_border_3d;
1090 break;
1091 }
1092 }
1093 }
1094
1095 return (const uchar *)cp;
1096}
1097
1099{
1100 /* We search for the theme with the default name. */
1101 bTheme *btheme = static_cast<bTheme *>(
1102 BLI_findstring(&U.themes, U_theme_default.name, offsetof(bTheme, name)));
1103 if (btheme == nullptr) {
1104 btheme = MEM_callocN<bTheme>(__func__);
1105 STRNCPY(btheme->name, U_theme_default.name);
1106 BLI_addhead(&U.themes, btheme);
1107 }
1108
1109 /* Must be first, see `U.themes` doc-string. */
1110 BLI_listbase_rotate_first(&U.themes, btheme);
1111
1112 UI_SetTheme(0, 0); /* make sure the global used in this file is set */
1113
1114 const int active_theme_area = btheme->active_theme_area;
1115 MEMCPY_STRUCT_AFTER(btheme, &U_theme_default, name);
1116 btheme->active_theme_area = active_theme_area;
1117}
1118
1120{
1121 BLI_freelistN(&U.uistyles);
1122 /* gets automatically re-allocated */
1123 uiStyleInit();
1124}
1125
1126void UI_SetTheme(int spacetype, int regionid)
1127{
1128 if (spacetype) {
1129 /* later on, a local theme can be found too */
1130 g_theme_state.theme = static_cast<bTheme *>(U.themes.first);
1131 g_theme_state.spacetype = spacetype;
1132 g_theme_state.regionid = regionid;
1133 }
1134 else if (regionid) {
1135 /* popups */
1136 g_theme_state.theme = static_cast<bTheme *>(U.themes.first);
1137 g_theme_state.spacetype = SPACE_PROPERTIES;
1138 g_theme_state.regionid = regionid;
1139 }
1140 else {
1141 /* for safety, when theme was deleted */
1142 g_theme_state.theme = static_cast<bTheme *>(U.themes.first);
1143 g_theme_state.spacetype = SPACE_VIEW3D;
1144 g_theme_state.regionid = RGN_TYPE_WINDOW;
1145 }
1146}
1147
1149{
1150 return static_cast<bTheme *>(U.themes.first);
1151}
1152
1153void UI_Theme_Store(bThemeState *theme_state)
1154{
1155 *theme_state = g_theme_state;
1156}
1157void UI_Theme_Restore(const bThemeState *theme_state)
1158{
1159 g_theme_state = *theme_state;
1160}
1161
1162void UI_GetThemeColorShadeAlpha4ubv(int colorid, int coloffset, int alphaoffset, uchar col[4])
1163{
1164 int r, g, b, a;
1165 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1166 r = coloffset + int(cp[0]);
1167 CLAMP(r, 0, 255);
1168 g = coloffset + int(cp[1]);
1169 CLAMP(g, 0, 255);
1170 b = coloffset + int(cp[2]);
1171 CLAMP(b, 0, 255);
1172 a = alphaoffset + int(cp[3]);
1173 CLAMP(a, 0, 255);
1174
1175 col[0] = r;
1176 col[1] = g;
1177 col[2] = b;
1178 col[3] = a;
1179}
1180
1181void UI_GetThemeColorBlend3ubv(int colorid1, int colorid2, float fac, uchar col[3])
1182{
1183 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1184 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1185
1186 CLAMP(fac, 0.0f, 1.0f);
1187 col[0] = floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
1188 col[1] = floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
1189 col[2] = floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
1190}
1191
1192void UI_GetThemeColorBlend3f(int colorid1, int colorid2, float fac, float r_col[3])
1193{
1194 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1195 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1196
1197 CLAMP(fac, 0.0f, 1.0f);
1198 r_col[0] = ((1.0f - fac) * cp1[0] + fac * cp2[0]) / 255.0f;
1199 r_col[1] = ((1.0f - fac) * cp1[1] + fac * cp2[1]) / 255.0f;
1200 r_col[2] = ((1.0f - fac) * cp1[2] + fac * cp2[2]) / 255.0f;
1201}
1202
1203void UI_GetThemeColorBlend4f(int colorid1, int colorid2, float fac, float r_col[4])
1204{
1205 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1206 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1207
1208 CLAMP(fac, 0.0f, 1.0f);
1209 r_col[0] = ((1.0f - fac) * cp1[0] + fac * cp2[0]) / 255.0f;
1210 r_col[1] = ((1.0f - fac) * cp1[1] + fac * cp2[1]) / 255.0f;
1211 r_col[2] = ((1.0f - fac) * cp1[2] + fac * cp2[2]) / 255.0f;
1212 r_col[3] = ((1.0f - fac) * cp1[3] + fac * cp2[3]) / 255.0f;
1213}
1214
1215void UI_FontThemeColor(int fontid, int colorid)
1216{
1217 uchar color[4];
1218 UI_GetThemeColor4ubv(colorid, color);
1219 BLF_color4ubv(fontid, color);
1220}
1221
1222float UI_GetThemeValuef(int colorid)
1223{
1224 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1225 return float(cp[0]);
1226}
1227
1228int UI_GetThemeValue(int colorid)
1229{
1230 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1231 return int(cp[0]);
1232}
1233
1234float UI_GetThemeValueTypef(int colorid, int spacetype)
1235{
1236 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1237 return float(cp[0]);
1238}
1239
1240int UI_GetThemeValueType(int colorid, int spacetype)
1241{
1242 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1243 return int(cp[0]);
1244}
1245
1246void UI_GetThemeColor3fv(int colorid, float col[3])
1247{
1248 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1249 col[0] = float(cp[0]) / 255.0f;
1250 col[1] = float(cp[1]) / 255.0f;
1251 col[2] = float(cp[2]) / 255.0f;
1252}
1253
1254void UI_GetThemeColor4fv(int colorid, float col[4])
1255{
1256 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1257 col[0] = float(cp[0]) / 255.0f;
1258 col[1] = float(cp[1]) / 255.0f;
1259 col[2] = float(cp[2]) / 255.0f;
1260 col[3] = float(cp[3]) / 255.0f;
1261}
1262
1263void UI_GetThemeColorType4fv(int colorid, int spacetype, float col[4])
1264{
1265 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1266 col[0] = float(cp[0]) / 255.0f;
1267 col[1] = float(cp[1]) / 255.0f;
1268 col[2] = float(cp[2]) / 255.0f;
1269 col[3] = float(cp[3]) / 255.0f;
1270}
1271
1272void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3])
1273{
1274 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1275 int r, g, b;
1276
1277 r = offset + int(cp[0]);
1278 CLAMP(r, 0, 255);
1279 g = offset + int(cp[1]);
1280 CLAMP(g, 0, 255);
1281 b = offset + int(cp[2]);
1282 CLAMP(b, 0, 255);
1283
1284 col[0] = float(r) / 255.0f;
1285 col[1] = float(g) / 255.0f;
1286 col[2] = float(b) / 255.0f;
1287}
1288
1289void UI_GetThemeColorShade3ubv(int colorid, int offset, uchar col[3])
1290{
1291 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1292 int r, g, b;
1293
1294 r = offset + int(cp[0]);
1295 CLAMP(r, 0, 255);
1296 g = offset + int(cp[1]);
1297 CLAMP(g, 0, 255);
1298 b = offset + int(cp[2]);
1299 CLAMP(b, 0, 255);
1300
1301 col[0] = r;
1302 col[1] = g;
1303 col[2] = b;
1304}
1305
1307 int colorid1, int colorid2, float fac, int offset, uchar col[3])
1308{
1309 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1310 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1311
1312 CLAMP(fac, 0.0f, 1.0f);
1313
1314 float blend[3];
1315 blend[0] = (offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0])) / 255.0f;
1316 blend[1] = (offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1])) / 255.0f;
1317 blend[2] = (offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2])) / 255.0f;
1318
1320}
1321
1322void UI_GetThemeColorShade4ubv(int colorid, int offset, uchar col[4])
1323{
1324 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1325 int r, g, b;
1326
1327 r = offset + int(cp[0]);
1328 CLAMP(r, 0, 255);
1329 g = offset + int(cp[1]);
1330 CLAMP(g, 0, 255);
1331 b = offset + int(cp[2]);
1332 CLAMP(b, 0, 255);
1333
1334 col[0] = r;
1335 col[1] = g;
1336 col[2] = b;
1337 col[3] = cp[3];
1338}
1339
1340void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4])
1341{
1342 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1343 int r, g, b, a;
1344
1345 r = coloffset + int(cp[0]);
1346 CLAMP(r, 0, 255);
1347 g = coloffset + int(cp[1]);
1348 CLAMP(g, 0, 255);
1349 b = coloffset + int(cp[2]);
1350 CLAMP(b, 0, 255);
1351 a = alphaoffset + int(cp[3]);
1352 CLAMP(a, 0, 255);
1353
1354 col[0] = float(r) / 255.0f;
1355 col[1] = float(g) / 255.0f;
1356 col[2] = float(b) / 255.0f;
1357 col[3] = float(a) / 255.0f;
1358}
1359
1360void UI_GetThemeColorBlendShade3fv(int colorid1, int colorid2, float fac, int offset, float col[3])
1361{
1362 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1363 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1364 int r, g, b;
1365
1366 CLAMP(fac, 0.0f, 1.0f);
1367
1368 r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
1369 CLAMP(r, 0, 255);
1370 g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
1371 CLAMP(g, 0, 255);
1372 b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
1373 CLAMP(b, 0, 255);
1374
1375 col[0] = float(r) / 255.0f;
1376 col[1] = float(g) / 255.0f;
1377 col[2] = float(b) / 255.0f;
1378}
1379
1380void UI_GetThemeColorBlendShade4fv(int colorid1, int colorid2, float fac, int offset, float col[4])
1381{
1382 const uchar *cp1 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid1);
1383 const uchar *cp2 = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid2);
1384 int r, g, b, a;
1385
1386 CLAMP(fac, 0.0f, 1.0f);
1387
1388 r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
1389 CLAMP(r, 0, 255);
1390 g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
1391 CLAMP(g, 0, 255);
1392 b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
1393 CLAMP(b, 0, 255);
1394
1395 a = floorf((1.0f - fac) * cp1[3] + fac * cp2[3]); /* No shading offset. */
1396 CLAMP(a, 0, 255);
1397
1398 col[0] = float(r) / 255.0f;
1399 col[1] = float(g) / 255.0f;
1400 col[2] = float(b) / 255.0f;
1401 col[3] = float(a) / 255.0f;
1402}
1403
1404void UI_GetThemeColor3ubv(int colorid, uchar col[3])
1405{
1406 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1407 col[0] = cp[0];
1408 col[1] = cp[1];
1409 col[2] = cp[2];
1410}
1411
1412void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4])
1413{
1414 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1415 int r, g, b, a;
1416
1417 r = offset + int(cp[0]);
1418 CLAMP(r, 0, 255);
1419 g = offset + int(cp[1]);
1420 CLAMP(g, 0, 255);
1421 b = offset + int(cp[2]);
1422 CLAMP(b, 0, 255);
1423
1424 a = int(cp[3]); /* no shading offset... */
1425 CLAMP(a, 0, 255);
1426
1427 col[0] = float(r) / 255.0f;
1428 col[1] = float(g) / 255.0f;
1429 col[2] = float(b) / 255.0f;
1430 col[3] = float(a) / 255.0f;
1431}
1432
1433void UI_GetThemeColor4ubv(int colorid, uchar col[4])
1434{
1435 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1436 col[0] = cp[0];
1437 col[1] = cp[1];
1438 col[2] = cp[2];
1439 col[3] = cp[3];
1440}
1441
1442void UI_GetThemeColorType3fv(int colorid, int spacetype, float col[3])
1443{
1444 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1445 col[0] = float(cp[0]) / 255.0f;
1446 col[1] = float(cp[1]) / 255.0f;
1447 col[2] = float(cp[2]) / 255.0f;
1448}
1449
1450void UI_GetThemeColorType3ubv(int colorid, int spacetype, uchar col[3])
1451{
1452 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1453 col[0] = cp[0];
1454 col[1] = cp[1];
1455 col[2] = cp[2];
1456}
1457
1458void UI_GetThemeColorType4ubv(int colorid, int spacetype, uchar col[4])
1459{
1460 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, spacetype, colorid);
1461 col[0] = cp[0];
1462 col[1] = cp[1];
1463 col[2] = cp[2];
1464 col[3] = cp[3];
1465}
1466
1468{
1469 if (colorid == 0) {
1470 return false;
1471 }
1472 if (colorid == TH_ICON_FUND) {
1473 /* Always color development fund icon. */
1474 }
1475 else if (!((g_theme_state.spacetype == SPACE_OUTLINER &&
1476 g_theme_state.regionid == RGN_TYPE_WINDOW) ||
1477 (g_theme_state.spacetype == SPACE_PROPERTIES &&
1478 g_theme_state.regionid == RGN_TYPE_NAV_BAR) ||
1479 (g_theme_state.spacetype == SPACE_FILE && g_theme_state.regionid == RGN_TYPE_WINDOW)))
1480 {
1481 /* Only colored icons in specific places, overall UI is intended
1482 * to stay monochrome and out of the way except a few places where it
1483 * is important to communicate different data types. */
1484 return false;
1485 }
1486
1487 const uchar *cp = UI_ThemeGetColorPtr(g_theme_state.theme, g_theme_state.spacetype, colorid);
1488 col[0] = cp[0];
1489 col[1] = cp[1];
1490 col[2] = cp[2];
1491 col[3] = cp[3];
1492
1493 return true;
1494}
1495
1496void UI_GetColorPtrShade3ubv(const uchar cp[3], int offset, uchar r_col[3])
1497{
1498 int r, g, b;
1499
1500 r = offset + int(cp[0]);
1501 g = offset + int(cp[1]);
1502 b = offset + int(cp[2]);
1503
1504 CLAMP(r, 0, 255);
1505 CLAMP(g, 0, 255);
1506 CLAMP(b, 0, 255);
1507
1508 r_col[0] = r;
1509 r_col[1] = g;
1510 r_col[2] = b;
1511}
1512
1514 const uchar cp1[3], const uchar cp2[3], float fac, int offset, uchar r_col[3])
1515{
1516 int r, g, b;
1517
1518 CLAMP(fac, 0.0f, 1.0f);
1519 r = offset + floor((1.0f - fac) * cp1[0] + fac * cp2[0]);
1520 g = offset + floor((1.0f - fac) * cp1[1] + fac * cp2[1]);
1521 b = offset + floor((1.0f - fac) * cp1[2] + fac * cp2[2]);
1522
1523 CLAMP(r, 0, 255);
1524 CLAMP(g, 0, 255);
1525 CLAMP(b, 0, 255);
1526
1527 r_col[0] = r;
1528 r_col[1] = g;
1529 r_col[2] = b;
1530}
1531
1532void UI_ThemeClearColor(int colorid)
1533{
1534 float col[3];
1535
1536 UI_GetThemeColor3fv(colorid, col);
1537 GPU_clear_color(col[0], col[1], col[2], 1.0f);
1538}
1539
1541{
1542 const bTheme *btheme = UI_GetTheme();
1543 return int(btheme->tui.menu_shadow_width * UI_SCALE_FAC);
1544}
1545
1546void UI_make_axis_color(const uchar col[3], const char axis, uchar r_col[3])
1547{
1548 uchar col_axis[3];
1549
1550 switch (axis) {
1551 case 'X':
1553 UI_GetColorPtrBlendShade3ubv(col, col_axis, 0.5f, -10, r_col);
1554 break;
1555 case 'Y':
1557 UI_GetColorPtrBlendShade3ubv(col, col_axis, 0.5f, -10, r_col);
1558 break;
1559 case 'Z':
1561 UI_GetColorPtrBlendShade3ubv(col, col_axis, 0.5f, -10, r_col);
1562 break;
1563 default:
1564 BLI_assert(0);
1565 break;
1566 }
1567}
void BLF_color4ubv(int fontid, const unsigned char rgba[4])
Definition blf.cc:449
#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])
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:688
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_EXECUTE
@ 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
@ 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:1490
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_EDGE_SHARP
@ 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_TIME_KEYFRAME
@ TH_KEYTYPE_BREAKDOWN
@ TH_EDGE_FACESEL
@ 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_TRANSPARENT_CHECKER_PRIMARY
@ TH_NODE_ZONE_REPEAT
@ TH_WIDGET_TEXT_HIGHLIGHT
@ TH_BONE_POSE_ACTIVE
@ TH_DRAWEXTRA_EDGEANG
@ TH_SYNTAX_B
@ TH_FREESTYLE_FACE_MARK
@ TH_NLA_TRACK
@ TH_INFO_DEBUG
@ TH_DRAWEXTRA_FACEANG
@ TH_ACTIVE_OBJECT
@ TH_ICON_FOLDER
@ TH_TAB_ACTIVE
@ TH_FREESTYLE_EDGE_MARK
@ 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_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_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_SKIN_ROOT
@ TH_EDGE_SELECT
@ TH_TRANSPARENT_CHECKER_SECONDARY
@ TH_ICON_OBJECT_DATA
@ TH_ACTIVE_VERT
@ TH_HANDLE_SEL_AUTOCLAMP
@ TH_ACTIVE_SPLINE
@ TH_STITCH_PREVIEW_VERT
@ TH_EDITED_OBJECT
@ TH_CAMERA
@ TH_KEYTYPE_KEYFRAME_SELECT
@ TH_SELECTED_OBJECT
@ TH_PATH_AFTER
@ TH_ICON_SHADING
@ TH_NODE_PATTERN
@ TH_BUTBACK_TEXT
@ TH_STITCH_PREVIEW_UNSTITCHABLE
@ TH_TRANSFORM
@ TH_NODE_ATTRIBUTE
@ TH_EDGE_BEVEL
@ TH_OUTLINE_WIDTH
@ TH_BUTBACK
@ 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_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_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_PAINT_CURVE_HANDLE
@ TH_SUCCESS
@ TH_FACE_RETOPOLOGY
@ TH_STITCH_PREVIEW_EDGE
@ TH_NLA_TWEAK
@ TH_NODE_GRID_LEVELS
@ TH_PREVIEW_BACK
@ TH_HANDLE_SEL_FREE
@ TH_VERTEX_BEVEL
@ 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_EDGE_SEAM
@ 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_STRIP
@ TH_NODE_CONVERTER
@ TH_KEYTYPE_MOVEHOLD_SELECT
@ TH_THEMEUI
@ 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_STITCH_PREVIEW_STITCHABLE
@ TH_HEADER_TEXT
@ TH_PAINT_CURVE_PIVOT
@ TH_V3D_CLIPPING_BORDER
@ TH_NLA_TWEAK_DUPLI
@ TH_AXIS_Z
@ TH_EDGE_WIDTH
@ TH_EDITMESH_ACTIVE
@ TH_SEQ_PREVIEW
@ 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_BUTBACK_TEXT_HI
@ TH_ACT_MARKER
@ TH_FACE_DOT
@ 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_NODE_LAYOUT
@ TH_EDGE_CREASE
@ 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_SEQ_IMAGE
@ TH_NODE_INTERFACE
@ TH_STITCH_PREVIEW_FACE
@ 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_TEXT_HI
#define U
#define floorf(x)
#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)
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:51
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:60
int UI_GetThemeValueType(int colorid, int spacetype)
void UI_GetThemeColorBlend4f(int colorid1, int colorid2, float fac, 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:40
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:46
unsigned char back[4]
unsigned char header_back[4]
unsigned char keytype_keyframe_select[4]
unsigned char back_grad[4]
unsigned char preview_stitch_vert[4]
unsigned char path_before[4]
unsigned char edge_bevel[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]
ThemeAssetShelf asset_shelf
unsigned char handle_sel_auto[4]
unsigned char time_scrub_background[4]
unsigned char syntaxl[4]
unsigned char active_object[4]
unsigned char nodeclass_filter[4]
unsigned char keytype_jitter[4]
unsigned char keytype_keyframe[4]
unsigned char keytype_breakdown_select[4]
unsigned char anim_active[4]
unsigned char anim_non_active[4]
unsigned char shade2[4]
unsigned char handle_free[4]
unsigned char console_info[4]
unsigned char edge_crease[4]
unsigned char group_active[4]
unsigned char edge_select[4]
unsigned char handle_sel_vect[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 keytype_extreme[4]
unsigned char text[4]
unsigned char gp_vertex_size
unsigned char syntaxv[4]
unsigned char ds_subchannel[4]
unsigned char syntaxc[4]
unsigned char syntaxn[4]
unsigned char gp_vertex_select[4]
unsigned char sel_marker[4]
unsigned char navigation_bar[4]
unsigned char keytype_movehold_select[4]
unsigned char vertex_unreferenced[4]
unsigned char effect[4]
unsigned char list_text[4]
unsigned char transition[4]
unsigned char keytype_extreme_select[4]
unsigned char active[4]
unsigned char vertex_select[4]
unsigned char outline_width
unsigned char selected_object[4]
unsigned char time_marker_line_selected[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 info_property_text[4]
unsigned char normal[4]
unsigned char syntaxs[4]
unsigned char time_keyframe[4]
unsigned char transform[4]
unsigned char select[4]
unsigned char handle_vertex_size
unsigned char before_current_frame[4]
unsigned char list[4]
unsigned char face_dot[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]
uiPanelColors panelcolors
unsigned char handle_vect[4]
unsigned char syntaxr[4]
unsigned char handle_auto[4]
unsigned char extra_edge_len[4]
unsigned char list_title[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 handle_auto_clamped[4]
unsigned char keytype_breakdown[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 nla_track[4]
unsigned char node_zone_foreach_geometry_element[4]
unsigned char nodeclass_vector[4]
unsigned char camera[4]
unsigned char button_text_hi[4]
unsigned char preview_stitch_face[4]
unsigned char freestyle_face_mark[4]
unsigned char nodeclass_layout[4]
unsigned char path_after[4]
unsigned char title[4]
unsigned char edge_facesel[4]
unsigned char button_title[4]
unsigned char face[4]
unsigned char bone_locked_weight[4]
unsigned char group[4]
unsigned char keyborder_select[4]
unsigned char extra_face_angle[4]
unsigned char tab_back[4]
unsigned char vertex_bevel[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 freestyle_edge_mark[4]
unsigned char anim_preview_range[4]
unsigned char preview_back[4]
unsigned char gp_vertex[4]
unsigned char extra_face_area[4]
unsigned char handle_sel_align[4]
unsigned char lastsel_point[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 button_text[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 edge_sharp[4]
unsigned char wire[4]
unsigned char shade1[4]
unsigned char handle_align[4]
unsigned char color_strip[4]
unsigned char vertex_active[4]
unsigned char preview_stitch_active[4]
unsigned char nodeclass_geometry[4]
unsigned char cframe[4]
unsigned char path_keyframe_before[4]
unsigned char nodeclass_script[4]
unsigned char tab_inactive[4]
unsigned char nodeclass_shader[4]
unsigned char time_marker_line[4]
unsigned char paint_curve_pivot[4]
unsigned char nodeclass_pattern[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 uv_shadow[4]
unsigned char edited_object[4]
unsigned char node_zone_closure[4]
unsigned char button[4]
unsigned char grid[4]
unsigned char path_keyframe_after[4]
unsigned char keytype_generated[4]
unsigned char hilite[4]
unsigned char edge_seam[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 handle_sel_auto_clamped[4]
unsigned char info_operator_text[4]
unsigned char back[4]
unsigned char tab_active[4]
unsigned char console_output[4]
unsigned char act_spline[4]
unsigned char info_info_text[4]
unsigned char time_gp_keyframe[4]
unsigned char lamp[4]
unsigned char handle_vertex_select[4]
unsigned char handle_sel_free[4]
unsigned char audio[4]
unsigned char nurb_uline[4]
unsigned char keytype_movehold[4]
unsigned char info_debug[4]
unsigned char nodeclass_texture[4]
unsigned char paint_curve_handle[4]
unsigned char face_front[4]
unsigned char handle_vertex[4]
unsigned char keyborder[4]
unsigned char execution_buts[4]
unsigned char row_alternate[4]
unsigned char ds_channel[4]
unsigned char nla_tweaking[4]
unsigned char list_text_hi[4]
unsigned char console_input[4]
unsigned char nla_meta_sel[4]
unsigned char strip_select[4]
unsigned char info_warning_text[4]
unsigned char tab_outline[4]
unsigned char info_error_text[4]
unsigned char selected_strip[4]
unsigned char keytype_generated_select[4]
unsigned char keytype_jitter_select[4]
unsigned char scene[4]
unsigned char syntaxb[4]
unsigned char gizmo_primary[4]
unsigned char editor_border[4]
unsigned char xaxis[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 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]
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 transparent_checker_primary[4]
unsigned char icon_autokey[4]
unsigned char yaxis[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
ThemeSpace space_graph
ThemeUI tui
ThemeSpace space_preferences
ThemeSpace space_image
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 sub_back[4]
unsigned char back[4]
unsigned char header[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)