/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. * * The Original Code is: all of this file. * * Contributor(s): none yet. * * ***** END GPL LICENSE BLOCK ***** */ /** \file DNA_userdef_types.h * \ingroup DNA * \since mar-2001 * \author nzc */ #ifndef __DNA_USERDEF_TYPES_H__ #define __DNA_USERDEF_TYPES_H__ #include "DNA_listBase.h" #include "DNA_texture_types.h" /* ColorBand */ #ifdef __cplusplus extern "C" { #endif /* themes; defines in BIF_resource.h */ struct ColorBand; /* ************************ style definitions ******************** */ #define MAX_STYLE_NAME 64 #define MAX_FONT_NAME 256 /* default uifont_id offered by Blender */ #define UIFONT_DEFAULT 0 /*#define UIFONT_BITMAP 1*/ /*UNUSED*/ /* free slots */ #define UIFONT_CUSTOM1 2 #define UIFONT_CUSTOM2 3 /* default fonts to load/initalize */ /* first font is the default (index 0), others optional */ typedef struct uiFont { struct uiFont *next, *prev; char filename[1024];/* 1024 = FILE_MAX */ short blf_id; /* from blfont lib */ short uifont_id; /* own id */ short r_to_l; /* fonts that read from left to right */ short pad; } uiFont; /* this state defines appearance of text */ typedef struct uiFontStyle { short uifont_id; /* saved in file, 0 is default */ short points; /* actual size depends on 'global' dpi */ short kerning; /* unfitted or default kerning value. */ char pad[6]; short italic, bold; /* style hint */ short shadow; /* value is amount of pixels blur */ short shadx, shady; /* shadow offset in pixels */ short align; /* text align hint */ float shadowalpha; /* total alpha */ float shadowcolor; /* 1 value, typically white or black anyway */ } uiFontStyle; /* uiFontStyle->align */ #define UI_STYLE_TEXT_LEFT 0 #define UI_STYLE_TEXT_CENTER 1 #define UI_STYLE_TEXT_RIGHT 2 /* this is fed to the layout engine and widget code */ typedef struct uiStyle { struct uiStyle *next, *prev; char name[64]; /* MAX_STYLE_NAME */ uiFontStyle paneltitle; uiFontStyle grouplabel; uiFontStyle widgetlabel; uiFontStyle widget; float panelzoom; short minlabelchars; /* in characters */ short minwidgetchars; /* in characters */ short columnspace; short templatespace; short boxspace; short buttonspacex; short buttonspacey; short panelspace; short panelouter; short pad; } uiStyle; typedef struct uiWidgetColors { char outline[4]; char inner[4]; char inner_sel[4]; char item[4]; char text[4]; char text_sel[4]; short shaded; short shadetop, shadedown; short alpha_check; } uiWidgetColors; typedef struct uiWidgetStateColors { char inner_anim[4]; char inner_anim_sel[4]; char inner_key[4]; char inner_key_sel[4]; char inner_driven[4]; char inner_driven_sel[4]; float blend, pad; } uiWidgetStateColors; typedef struct uiPanelColors { char header[4]; short show_header; short pad; } uiPanelColors; typedef struct ThemeUI { /* Interface Elements (buttons, menus, icons) */ uiWidgetColors wcol_regular, wcol_tool, wcol_text; uiWidgetColors wcol_radio, wcol_option, wcol_toggle; uiWidgetColors wcol_num, wcol_numslider; uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item, wcol_tooltip; uiWidgetColors wcol_box, wcol_scroll, wcol_progress, wcol_list_item; uiWidgetStateColors wcol_state; uiPanelColors panel; char iconfile[256]; // FILE_MAXFILE length float icon_alpha; float pad; } ThemeUI; /* try to put them all in one, if needed a special struct can be created as well * for example later on, when we introduce wire colors for ob types or so... */ typedef struct ThemeSpace { /* main window colors */ char back[4]; char title[4]; char text[4]; char text_hi[4]; /* header colors */ char header[4]; char header_title[4]; char header_text[4]; char header_text_hi[4]; /* button/tool regions */ char button[4]; char button_title[4]; char button_text[4]; char button_text_hi[4]; /* listview regions */ char list[4]; char list_title[4]; char list_text[4]; char list_text_hi[4]; /* float panel */ char panel[4]; char panel_title[4]; char panel_text[4]; char panel_text_hi[4]; char shade1[4]; char shade2[4]; char hilite[4]; char grid[4]; char wire[4], select[4]; char lamp[4], speaker[4], empty[4], camera[4], pad[8]; char active[4], group[4], group_active[4], transform[4]; char vertex[4], vertex_select[4]; char edge[4], edge_select[4]; char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4]; char face[4], face_select[4]; // solid faces char face_dot[4]; // selected color char extra_edge_len[4], extra_face_angle[4], extra_face_area[4], pad3[4]; char normal[4]; char vertex_normal[4]; char bone_solid[4], bone_pose[4]; char strip[4], strip_select[4]; char cframe[4]; char nurb_uline[4], nurb_vline[4]; char act_spline[4], nurb_sel_uline[4], nurb_sel_vline[4], lastsel_point[4]; char handle_free[4], handle_auto[4], handle_vect[4], handle_align[4], handle_auto_clamped[4]; char handle_sel_free[4], handle_sel_auto[4], handle_sel_vect[4], handle_sel_align[4], handle_sel_auto_clamped[4]; char ds_channel[4], ds_subchannel[4]; // dopesheet char console_output[4], console_input[4], console_info[4], console_error[4]; char console_cursor[4]; char vertex_size, outline_width, facedot_size; char noodle_curving; char syntaxl[4], syntaxn[4], syntaxb[4]; // syntax for textwindow and nodes char syntaxv[4], syntaxc[4]; char movie[4], movieclip[4], mask[4], image[4], scene[4], audio[4]; // for sequence editor char effect[4], hpad0[4], transition[4], meta[4]; char editmesh_active[4]; char handle_vertex[4]; char handle_vertex_select[4]; char handle_vertex_size; char marker_outline[4], marker[4], act_marker[4], sel_marker[4], dis_marker[4], lock_marker[4]; char bundle_solid[4]; char path_before[4], path_after[4]; char camera_path[4]; char hpad[3]; char preview_back[4]; char preview_stitch_face[4]; char preview_stitch_edge[4]; char preview_stitch_vert[4]; char preview_stitch_stitchable[4]; char preview_stitch_unstitchable[4]; char preview_stitch_active[4]; char match[4]; /* outliner - filter match */ char selected_highlight[4]; /* outliner - selected item */ char skin_root[4]; /* Skin modifier root color */ int pad4; /* NLA */ char anim_active[4]; /* Active Action + Summary Channel */ char anim_non_active[4]; /* Active Action = NULL */ char nla_tweaking[4]; /* NLA 'Tweaking' action/strip */ char nla_tweakdupli[4]; /* NLA - warning color for duplicate instances of tweaking strip */ char nla_transition[4], nla_transition_sel[4]; /* NLA "Transition" strips */ char nla_meta[4], nla_meta_sel[4]; /* NLA "Meta" strips */ char nla_sound[4], nla_sound_sel[4]; /* NLA "Sound" strips */ } ThemeSpace; /* set of colors for use as a custom color set for Objects/Bones wire drawing */ typedef struct ThemeWireColor { char solid[4]; char select[4]; char active[4]; short flag; short pad; } ThemeWireColor; /* flags for ThemeWireColor */ #define TH_WIRECOLOR_CONSTCOLS (1<<0) #define TH_WIRECOLOR_TEXTCOLS (1<<1) /* A theme */ typedef struct bTheme { struct bTheme *next, *prev; char name[32]; ThemeUI tui; /* Individual Spacetypes */ ThemeSpace tbuts; ThemeSpace tv3d; ThemeSpace tfile; ThemeSpace tipo; ThemeSpace tinfo; ThemeSpace tact; ThemeSpace tnla; ThemeSpace tseq; ThemeSpace tima; ThemeSpace text; ThemeSpace toops; ThemeSpace ttime; ThemeSpace tnode; ThemeSpace tlogic; ThemeSpace tuserpref; ThemeSpace tconsole; ThemeSpace tclip; /* 20 sets of bone colors for this theme */ ThemeWireColor tarm[20]; /*ThemeWireColor tobj[20];*/ int active_theme_area, pad; } bTheme; /* for the moment only the name. may want to store options with this later */ typedef struct bAddon { struct bAddon *next, *prev; char module[64]; } bAddon; typedef struct SolidLight { int flag, pad; float col[4], spec[4], vec[4]; } SolidLight; typedef struct UserDef { int flag, dupflag; int savetime; char tempdir[768]; /* FILE_MAXDIR length */ char fontdir[768]; char renderdir[1024]; /* FILE_MAX length */ char textudir[768]; char pythondir[768]; char sounddir[768]; char image_editor[1024]; /* 1024 = FILE_MAX */ char anim_player[1024]; /* 1024 = FILE_MAX */ int anim_player_preset; short v2d_min_gridsize; /* minimum spacing between gridlines in View2D grids */ short timecode_style; /* style of timecode display */ short versions; short dbl_click_time; int gameflags; int wheellinescroll; int uiflag, language; short userpref, viewzoom; int mixbufsize; int audiodevice; int audiorate; int audioformat; int audiochannels; int scrollback; /* console scrollback limit */ int dpi; /* range 48-128? */ short encoding; short transopts; short menuthreshold1, menuthreshold2; struct ListBase themes; struct ListBase uifonts; struct ListBase uistyles; struct ListBase keymaps DNA_DEPRECATED; /* deprecated in favor of user_keymaps */ struct ListBase user_keymaps; struct ListBase addons; char keyconfigstr[64]; short undosteps; short undomemory; short gp_manhattendist, gp_euclideandist, gp_eraser; short gp_settings; short tb_leftmouse, tb_rightmouse; struct SolidLight light[3]; short tw_hotspot, tw_flag, tw_handlesize, tw_size; short textimeout, texcollectrate; short wmdrawmethod; /* removed wmpad */ short dragthreshold; int memcachelimit; int prefetchframes; short frameserverport; short pad_rot_angle; /*control the rotation step of the view when PAD2, PAD4, PAD6&PAD8 is use*/ short obcenter_dia; short rvisize; /* rotating view icon size */ short rvibright; /* rotating view icon brightness */ short recent_files; /* maximum number of recently used files to remember */ short smooth_viewtx; /* miliseconds to spend spinning the view */ short glreslimit; short curssize; short color_picker_type; short ipo_new; /* interpolation mode for newly added F-Curves */ short keyhandles_new; /* handle types for newly added keyframes */ short scrcastfps; /* frame rate for screencast to be played back */ short scrcastwait; /* milliseconds between screencast snapshots */ short widget_unit; /* defaults to 20 for 72 DPI setting */ short anisotropic_filter; short use_16bit_textures, use_gpu_mipmap; float ndof_sensitivity; /* overall sensitivity of 3D mouse */ int ndof_flag; /* flags for 3D mouse */ float glalphaclip; short autokey_mode; /* autokeying mode */ short autokey_flag; /* flags for autokeying */ short text_render, pad9; /*options for text rendering*/ struct ColorBand coba_weight; /* from texture.h */ float sculpt_paint_overlay_col[3]; short tweak_threshold; short pad3; char author[80]; /* author name for file formats supporting it */ int compute_device_type; int compute_device_id; float fcu_inactive_alpha; /* opacity of inactive F-Curves in F-Curve Editor */ float pad; } UserDef; extern UserDef U; /* from blenkernel blender.c */ /* ***************** USERDEF ****************** */ /* userpref/section */ #define USER_SECTION_INTERFACE 0 #define USER_SECTION_EDIT 1 #define USER_SECTION_FILE 2 #define USER_SECTION_SYSTEM 3 #define USER_SECTION_THEME 4 #define USER_SECTION_INPUT 5 #define USER_SECTION_ADDONS 6 /* flag */ #define USER_AUTOSAVE (1 << 0) /*#define USER_AUTOGRABGRID (1 << 1) deprecated */ /*#define USER_AUTOROTGRID (1 << 2) deprecated */ /*#define USER_AUTOSIZEGRID (1 << 3) deprecated */ #define USER_SCENEGLOBAL (1 << 4) #define USER_TRACKBALL (1 << 5) /*#define USER_DUPLILINK (1 << 6) deprecated */ /*#define USER_FSCOLLUM (1 << 7) deprecated */ #define USER_MAT_ON_OB (1 << 8) /*#define USER_NO_CAPSLOCK (1 << 9)*/ /* not used anywhere */ /*#define USER_VIEWMOVE (1 << 10)*/ /* not used anywhere */ #define USER_TOOLTIPS (1 << 11) #define USER_TWOBUTTONMOUSE (1 << 12) #define USER_NONUMPAD (1 << 13) #define USER_LMOUSESELECT (1 << 14) #define USER_FILECOMPRESS (1 << 15) #define USER_SAVE_PREVIEWS (1 << 16) #define USER_CUSTOM_RANGE (1 << 17) #define USER_ADD_EDITMODE (1 << 18) #define USER_ADD_VIEWALIGNED (1 << 19) #define USER_RELPATHS (1 << 20) #define USER_RELEASECONFIRM (1 << 21) #define USER_SCRIPT_AUTOEXEC_DISABLE (1 << 22) #define USER_FILENOUI (1 << 23) #define USER_NONEGFRAMES (1 << 24) #define USER_TXT_TABSTOSPACES_DISABLE (1 << 25) #define USER_TOOLTIPS_PYTHON (1 << 26) /* helper macro for checking frame clamping */ #define FRAMENUMBER_MIN_CLAMP(cfra) \ { \ if ((U.flag & USER_NONEGFRAMES) && (cfra < 0)) \ cfra = 0; \ } /* viewzom */ #define USER_ZOOM_CONT 0 #define USER_ZOOM_SCALE 1 #define USER_ZOOM_DOLLY 2 /* uiflag */ // old flag for #define USER_KEYINSERTACT (1 << 0) // old flag for #define USER_KEYINSERTOBJ (1 << 1) #define USER_WHEELZOOMDIR (1 << 2) #define USER_FILTERFILEEXTS (1 << 3) #define USER_DRAWVIEWINFO (1 << 4) #define USER_PLAINMENUS (1 << 5) // old EVTTOCONSOLE print ghost events, here for tuhopuu compat. --phase // old flag for hide pulldown was here /*#define USER_FLIPFULLSCREEN (1 << 7)*/ /* deprecated */ #define USER_ALLWINCODECS (1 << 8) #define USER_MENUOPENAUTO (1 << 9) /*#define USER_PANELPINNED (1 << 10) deprecated */ #define USER_AUTOPERSP (1 << 11) #define USER_LOCKAROUND (1 << 12) #define USER_GLOBALUNDO (1 << 13) #define USER_ORBIT_SELECTION (1 << 14) // old flag for #define USER_KEYINSERTAVAI (1 << 15) #define USER_ORBIT_ZBUF (1 << 15) #define USER_HIDE_DOT (1 << 16) #define USER_SHOW_ROTVIEWICON (1 << 17) #define USER_SHOW_VIEWPORTNAME (1 << 18) #define USER_CAM_LOCK_NO_PARENT (1 << 19) #define USER_ZOOM_TO_MOUSEPOS (1 << 20) #define USER_SHOW_FPS (1 << 21) #define USER_MMB_PASTE (1 << 22) #define USER_MENUFIXEDORDER (1 << 23) #define USER_CONTINUOUS_MOUSE (1 << 24) #define USER_ZOOM_INVERT (1 << 25) #define USER_ZOOM_HORIZ (1 << 26) /* for CONTINUE and DOLLY zoom */ #define USER_SPLASH_DISABLE (1 << 27) #define USER_HIDE_RECENT (1 << 28) #define USER_SHOW_THUMBNAILS (1 << 29) #define USER_QUIT_PROMPT (1 << 30) /* Auto-Keying mode */ /* AUTOKEY_ON is a bitflag */ #define AUTOKEY_ON 1 /* AUTOKEY_ON + 2**n... (i.e. AUTOKEY_MODE_NORMAL = AUTOKEY_ON + 2) to preserve setting, even when autokey turned off */ #define AUTOKEY_MODE_NORMAL 3 #define AUTOKEY_MODE_EDITKEYS 5 /* Auto-Keying flag * U.autokey_flag (not strictly used when autokeying only - is also used when keyframing these days) * note: AUTOKEY_FLAG_* is used with a macro, search for lines like IS_AUTOKEY_FLAG(INSERTAVAIL) */ #define AUTOKEY_FLAG_INSERTAVAIL (1<<0) #define AUTOKEY_FLAG_INSERTNEEDED (1<<1) #define AUTOKEY_FLAG_AUTOMATKEY (1<<2) #define AUTOKEY_FLAG_XYZ2RGB (1<<3) /* toolsettings->autokey_flag */ #define AUTOKEY_FLAG_ONLYKEYINGSET (1<<6) #define ANIMRECORD_FLAG_WITHNLA (1<<10) /* transopts */ #define USER_TR_TOOLTIPS (1 << 0) #define USER_TR_IFACE (1 << 1) /*#define USER_TR_MENUS (1 << 2) deprecated*/ /*#define USER_TR_FILESELECT (1 << 3) deprecated*/ /*#define USER_TR_TEXTEDIT (1 << 4) deprecated*/ #define USER_DOTRANSLATE (1 << 5) #define USER_USETEXTUREFONT (1 << 6) /*#define CONVERT_TO_UTF8 (1 << 7) deprecated*/ /* dupflag */ #define USER_DUP_MESH (1 << 0) #define USER_DUP_CURVE (1 << 1) #define USER_DUP_SURF (1 << 2) #define USER_DUP_FONT (1 << 3) #define USER_DUP_MBALL (1 << 4) #define USER_DUP_LAMP (1 << 5) #define USER_DUP_IPO (1 << 6) #define USER_DUP_MAT (1 << 7) #define USER_DUP_TEX (1 << 8) #define USER_DUP_ARM (1 << 9) #define USER_DUP_ACT (1 << 10) #define USER_DUP_PSYS (1 << 11) /* gameflags */ // #define USER_DEPRECATED_FLAG 1 // #define USER_DISABLE_SOUND 2 deprecated, don't use without checking for // backwards compatibilty in do_versions! #define USER_DISABLE_MIPMAP 4 #define USER_DISABLE_VBO 8 #define USER_DISABLE_AA 16 /* wm draw method */ #define USER_DRAW_TRIPLE 0 #define USER_DRAW_OVERLAP 1 #define USER_DRAW_FULL 2 #define USER_DRAW_AUTOMATIC 3 #define USER_DRAW_OVERLAP_FLIP 4 /* text draw options*/ #define USER_TEXT_DISABLE_AA (1 << 0) /* tw_flag (transform widget) */ /* gp_settings (Grease Pencil Settings) */ #define GP_PAINT_DOSMOOTH (1<<0) #define GP_PAINT_DOSIMPLIFY (1<<1) /* color picker types */ #define USER_CP_CIRCLE 0 #define USER_CP_SQUARE_SV 1 #define USER_CP_SQUARE_HS 2 #define USER_CP_SQUARE_HV 3 /* timecode display styles */ /* as little info as is necessary to show relevant info * with '+' to denote the frames * i.e. HH:MM:SS+FF, MM:SS+FF, SS+FF, or MM:SS */ #define USER_TIMECODE_MINIMAL 0 /* reduced SMPTE - (HH:)MM:SS:FF */ #define USER_TIMECODE_SMPTE_MSF 1 /* full SMPTE - HH:MM:SS:FF */ #define USER_TIMECODE_SMPTE_FULL 2 /* milliseconds for sub-frames - HH:MM:SS.sss */ #define USER_TIMECODE_MILLISECONDS 3 /* seconds only */ #define USER_TIMECODE_SECONDS_ONLY 4 /* theme drawtypes */ #define TH_MINIMAL 0 #define TH_ROUNDSHADED 1 #define TH_ROUNDED 2 #define TH_OLDSKOOL 3 #define TH_SHADED 4 /* ndof_flag (3D mouse options) */ #define NDOF_SHOW_GUIDE (1 << 0) #define NDOF_FLY_HELICOPTER (1 << 1) #define NDOF_LOCK_HORIZON (1 << 2) /* the following might not need to be saved between sessions, * but they do need to live somewhere accessible... */ #define NDOF_SHOULD_PAN (1 << 3) #define NDOF_SHOULD_ZOOM (1 << 4) #define NDOF_SHOULD_ROTATE (1 << 5) /* orbit navigation modes * only two options, so it's sort of a hybrid bool/enum * if ((U.ndof_flag & NDOF_ORBIT_MODE) == NDOF_OM_OBJECT)... */ // #define NDOF_ORBIT_MODE (1 << 6) // #define NDOF_OM_TARGETCAMERA 0 // #define NDOF_OM_OBJECT NDOF_ORBIT_MODE /* actually... users probably don't care about what the mode * is called, just that it feels right */ /* zoom is up/down if this flag is set (otherwise forward/backward) */ #define NDOF_ZOOM_UPDOWN (1 << 7) #define NDOF_ZOOM_INVERT (1 << 8) #define NDOF_ROTATE_INVERT_AXIS (1 << 9) #define NDOF_TILT_INVERT_AXIS (1 << 10) #define NDOF_ROLL_INVERT_AXIS (1 << 11) #define NDOF_PANX_INVERT_AXIS (1 << 12) #define NDOF_PANY_INVERT_AXIS (1 << 13) #define NDOF_PANZ_INVERT_AXIS (1 << 14) /* compute_device_type */ #define USER_COMPUTE_DEVICE_NONE 0 #define USER_COMPUTE_DEVICE_OPENCL 1 #define USER_COMPUTE_DEVICE_CUDA 2 #ifdef __cplusplus } #endif #endif