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