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