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