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