Cleanup: rename DEPRECATED to UNUSED
[blender.git] / source / blender / makesdna / DNA_userdef_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_USERDEF_TYPES_H__
25 #define __DNA_USERDEF_TYPES_H__
26
27 #include "DNA_listBase.h"
28 #include "DNA_texture_types.h" /* ColorBand */
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 /* themes; defines in BIF_resource.h */
35 struct ColorBand;
36
37 /* ************************ style definitions ******************** */
38
39 #define MAX_STYLE_NAME  64
40
41 #define GPU_VIEWPORT_QUALITY_FXAA 0.10f
42 #define GPU_VIEWPORT_QUALITY_TAA8 0.25f
43 #define GPU_VIEWPORT_QUALITY_TAA16 0.6f
44 #define GPU_VIEWPORT_QUALITY_TAA32 0.8f
45
46 /** default offered by Blender.
47  * #uiFont.uifont_id */
48 typedef enum eUIFont_ID {
49         UIFONT_DEFAULT  = 0,
50 /*      UIFONT_BITMAP   = 1 */ /* UNUSED */
51
52         /* free slots */
53         UIFONT_CUSTOM1  = 2,
54         UIFONT_CUSTOM2  = 3,
55 } eUIFont_ID;
56
57 /* default fonts to load/initialize */
58 /* first font is the default (index 0), others optional */
59 typedef struct uiFont {
60         struct uiFont *next, *prev;
61         /** 1024 = FILE_MAX. */
62         char filename[1024];
63         /** From blfont lib. */
64         short blf_id;
65         /** Own id (eUIFont_ID). */
66         short uifont_id;
67         /** Fonts that read from left to right. */
68         short r_to_l;
69         char _pad0[2];
70 } uiFont;
71
72 /* this state defines appearance of text */
73 typedef struct uiFontStyle {
74         /** Saved in file, 0 is default. */
75         short uifont_id;
76         /** Actual size depends on 'global' dpi. */
77         short points;
78         /** Unfitted or default kerning value. */
79         short kerning;
80         /** Style hint. */
81         short italic, bold;
82         /** Value is amount of pixels blur. */
83         short shadow;
84         /** Shadow offset in pixels. */
85         short shadx, shady;
86         /** Total alpha. */
87         float shadowalpha;
88         /** 1 value, typically white or black anyway. */
89         float shadowcolor;
90 } uiFontStyle;
91
92 /* this is fed to the layout engine and widget code */
93
94 typedef struct uiStyle {
95         struct uiStyle *next, *prev;
96
97         /** MAX_STYLE_NAME. */
98         char name[64];
99
100         uiFontStyle paneltitle;
101         uiFontStyle grouplabel;
102         uiFontStyle widgetlabel;
103         uiFontStyle widget;
104
105         float panelzoom;
106
107         /** In characters. */
108         short minlabelchars;
109         /** In characters. */
110         short minwidgetchars;
111
112         short columnspace;
113         short templatespace;
114         short boxspace;
115         short buttonspacex;
116         short buttonspacey;
117         short panelspace;
118         short panelouter;
119
120         char _pad0[2];
121 } uiStyle;
122
123 typedef struct uiWidgetColors {
124         char outline[4];
125         char inner[4];
126         char inner_sel[4];
127         char item[4];
128         char text[4];
129         char text_sel[4];
130         char shaded;
131         char _pad0[7];
132         short shadetop, shadedown;
133         float roundness;
134 } uiWidgetColors;
135
136 typedef struct uiWidgetStateColors {
137         char inner_anim[4];
138         char inner_anim_sel[4];
139         char inner_key[4];
140         char inner_key_sel[4];
141         char inner_driven[4];
142         char inner_driven_sel[4];
143         char inner_overridden[4];
144         char inner_overridden_sel[4];
145         char inner_changed[4];
146         char inner_changed_sel[4];
147         float blend;
148         char _pad0[4];
149 } uiWidgetStateColors;
150
151 typedef struct uiPanelColors {
152         char header[4];
153         char back[4];
154         char sub_back[4];
155         char _pad0[4];
156 } uiPanelColors;
157
158 typedef struct ThemeUI {
159         /* Interface Elements (buttons, menus, icons) */
160         uiWidgetColors wcol_regular, wcol_tool, wcol_toolbar_item, wcol_text;
161         uiWidgetColors wcol_radio, wcol_option, wcol_toggle;
162         uiWidgetColors wcol_num, wcol_numslider, wcol_tab;
163         uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item, wcol_tooltip;
164         uiWidgetColors wcol_box, wcol_scroll, wcol_progress, wcol_list_item, wcol_pie_menu;
165
166         uiWidgetStateColors wcol_state;
167
168         char widget_emboss[4];
169
170         /* fac: 0 - 1 for blend factor, width in pixels */
171         float menu_shadow_fac;
172         short menu_shadow_width;
173
174         char editor_outline[4];
175         char _pad0[2];
176
177         float icon_alpha;
178         float icon_saturation;
179         char _pad[4];
180
181         /* Axis Colors */
182         char xaxis[4], yaxis[4], zaxis[4];
183
184         /* Gizmo Colors. */
185         char gizmo_hi[4];
186         char gizmo_primary[4];
187         char gizmo_secondary[4];
188         char gizmo_a[4];
189         char gizmo_b[4];
190
191         /* Icon Colors. */
192         /** Collection items. */
193         char icon_collection[4];
194         /** Object items. */
195         char icon_object[4];
196         /** Object data items. */
197         char icon_object_data[4];
198         /** Modifier and constraint items. */
199         char icon_modifier[4];
200         /** Shading related items. */
201         char icon_shading[4];
202 } ThemeUI;
203
204 /* try to put them all in one, if needed a special struct can be created as well
205  * for example later on, when we introduce wire colors for ob types or so...
206  */
207 typedef struct ThemeSpace {
208         /* main window colors */
209         char back[4];
210         char back_grad[4];
211
212         char show_back_grad;
213         char _pad0[3];
214
215         /** Panel title. */
216         char title[4];
217         char text[4];
218         char text_hi[4];
219
220         /* header colors */
221         /** Region background. */
222         char header[4];
223         /** Unused. */
224         char header_title[4];
225         char header_text[4];
226         char header_text_hi[4];
227
228         /* region tabs */
229         char tab_active[4];
230         char tab_inactive[4];
231         char tab_back[4];
232         char tab_outline[4];
233
234         /* button/tool regions */
235         /** Region background. */
236         char button[4];
237         /** Panel title. */
238         char button_title[4];
239         char button_text[4];
240         char button_text_hi[4];
241
242         /* listview regions */
243         /** Region background. */
244         char list[4];
245         /** Panel title. */
246         char list_title[4];
247         char list_text[4];
248         char list_text_hi[4];
249
250         /* navigation bar regions */
251         /** Region background. */
252         char navigation_bar[4];
253         /** Region background. */
254         char execution_buts[4];
255
256         /* note, cannot use name 'panel' because of DNA mapping old files */
257         uiPanelColors panelcolors;
258
259         char shade1[4];
260         char shade2[4];
261
262         char hilite[4];
263         char grid[4];
264
265         char view_overlay[4];
266
267         char wire[4], wire_edit[4], select[4];
268         char lamp[4], speaker[4], empty[4], camera[4];
269         char active[4], group[4], group_active[4], transform[4];
270         char vertex[4], vertex_select[4], vertex_bevel[4], vertex_unreferenced[4];
271         char edge[4], edge_select[4];
272         char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4], edge_bevel[4];
273         /** Solid faces. */
274         char face[4], face_select[4];
275         /**  selected color. */
276         char face_dot[4];
277         char extra_edge_len[4], extra_edge_angle[4], extra_face_angle[4], extra_face_area[4];
278         char normal[4];
279         char vertex_normal[4];
280         char loop_normal[4];
281         char bone_solid[4], bone_pose[4], bone_pose_active[4];
282         char strip[4], strip_select[4];
283         char cframe[4];
284         char time_keyframe[4], time_gp_keyframe[4];
285         char freestyle_edge_mark[4], freestyle_face_mark[4];
286
287         char nurb_uline[4], nurb_vline[4];
288         char act_spline[4], nurb_sel_uline[4], nurb_sel_vline[4], lastsel_point[4];
289
290         char handle_free[4], handle_auto[4], handle_vect[4], handle_align[4], handle_auto_clamped[4];
291         char handle_sel_free[4], handle_sel_auto[4], handle_sel_vect[4], handle_sel_align[4], handle_sel_auto_clamped[4];
292
293         /** Dopesheet. */
294         char ds_channel[4], ds_subchannel[4], ds_ipoline[4];
295         /** Keytypes. */
296         char keytype_keyframe[4], keytype_extreme[4], keytype_breakdown[4], keytype_jitter[4], keytype_movehold[4];
297         /** Keytypes. */
298         char keytype_keyframe_select[4], keytype_extreme_select[4], keytype_breakdown_select[4], keytype_jitter_select[4], keytype_movehold_select[4];
299         char keyborder[4], keyborder_select[4];
300         char _pad4[4];
301
302         char console_output[4], console_input[4], console_info[4], console_error[4];
303         char console_cursor[4], console_select[4];
304
305         char vertex_size, outline_width, facedot_size;
306         char noodle_curving;
307
308         /* syntax for textwindow and nodes */
309         char syntaxl[4], syntaxs[4]; // in nodespace used for backdrop matte
310         char syntaxb[4], syntaxn[4]; // in nodespace used for color input
311         char syntaxv[4], syntaxc[4]; // in nodespace used for converter group
312         char syntaxd[4], syntaxr[4]; // in nodespace used for distort
313
314         char nodeclass_output[4], nodeclass_filter[4];
315         char nodeclass_vector[4], nodeclass_texture[4];
316         char nodeclass_shader[4], nodeclass_script[4];
317         char nodeclass_pattern[4], nodeclass_layout[4];
318
319         /** For sequence editor. */
320         char movie[4], movieclip[4], mask[4], image[4], scene[4], audio[4];
321         char effect[4], transition[4], meta[4], text_strip[4];
322
323         /** For dopesheet - scale factor for size of keyframes (i.e. height of channels). */
324         float keyframe_scale_fac;
325
326         char editmesh_active[4];
327
328         char handle_vertex[4];
329         char handle_vertex_select[4];
330
331         char handle_vertex_size;
332
333         char clipping_border_3d[4];
334
335         char marker_outline[4], marker[4], act_marker[4], sel_marker[4], dis_marker[4], lock_marker[4];
336         char bundle_solid[4];
337         char path_before[4], path_after[4];
338         char camera_path[4];
339         char _pad1[2];
340
341         char gp_vertex_size;
342         char gp_vertex[4], gp_vertex_select[4];
343
344         char preview_back[4];
345         char preview_stitch_face[4];
346         char preview_stitch_edge[4];
347         char preview_stitch_vert[4];
348         char preview_stitch_stitchable[4];
349         char preview_stitch_unstitchable[4];
350         char preview_stitch_active[4];
351
352         /** Two uses, for uvs with modifier applied on mesh and uvs during painting. */
353         char uv_shadow[4];
354         /** Uvs of other objects. */
355         char uv_others[4];
356
357         /** Outliner - filter match. */
358         char match[4];
359         /** Outliner - selected item. */
360         char selected_highlight[4];
361
362         /** Skin modifier root color. */
363         char skin_root[4];
364
365         /* NLA */
366         /** Active Action + Summary Channel. */
367         char anim_active[4];
368         /** Active Action = NULL. */
369         char anim_non_active[4];
370         /** Preview range overlay. */
371         char anim_preview_range[4];
372         char _pad2[4];
373
374         /** NLA 'Tweaking' action/strip. */
375         char nla_tweaking[4];
376         /** NLA - warning color for duplicate instances of tweaking strip. */
377         char nla_tweakdupli[4];
378
379         /** NLA "Transition" strips. */
380         char nla_transition[4], nla_transition_sel[4];
381         /** NLA "Meta" strips. */
382         char nla_meta[4], nla_meta_sel[4];
383         /** NLA "Sound" strips. */
384         char nla_sound[4], nla_sound_sel[4];
385
386         /* info */
387         char info_selected[4], info_selected_text[4];
388         char info_error[4], info_error_text[4];
389         char info_warning[4], info_warning_text[4];
390         char info_info[4], info_info_text[4];
391         char info_debug[4], info_debug_text[4];
392
393         char paint_curve_pivot[4];
394         char paint_curve_handle[4];
395
396         char metadatabg[4];
397         char metadatatext[4];
398 } ThemeSpace;
399
400
401 /* set of colors for use as a custom color set for Objects/Bones wire drawing */
402 typedef struct ThemeWireColor {
403         char    solid[4];
404         char    select[4];
405         char    active[4];
406
407         /** #eWireColor_Flags. */
408         short   flag;
409         char _pad0[2];
410 } ThemeWireColor;
411
412 /** #ThemeWireColor.flag */
413 typedef enum eWireColor_Flags {
414         TH_WIRECOLOR_CONSTCOLS  = (1 << 0),
415         TH_WIRECOLOR_TEXTCOLS   = (1 << 1),
416 } eWireColor_Flags;
417
418 /* A theme */
419 typedef struct bTheme {
420         struct bTheme *next, *prev;
421         char name[32];
422
423         ThemeUI tui;
424
425         /* Individual Spacetypes */
426         /* note: ensure UI_THEMESPACE_END is updated when adding */
427         ThemeSpace space_properties;
428         ThemeSpace space_view3d;
429         ThemeSpace space_file;
430         ThemeSpace space_graph;
431         ThemeSpace space_info;
432         ThemeSpace space_action;
433         ThemeSpace space_nla;
434         ThemeSpace space_sequencer;
435         ThemeSpace space_image;
436         ThemeSpace space_text;
437         ThemeSpace space_outliner;
438         ThemeSpace space_node;
439         ThemeSpace space_preferences;
440         ThemeSpace space_console;
441         ThemeSpace space_clip;
442         ThemeSpace space_topbar;
443         ThemeSpace space_statusbar;
444
445         /* 20 sets of bone colors for this theme */
446         ThemeWireColor tarm[20];
447         /*ThemeWireColor tobj[20];*/
448
449         int active_theme_area;
450         char _pad0[4];
451 } bTheme;
452
453 #define UI_THEMESPACE_START(btheme)  (CHECK_TYPE_INLINE(btheme, bTheme *),  &((btheme)->tbuts))
454 #define UI_THEMESPACE_END(btheme)    (CHECK_TYPE_INLINE(btheme, bTheme *), (&((btheme)->tclip) + 1))
455
456 typedef struct bAddon {
457         struct bAddon *next, *prev;
458         char module[64];
459         /** User-Defined Properties on this  Addon (for storing preferences). */
460         IDProperty *prop;
461 } bAddon;
462
463 typedef struct bPathCompare {
464         struct bPathCompare *next, *prev;
465         /** FILE_MAXDIR. */
466         char path[768];
467         char flag;
468         char _pad0[7];
469 } bPathCompare;
470
471 typedef struct bUserMenu {
472         struct bUserMenu *next, *prev;
473         char space_type;
474         char _pad0[7];
475         char context[64];
476         /* bUserMenuItem */
477         ListBase items;
478 } bUserMenu;
479
480 /* May be part of bUserMenu or other list. */
481 typedef struct bUserMenuItem {
482         struct bUserMenuItem *next, *prev;
483         char ui_name[64];
484         char type;
485         char _pad0[7];
486 } bUserMenuItem;
487
488 typedef struct bUserMenuItem_Op {
489         bUserMenuItem item;
490         char op_idname[64];
491         struct IDProperty *prop;
492         char opcontext;
493         char _pad0[7];
494 } bUserMenuItem_Op;
495
496 typedef struct bUserMenuItem_Menu {
497         bUserMenuItem item;
498         char mt_idname[64];
499 } bUserMenuItem_Menu;
500
501 typedef struct bUserMenuItem_Prop {
502         bUserMenuItem item;
503         char context_data_path[256];
504         char prop_id[64];
505         int  prop_index;
506         char _pad0[4];
507 } bUserMenuItem_Prop;
508
509 enum {
510         USER_MENU_TYPE_SEP = 1,
511         USER_MENU_TYPE_OPERATOR = 2,
512         USER_MENU_TYPE_MENU = 3,
513         USER_MENU_TYPE_PROP = 4,
514 };
515
516 typedef struct SolidLight {
517         int flag;
518         float smooth;
519         char _pad0[8];
520         float col[4], spec[4], vec[4];
521 } SolidLight;
522
523 typedef struct WalkNavigation {
524         /** Speed factor for look around. */
525         float mouse_speed;
526         float walk_speed;
527         float walk_speed_factor;
528         float view_height;
529         float jump_height;
530         /** Duration to use for teleporting. */
531         float teleport_time;
532         short flag;
533         char _pad0[6];
534 } WalkNavigation;
535
536 typedef struct UserDef {
537         /* UserDef has separate do-version handling, and can be read from other files */
538         int versionfile, subversionfile;
539
540         /** #eUserPref_Flag. */
541         int flag;
542         /** #eDupli_ID_Flags. */
543         int dupflag;
544         int savetime;
545         /** FILE_MAXDIR length. */
546         char tempdir[768];
547         char fontdir[768];
548         /** FILE_MAX length. */
549         char renderdir[1024];
550         /* EXR cache path */
551         /** 768 = FILE_MAXDIR. */
552         char render_cachedir[768];
553         char textudir[768];
554         char pythondir[768];
555         char sounddir[768];
556         char i18ndir[768];
557         /** 1024 = FILE_MAX. */
558         char image_editor[1024];
559         /** 1024 = FILE_MAX. */
560         char anim_player[1024];
561         int anim_player_preset;
562
563         /** Minimum spacing between gridlines in View2D grids. */
564         short v2d_min_gridsize;
565         /** #eTimecodeStyles, style of timecode display. */
566         short timecode_style;
567
568         short versions;
569         short dbl_click_time;
570
571         char _pad0[2];
572         short wheellinescroll;
573         /** #eUserpref_UI_Flag. */
574         int uiflag;
575         /** #eUserpref_UI_Flag2. */
576         char uiflag2;
577         char gpu_flag;
578         char _pad8[2];
579         /* Experimental flag for app-templates to make changes to behavior
580          * which are outside the scope of typical preferences. */
581         short app_flag;
582         short language;
583         short userpref;
584         char  userpref_flag;
585         char viewzoom;
586
587         int mixbufsize;
588         int audiodevice;
589         int audiorate;
590         int audioformat;
591         int audiochannels;
592
593         /** Setting for UI scale. */
594         float ui_scale;
595         /** Setting for UI line width. */
596         int ui_line_width;
597         /** Runtime, full DPI divided by pixelsize. */
598         int dpi;
599         /** Runtime, multiplier to scale UI elements based on DPI. */
600         float dpi_fac;
601         /** Runtime, line width and point size based on DPI. */
602         float pixelsize;
603         /** Deprecated, for forward compatibility. */
604         int virtual_pixel;
605
606         /** Console scrollback limit. */
607         int scrollback;
608         /** Node insert offset (aka auto-offset) margin, but might be useful for later stuff as well. */
609         char node_margin;
610         char _pad2[5];
611         /** #eUserpref_Translation_Flags. */
612         short transopts;
613         short menuthreshold1, menuthreshold2;
614
615         /* startup template */
616         char app_template[64];
617
618         struct ListBase themes;
619         struct ListBase uifonts;
620         struct ListBase uistyles;
621         struct ListBase user_keymaps;
622         /** #wmKeyConfigPref. */
623         struct ListBase user_keyconfig_prefs;
624         struct ListBase addons;
625         struct ListBase autoexec_paths;
626         /** #bUserMenu. */
627         struct ListBase user_menus;
628
629         char keyconfigstr[64];
630
631         short undosteps;
632         char _pad1[2];
633         int undomemory;
634         float gpu_viewport_quality;
635         short gp_manhattendist, gp_euclideandist, gp_eraser;
636         /** #eGP_UserdefSettings. */
637         short gp_settings;
638         char _pad13[4];
639         struct SolidLight light_param[4];
640         float light_ambient[3];
641         char _pad3[4];
642         short gizmo_flag, gizmo_size;
643         short edit_studio_light;
644         char _pad6[4];
645         short textimeout, texcollectrate;
646         char _pad14[2];
647         int memcachelimit;
648         int prefetchframes;
649         /** Control the rotation step of the view when PAD2, PAD4, PAD6&PAD8 is use. */
650         float pad_rot_angle;
651         char _pad12[2];
652         short obcenter_dia;
653         /** Rotating view icon size. */
654         short rvisize;
655         /** Rotating view icon brightness. */
656         short rvibright;
657         /** Maximum number of recently used files to remember . */
658         short recent_files;
659         /** Milliseconds to spend spinning the view. */
660         short smooth_viewtx;
661         short glreslimit;
662         short curssize;
663         /** #eColorPicker_Types. */
664         short color_picker_type;
665         /** Interpolation mode for newly added F-Curves. */
666         char  ipo_new;
667         /** Handle types for newly added keyframes. */
668         char  keyhandles_new;
669         char  _pad11[3];
670         /** #eZoomFrame_Mode. */
671         char  view_frame_type;
672
673         /** Number of keyframes to zoom around current frame. */
674         int view_frame_keyframes;
675         /** Seconds to zoom around current frame. */
676         float view_frame_seconds;
677
678         char _pad7[6];
679
680         /** Private, defaults to 20 for 72 DPI setting. */
681         short widget_unit;
682         short anisotropic_filter;
683
684         /** Tablet API to use (Windows only). */
685         short tablet_api;
686
687         /** Raw tablet pressure that maps to 100%. */
688         float pressure_threshold_max;
689         /** Curve non-linearity parameter. */
690         float pressure_softness;
691
692         /** Overall sensitivity of 3D mouse. */
693         float ndof_sensitivity;
694         float ndof_orbit_sensitivity;
695         /** Deadzone of 3D mouse. */
696         float ndof_deadzone;
697         /** #eNdof_Flag, flags for 3D mouse. */
698         int ndof_flag;
699
700         /** #eMultiSample_Type, amount of samples for OpenGL FSA, if zero no FSA. */
701         short ogl_multisamples;
702
703         /** eImageDrawMethod, Method to be used to draw the images
704          * (AUTO, GLSL, Textures or DrawPixels) */
705         short image_draw_method;
706
707         float glalphaclip;
708
709         /** #eAutokey_Mode, autokeying mode. */
710         short autokey_mode;
711         /** Flags for autokeying. */
712         short autokey_flag;
713
714         /** Options for text rendering. */
715         short text_render;
716         char _pad9[2];
717
718         /** From texture.h. */
719         struct ColorBand coba_weight;
720
721         float sculpt_paint_overlay_col[3];
722         /** Default color for newly created Grease Pencil layers. */
723         float gpencil_new_layer_col[4];
724
725         short tweak_threshold;
726         char navigation_mode;
727         char _pad10;
728
729         char font_path_ui[1024];
730         char font_path_ui_mono[1024];
731
732         int compute_device_type;
733         int compute_device_id;
734
735         /** Opacity of inactive F-Curves in F-Curve Editor. */
736         float fcu_inactive_alpha;
737
738         /**
739          * If keeping a pie menu spawn button pressed after this time,
740          * it turns into a drag/release pie menu.
741          */
742         short pie_tap_timeout;
743         /**
744          * Direction in the pie menu will always be calculated from the
745          * initial position within this time limit.
746          */
747         short pie_initial_timeout;
748         short pie_animation_timeout;
749         short pie_menu_confirm;
750         /** Pie menu radius. */
751         short pie_menu_radius;
752         /** Pie menu distance from center before a direction is set. */
753         short pie_menu_threshold;
754
755         struct WalkNavigation walk_navigation;
756
757         short opensubdiv_compute_type;
758         /** #eMultiSample_Type, amount of samples for Grease Pencil. */
759         short gpencil_multisamples;
760
761         char factor_display_type;
762
763         char _pad5[3];
764 } UserDef;
765
766 /* from blenkernel blender.c */
767 extern UserDef U;
768
769 /* ***************** USERDEF ****************** */
770
771 /* Toggles for unfinished 2.8 UserPref design. */
772 //#define WITH_USERDEF_WORKSPACES
773
774 /** #UserDef.userpref (UI active_section) */
775 typedef enum eUserPref_Section {
776         USER_SECTION_INTERFACE         = 0,
777         USER_SECTION_EDITING           = 1,
778         USER_SECTION_SAVE_LOAD         = 2,
779         USER_SECTION_SYSTEM            = 3,
780         USER_SECTION_THEME             = 4,
781         USER_SECTION_INPUT             = 5,
782         USER_SECTION_ADDONS            = 6,
783         USER_SECTION_LIGHT             = 7,
784         USER_SECTION_KEYMAP            = 8,
785 #ifdef WITH_USERDEF_WORKSPACES
786         USER_SECTION_WORKSPACE_CONFIG  = 9,
787         USER_SECTION_WORKSPACE_ADDONS  = 10,
788         USER_SECTION_WORKSPACE_KEYMAPS = 11,
789 #endif
790         USER_SECTION_VIEWPORT          = 12,
791         USER_SECTION_ANIMATION         = 13,
792         USER_SECTION_NAVIGATION        = 14,
793         USER_SECTION_FILE_PATHS        = 15,
794 } eUserPref_Section;
795
796 /* UserDef.userpref_flag (State of the user preferences UI). */
797 typedef enum eUserPref_SectionFlag {
798         /* Hide/expand keymap preferences. */
799         USER_SECTION_INPUT_HIDE_UI_KEYCONFIG        = (1 << 0),
800 } eUserPref_SectionFlag;
801
802 /** #UserDef.flag */
803 typedef enum eUserPref_Flag {
804         USER_AUTOSAVE           = (1 << 0),
805         USER_FLAG_NUMINPUT_ADVANCED = (1 << 1),
806         USER_FLAG_UNUSED_2      = (1 << 2),  /* cleared */
807         USER_FLAG_UNUSED_3      = (1 << 3),  /* cleared */
808         USER_FLAG_UNUSED_4      = (1 << 4),  /* cleared */
809         USER_TRACKBALL          = (1 << 5),
810         USER_FLAG_UNUSED_6      = (1 << 6),  /* cleared */
811         USER_FLAG_UNUSED_7      = (1 << 7),  /* cleared */
812         USER_MAT_ON_OB          = (1 << 8),
813         USER_FLAG_UNUSED_9      = (1 << 9),  /* cleared */
814         USER_DEVELOPER_UI       = (1 << 10),
815         USER_TOOLTIPS           = (1 << 11),
816         USER_TWOBUTTONMOUSE     = (1 << 12),
817         USER_NONUMPAD           = (1 << 13),
818         USER_FLAG_UNUSED_14     = (1 << 14),  /* cleared */
819         USER_FILECOMPRESS       = (1 << 15),
820         USER_SAVE_PREVIEWS      = (1 << 16),
821         USER_CUSTOM_RANGE       = (1 << 17),
822         USER_ADD_EDITMODE       = (1 << 18),
823         USER_ADD_VIEWALIGNED    = (1 << 19),
824         USER_RELPATHS           = (1 << 20),
825         USER_RELEASECONFIRM     = (1 << 21),
826         USER_SCRIPT_AUTOEXEC_DISABLE = (1 << 22),
827         USER_FILENOUI           = (1 << 23),
828         USER_NONEGFRAMES        = (1 << 24),
829         USER_TXT_TABSTOSPACES_DISABLE = (1 << 25),
830         USER_TOOLTIPS_PYTHON    = (1 << 26),
831 } eUserPref_Flag;
832
833 /** #bPathCompare.flag */
834 typedef enum ePathCompare_Flag {
835         USER_PATHCMP_GLOB               = (1 << 0),
836 } ePathCompare_Flag;
837
838 /* Helper macro for checking frame clamping */
839 #define FRAMENUMBER_MIN_CLAMP(cfra)  {                                        \
840         if ((U.flag & USER_NONEGFRAMES) && (cfra < 0))                            \
841                 cfra = 0;                                                             \
842         } (void)0
843
844 /** #UserDef.viewzoom */
845 typedef enum eViewZoom_Style {
846         USER_ZOOM_CONT                  = 0,
847         USER_ZOOM_SCALE                 = 1,
848         USER_ZOOM_DOLLY                 = 2,
849 } eViewZoom_Style;
850
851 /** #UserDef.navigation_mode */
852 typedef enum eViewNavigation_Method {
853         VIEW_NAVIGATION_WALK = 0,
854         VIEW_NAVIGATION_FLY  = 1,
855 } eViewNavigation_Method;
856
857 /** #UserDef.flag */
858 typedef enum eWalkNavigation_Flag {
859         USER_WALK_GRAVITY                       = (1 << 0),
860         USER_WALK_MOUSE_REVERSE         = (1 << 1),
861 } eWalkNavigation_Flag;
862
863 /** #UserDef.uiflag */
864 typedef enum eUserpref_UI_Flag {
865         USER_UIFLAG_UNUSED_0        = (1 << 0),  /* cleared */
866         USER_UIFLAG_UNUSED_1        = (1 << 1),  /* cleared */
867         USER_WHEELZOOMDIR           = (1 << 2),
868         USER_FILTERFILEEXTS         = (1 << 3),
869         USER_DRAWVIEWINFO           = (1 << 4),
870         USER_PLAINMENUS             = (1 << 5),
871         USER_LOCK_CURSOR_ADJUST     = (1 << 6),
872         USER_HEADER_BOTTOM          = (1 << 7),
873         /** Otherwise use header alignment from the file. */
874         USER_HEADER_FROM_PREF       = (1 << 8),
875         USER_MENUOPENAUTO           = (1 << 9),
876         USER_DEPTH_CURSOR           = (1 << 10),
877         USER_AUTOPERSP              = (1 << 11),
878         USER_UIFLAG_UNUSED_12       = (1 << 12),  /* cleared */
879         USER_GLOBALUNDO             = (1 << 13),
880         USER_ORBIT_SELECTION        = (1 << 14),
881         USER_DEPTH_NAVIGATE         = (1 << 15),
882         USER_HIDE_DOT               = (1 << 16),
883         USER_SHOW_GIZMO_AXIS        = (1 << 17),
884         USER_SHOW_VIEWPORTNAME      = (1 << 18),
885         USER_CAM_LOCK_NO_PARENT     = (1 << 19),
886         USER_ZOOM_TO_MOUSEPOS       = (1 << 20),
887         USER_SHOW_FPS               = (1 << 21),
888         USER_UIFLAG_UNUSED_22       = (1 << 22),  /* cleared */
889         USER_MENUFIXEDORDER         = (1 << 23),
890         USER_CONTINUOUS_MOUSE       = (1 << 24),
891         USER_ZOOM_INVERT            = (1 << 25),
892         USER_ZOOM_HORIZ             = (1 << 26), /* for CONTINUE and DOLLY zoom */
893         USER_SPLASH_DISABLE         = (1 << 27),
894         USER_HIDE_RECENT            = (1 << 28),
895         USER_SHOW_THUMBNAILS        = (1 << 29),
896         USER_SAVE_PROMPT            = (1 << 30),
897         USER_HIDE_SYSTEM_BOOKMARKS  = (1u << 31),
898 } eUserpref_UI_Flag;
899
900 /** #UserDef.uiflag2
901  *
902  * \note don't add new flags here, use 'uiflag' which has flags free. */
903 typedef enum eUserpref_UI_Flag2 {
904         USER_UIFLAG2_UNUSED_0       = (1 << 0),  /* cleared */
905         USER_REGION_OVERLAP         = (1 << 1),
906         USER_TRACKPAD_NATURAL       = (1 << 2),
907         USER_UIFLAG2_UNUSED_3       = (1 << 3),  /* dirty */
908 } eUserpref_UI_Flag2;
909
910 typedef enum eUserpref_GPU_Flag {
911         USER_GPU_FLAG_NO_DEPT_PICK              = (1 << 0),
912         USER_GPU_FLAG_NO_EDIT_MODE_SMOOTH_WIRE  = (1 << 1),
913 } eUserpref_GPU_Flag;
914
915 /** #UserDef.tablet_api */
916 typedef enum eUserpref_TableAPI {
917         USER_TABLET_AUTOMATIC = 0,
918         USER_TABLET_NATIVE = 1,
919         USER_TABLET_WINTAB = 2,
920 } eUserpref_TabletAPI;
921
922 /** #UserDef.app_flag */
923 typedef enum eUserpref_APP_Flag {
924         USER_APP_LOCK_UI_LAYOUT = (1 << 0),
925 } eUserpref_APP_Flag;
926
927 /** Auto-Keying mode.
928  * #UserDef.autokey_mode */
929 typedef enum eAutokey_Mode {
930         /* AUTOKEY_ON is a bitflag */
931         AUTOKEY_ON             = 1,
932
933         /** AUTOKEY_ON + 2**n...  (i.e. AUTOKEY_MODE_NORMAL = AUTOKEY_ON + 2)
934          * to preserve setting, even when autokey turned off  */
935         AUTOKEY_MODE_NORMAL    = 3,
936         AUTOKEY_MODE_EDITKEYS  = 5,
937 } eAutokey_Mode;
938
939 /** Zoom to frame mode.
940  * #UserDef.view_frame_type */
941 typedef enum eZoomFrame_Mode {
942         ZOOM_FRAME_MODE_KEEP_RANGE = 0,
943         ZOOM_FRAME_MODE_SECONDS = 1,
944         ZOOM_FRAME_MODE_KEYFRAMES = 2,
945 } eZoomFrame_Mode;
946
947 /** Auto-Keying flag
948  * #UserDef.autokey_flag (not strictly used when autokeying only - is also used when keyframing these days)
949  * \note #eAutokey_Flag is used with a macro, search for lines like IS_AUTOKEY_FLAG(INSERTAVAIL).
950  */
951 typedef enum eAutokey_Flag {
952         AUTOKEY_FLAG_INSERTAVAIL        = (1 << 0),
953         AUTOKEY_FLAG_INSERTNEEDED       = (1 << 1),
954         AUTOKEY_FLAG_AUTOMATKEY         = (1 << 2),
955         AUTOKEY_FLAG_XYZ2RGB            = (1 << 3),
956
957         /* toolsettings->autokey_flag */
958         AUTOKEY_FLAG_ONLYKEYINGSET      = (1 << 6),
959         AUTOKEY_FLAG_NOWARNING          = (1 << 7),
960         AUTOKEY_FLAG_CYCLEAWARE         = (1 << 8),
961         ANIMRECORD_FLAG_WITHNLA         = (1 << 10),
962 } eAutokey_Flag;
963
964 /** #UserDef.transopts */
965 typedef enum eUserpref_Translation_Flags {
966         USER_TR_TOOLTIPS        = (1 << 0),
967         USER_TR_IFACE           = (1 << 1),
968         USER_TR_UNUSED_2        = (1 << 2),  /* cleared */
969         USER_TR_UNUSED_3        = (1 << 3),  /* cleared */
970         USER_TR_UNUSED_4        = (1 << 4),  /* cleared */
971         USER_DOTRANSLATE        = (1 << 5),
972         USER_TR_UNUSED_6        = (1 << 6),  /* cleared */
973         USER_TR_UNUSED_7        = (1 << 7),  /* cleared */
974         USER_TR_NEWDATANAME     = (1 << 8),
975 } eUserpref_Translation_Flags;
976
977 /** #UserDef.dupflag */
978 typedef enum eDupli_ID_Flags {
979         USER_DUP_MESH                   = (1 << 0),
980         USER_DUP_CURVE                  = (1 << 1),
981         USER_DUP_SURF                   = (1 << 2),
982         USER_DUP_FONT                   = (1 << 3),
983         USER_DUP_MBALL                  = (1 << 4),
984         USER_DUP_LAMP                   = (1 << 5),
985         USER_DUP_IPO                    = (1 << 6),
986         USER_DUP_MAT                    = (1 << 7),
987         USER_DUP_TEX                    = (1 << 8),
988         USER_DUP_ARM                    = (1 << 9),
989         USER_DUP_ACT                    = (1 << 10),
990         USER_DUP_PSYS                   = (1 << 11),
991 } eDupli_ID_Flags;
992
993 /** Max anti alias draw method
994  * #UserDef.gpu_viewport_antialias */
995 typedef enum eOpenGL_AntiAliasMethod {
996         USER_AA_NONE  = 0,
997         USER_AA_FXAA  = 1,
998         USER_AA_TAA8  = 2,
999 } eOpenGL_AntiAliasMethod;
1000
1001 /** Text draw options
1002  * #UserDef.text_render */
1003 typedef enum eText_Draw_Options {
1004         USER_TEXT_DISABLE_AA      = (1 << 0),
1005
1006         USER_TEXT_HINTING_NONE    = (1 << 1),
1007         USER_TEXT_HINTING_SLIGHT  = (1 << 2),
1008         USER_TEXT_HINTING_FULL    = (1 << 3),
1009 } eText_Draw_Options;
1010
1011 /** Grease Pencil Settings.
1012  * #UserDef.gp_settings */
1013 typedef enum eGP_UserdefSettings {
1014         GP_PAINT_UNUSED_0           = (1 << 0),
1015         GP_PAINT_DOSIMPLIFY         = (1 << 1),
1016 } eGP_UserdefSettings;
1017
1018 enum {
1019         USER_GIZMO_DRAW            = (1 << 0),
1020 };
1021
1022 /** Color Picker Types.
1023  * #UserDef.color_picker_type */
1024 typedef enum eColorPicker_Types {
1025         USER_CP_CIRCLE_HSV      = 0,
1026         USER_CP_SQUARE_SV       = 1,
1027         USER_CP_SQUARE_HS       = 2,
1028         USER_CP_SQUARE_HV       = 3,
1029         USER_CP_CIRCLE_HSL      = 4,
1030 } eColorPicker_Types;
1031
1032 /** Timecode display styles
1033  * #UserDef.timecode_style */
1034 typedef enum eTimecodeStyles {
1035         /* as little info as is necessary to show relevant info
1036          * with '+' to denote the frames
1037          * i.e. HH:MM:SS+FF, MM:SS+FF, SS+FF, or MM:SS
1038          */
1039         USER_TIMECODE_MINIMAL       = 0,
1040
1041         /* reduced SMPTE - (HH:)MM:SS:FF */
1042         USER_TIMECODE_SMPTE_MSF     = 1,
1043
1044         /* full SMPTE - HH:MM:SS:FF */
1045         USER_TIMECODE_SMPTE_FULL    = 2,
1046
1047         /* milliseconds for sub-frames - HH:MM:SS.sss */
1048         USER_TIMECODE_MILLISECONDS  = 3,
1049
1050         /* seconds only */
1051         USER_TIMECODE_SECONDS_ONLY  = 4,
1052
1053         /* Private (not exposed as generic choices) options. */
1054         /* milliseconds for sub-frames , SubRip format- HH:MM:SS,sss */
1055         USER_TIMECODE_SUBRIP        = 100,
1056 } eTimecodeStyles;
1057
1058 /** #UserDef.ndof_flag (3D mouse options) */
1059 typedef enum eNdof_Flag {
1060         NDOF_SHOW_GUIDE     = (1 << 0),
1061         NDOF_FLY_HELICOPTER = (1 << 1),
1062         NDOF_LOCK_HORIZON   = (1 << 2),
1063
1064         /* the following might not need to be saved between sessions,
1065          * but they do need to live somewhere accessible... */
1066         NDOF_SHOULD_PAN     = (1 << 3),
1067         NDOF_SHOULD_ZOOM    = (1 << 4),
1068         NDOF_SHOULD_ROTATE  = (1 << 5),
1069
1070         /* orbit navigation modes */
1071
1072         /* exposed as Orbit|Explore in the UI */
1073         NDOF_MODE_ORBIT      = (1 << 6),
1074
1075         /* actually... users probably don't care about what the mode
1076          * is called, just that it feels right */
1077         /* zoom is up/down if this flag is set (otherwise forward/backward) */
1078         NDOF_PAN_YZ_SWAP_AXIS   = (1 << 7),
1079         NDOF_ZOOM_INVERT        = (1 << 8),
1080         NDOF_ROTX_INVERT_AXIS   = (1 << 9),
1081         NDOF_ROTY_INVERT_AXIS   = (1 << 10),
1082         NDOF_ROTZ_INVERT_AXIS   = (1 << 11),
1083         NDOF_PANX_INVERT_AXIS   = (1 << 12),
1084         NDOF_PANY_INVERT_AXIS   = (1 << 13),
1085         NDOF_PANZ_INVERT_AXIS   = (1 << 14),
1086         NDOF_TURNTABLE          = (1 << 15),
1087 } eNdof_Flag;
1088
1089 #define NDOF_PIXELS_PER_SECOND 600.0f
1090
1091 /** UserDef.ogl_multisamples and gpencil_multisamples */
1092 typedef enum eMultiSample_Type {
1093         USER_MULTISAMPLE_NONE   = 0,
1094         USER_MULTISAMPLE_2      = 2,
1095         USER_MULTISAMPLE_4      = 4,
1096         USER_MULTISAMPLE_8      = 8,
1097         USER_MULTISAMPLE_16     = 16,
1098 } eMultiSample_Type;
1099
1100 /** #UserDef.image_draw_method */
1101 typedef enum eImageDrawMethod {
1102         /* IMAGE_DRAW_METHOD_AUTO = 0, */ /* Currently unused */
1103         IMAGE_DRAW_METHOD_GLSL = 1,
1104         IMAGE_DRAW_METHOD_2DTEXTURE = 2,
1105         IMAGE_DRAW_METHOD_DRAWPIXELS = 3,
1106 } eImageDrawMethod;
1107
1108 /** #UserDef.virtual_pixel */
1109 typedef enum eUserpref_VirtualPixel {
1110         VIRTUAL_PIXEL_NATIVE = 0,
1111         VIRTUAL_PIXEL_DOUBLE = 1,
1112 } eUserpref_VirtualPixel;
1113
1114 typedef enum eOpensubdiv_Computee_Type {
1115         USER_OPENSUBDIV_COMPUTE_NONE = 0,
1116         USER_OPENSUBDIV_COMPUTE_CPU = 1,
1117         USER_OPENSUBDIV_COMPUTE_OPENMP = 2,
1118         USER_OPENSUBDIV_COMPUTE_OPENCL = 3,
1119         USER_OPENSUBDIV_COMPUTE_CUDA = 4,
1120         USER_OPENSUBDIV_COMPUTE_GLSL_TRANSFORM_FEEDBACK = 5,
1121         USER_OPENSUBDIV_COMPUTE_GLSL_COMPUTE = 6,
1122 } eOpensubdiv_Computee_Type;
1123
1124 /** #UserDef.factor_display_type */
1125 typedef enum eUserpref_FactorDisplay {
1126         USER_FACTOR_AS_FACTOR = 0,
1127         USER_FACTOR_AS_PERCENTAGE = 1,
1128 } eUserpref_FactorDisplay;
1129
1130 #ifdef __cplusplus
1131 }
1132 #endif
1133
1134 #endif