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