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