tornavis/source/blender/windowmanager/WM_types.h

576 lines
17 KiB
C

/*
* ***** 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) 2007 Blender Foundation.
* All rights reserved.
*
*
* Contributor(s): Blender Foundation
*
* ***** END GPL LICENSE BLOCK *****
*/
/** \file blender/windowmanager/WM_types.h
* \ingroup wm
*/
#ifndef __WM_TYPES_H__
#define __WM_TYPES_H__
#ifdef __cplusplus
extern "C" {
#endif
struct bContext;
struct wmEvent;
struct wmWindowManager;
struct uiLayout;
struct wmOperator;
struct ImBuf;
#include "RNA_types.h"
#include "DNA_listBase.h"
#include "BKE_utildefines.h" /* FILE_MAX */
/* exported types for WM */
#include "wm_cursors.h"
#include "wm_event_types.h"
/* ************** wmOperatorType ************************ */
/* flag */
#define OPTYPE_REGISTER 1 /* register operators in stack after finishing */
#define OPTYPE_UNDO 2 /* do undo push after after */
#define OPTYPE_BLOCKING 4 /* let blender grab all input from the WM (X11) */
#define OPTYPE_MACRO 8
#define OPTYPE_GRAB_POINTER 16 /* */
#define OPTYPE_PRESET 32 /* show preset menu */
#define OPTYPE_INTERNAL 64 /* some operators are mainly for internal use
* and don't make sense to be accessed from the
* search menu, even if poll() returns TRUE.
* currently only used for the search toolbox */
/* context to call operator in for WM_operator_name_call */
/* rna_ui.c contains EnumPropertyItem's of these, keep in sync */
enum {
/* if there's invoke, call it, otherwise exec */
WM_OP_INVOKE_DEFAULT,
WM_OP_INVOKE_REGION_WIN,
WM_OP_INVOKE_REGION_CHANNELS,
WM_OP_INVOKE_REGION_PREVIEW,
WM_OP_INVOKE_AREA,
WM_OP_INVOKE_SCREEN,
/* only call exec */
WM_OP_EXEC_DEFAULT,
WM_OP_EXEC_REGION_WIN,
WM_OP_EXEC_REGION_CHANNELS,
WM_OP_EXEC_REGION_PREVIEW,
WM_OP_EXEC_AREA,
WM_OP_EXEC_SCREEN
};
/* ************** wmKeyMap ************************ */
/* modifier */
#define KM_SHIFT 1
#define KM_CTRL 2
#define KM_ALT 4
#define KM_OSKEY 8
/* means modifier should be pressed 2nd */
#define KM_SHIFT2 16
#define KM_CTRL2 32
#define KM_ALT2 64
#define KM_OSKEY2 128
/* KM_MOD_ flags for wmKeyMapItem and wmEvent.alt/shift/oskey/ctrl */
/* note that KM_ANY and FALSE are used with these defines too */
#define KM_MOD_FIRST 1
#define KM_MOD_SECOND 2
/* type: defined in wm_event_types.c */
#define KM_TEXTINPUT -2
/* val */
#define KM_ANY -1
#define KM_NOTHING 0
#define KM_PRESS 1
#define KM_RELEASE 2
#define KM_CLICK 3
#define KM_DBL_CLICK 4
/* ************** UI Handler ***************** */
#define WM_UI_HANDLER_CONTINUE 0
#define WM_UI_HANDLER_BREAK 1
typedef int (*wmUIHandlerFunc)(struct bContext *C, struct wmEvent *event, void *userdata);
typedef void (*wmUIHandlerRemoveFunc)(struct bContext *C, void *userdata);
/* ************** Notifiers ****************** */
typedef struct wmNotifier {
struct wmNotifier *next, *prev;
struct wmWindowManager *wm;
struct wmWindow *window;
int swinid; /* can't rely on this, notifiers can be added without context, swinid of 0 */
unsigned int category, data, subtype, action;
void *reference;
} wmNotifier;
/* 4 levels
*
* 0xFF000000; category
* 0x00FF0000; data
* 0x0000FF00; data subtype (unused?)
* 0x000000FF; action
*/
/* category */
#define NOTE_CATEGORY 0xFF000000
#define NC_WM (1<<24)
#define NC_WINDOW (2<<24)
#define NC_SCREEN (3<<24)
#define NC_SCENE (4<<24)
#define NC_OBJECT (5<<24)
#define NC_MATERIAL (6<<24)
#define NC_TEXTURE (7<<24)
#define NC_LAMP (8<<24)
#define NC_GROUP (9<<24)
#define NC_IMAGE (10<<24)
#define NC_BRUSH (11<<24)
#define NC_TEXT (12<<24)
#define NC_WORLD (13<<24)
#define NC_ANIMATION (14<<24)
#define NC_SPACE (15<<24)
#define NC_GEOM (16<<24)
#define NC_NODE (17<<24)
#define NC_ID (18<<24)
#define NC_LOGIC (19<<24)
#define NC_MOVIECLIP (20<<24)
/* data type, 256 entries is enough, it can overlap */
#define NOTE_DATA 0x00FF0000
/* NC_WM windowmanager */
#define ND_FILEREAD (1<<16)
#define ND_FILESAVE (2<<16)
#define ND_DATACHANGED (3<<16)
#define ND_HISTORY (4<<16)
#define ND_JOB (5<<16)
/* NC_SCREEN screen */
#define ND_SCREENBROWSE (1<<16)
#define ND_SCREENDELETE (2<<16)
#define ND_SCREENCAST (3<<16)
#define ND_ANIMPLAY (4<<16)
#define ND_GPENCIL (5<<16)
#define ND_EDITOR_CHANGED (6<<16) /*sent to new editors after switching to them*/
#define ND_SCREENSET (7<<16)
#define ND_SKETCH (8<<16)
#define ND_SUBWINACTIVE (9<<16)
/* NC_SCENE Scene */
#define ND_SCENEBROWSE (1<<16)
#define ND_MARKERS (2<<16)
#define ND_FRAME (3<<16)
#define ND_RENDER_OPTIONS (4<<16)
#define ND_NODES (5<<16)
#define ND_SEQUENCER (6<<16)
#define ND_OB_ACTIVE (7<<16)
#define ND_OB_SELECT (8<<16)
#define ND_OB_VISIBLE (9<<16)
#define ND_OB_RENDER (10<<16)
#define ND_MODE (11<<16)
#define ND_RENDER_RESULT (12<<16)
#define ND_COMPO_RESULT (13<<16)
#define ND_KEYINGSET (14<<16)
#define ND_TOOLSETTINGS (15<<16)
#define ND_LAYER (16<<16)
#define ND_FRAME_RANGE (17<<16)
#define ND_TRANSFORM_DONE (18<<16)
#define ND_WORLD (92<<16)
#define ND_LAYER_CONTENT (101<<16)
/* NC_OBJECT Object */
#define ND_TRANSFORM (18<<16)
#define ND_OB_SHADING (19<<16)
#define ND_POSE (20<<16)
#define ND_BONE_ACTIVE (21<<16)
#define ND_BONE_SELECT (22<<16)
#define ND_DRAW (23<<16)
#define ND_MODIFIER (24<<16)
#define ND_KEYS (25<<16)
#define ND_CONSTRAINT (26<<16)
#define ND_PARTICLE (27<<16)
#define ND_POINTCACHE (28<<16)
#define ND_PARENT (29<<16)
/* NC_MATERIAL Material */
#define ND_SHADING (30<<16)
#define ND_SHADING_DRAW (31<<16)
/* NC_LAMP Lamp */
#define ND_LIGHTING (40<<16)
#define ND_LIGHTING_DRAW (41<<16)
#define ND_SKY (42<<16)
/* NC_WORLD World */
#define ND_WORLD_DRAW (45<<16)
#define ND_WORLD_STARS (46<<16)
/* NC_TEXT Text */
#define ND_CURSOR (50<<16)
#define ND_DISPLAY (51<<16)
/* NC_ANIMATION Animato */
#define ND_KEYFRAME (70<<16)
#define ND_KEYFRAME_PROP (71<<16)
#define ND_ANIMCHAN (72<<16)
#define ND_NLA (73<<16)
#define ND_NLA_ACTCHANGE (74<<16)
#define ND_FCURVES_ORDER (75<<16)
/* NC_GEOM Geometry */
/* Mesh, Curve, MetaBall, Armature, .. */
#define ND_SELECT (90<<16)
#define ND_DATA (91<<16)
/* NC_NODE Nodes */
/* NC_SPACE */
#define ND_SPACE_CONSOLE (1<<16) /* general redraw */
#define ND_SPACE_INFO_REPORT (2<<16) /* update for reports, could specify type */
#define ND_SPACE_INFO (3<<16)
#define ND_SPACE_IMAGE (4<<16)
#define ND_SPACE_FILE_PARAMS (5<<16)
#define ND_SPACE_FILE_LIST (6<<16)
#define ND_SPACE_NODE (7<<16)
#define ND_SPACE_OUTLINER (8<<16)
#define ND_SPACE_VIEW3D (9<<16)
#define ND_SPACE_PROPERTIES (10<<16)
#define ND_SPACE_TEXT (11<<16)
#define ND_SPACE_TIME (12<<16)
#define ND_SPACE_GRAPH (13<<16)
#define ND_SPACE_DOPESHEET (14<<16)
#define ND_SPACE_NLA (15<<16)
#define ND_SPACE_SEQUENCER (16<<16)
#define ND_SPACE_NODE_VIEW (17<<16)
#define ND_SPACE_CHANGED (18<<16) /*sent to a new editor type after it's replaced an old one*/
#define ND_SPACE_CLIP (19<<16)
/* subtype, 256 entries too */
#define NOTE_SUBTYPE 0x0000FF00
/* subtype scene mode */
#define NS_MODE_OBJECT (1<<8)
#define NS_EDITMODE_MESH (2<<8)
#define NS_EDITMODE_CURVE (3<<8)
#define NS_EDITMODE_SURFACE (4<<8)
#define NS_EDITMODE_TEXT (5<<8)
#define NS_EDITMODE_MBALL (6<<8)
#define NS_EDITMODE_LATTICE (7<<8)
#define NS_EDITMODE_ARMATURE (8<<8)
#define NS_MODE_POSE (9<<8)
#define NS_MODE_PARTICLE (10<<8)
/* subtype 3d view editing */
#define NS_VIEW3D_GPU (16<<8)
/* action classification */
#define NOTE_ACTION (0x000000FF)
#define NA_EDITED 1
#define NA_EVALUATED 2
#define NA_ADDED 3
#define NA_REMOVED 4
#define NA_RENAME 5
#define NA_SELECTED 6
/* ************** Gesture Manager data ************** */
/* wmGesture->type */
#define WM_GESTURE_TWEAK 0
#define WM_GESTURE_LINES 1
#define WM_GESTURE_RECT 2
#define WM_GESTURE_CROSS_RECT 3
#define WM_GESTURE_LASSO 4
#define WM_GESTURE_CIRCLE 5
#define WM_GESTURE_STRAIGHTLINE 6
/* wmGesture is registered to window listbase, handled by operator callbacks */
/* tweak gesture is builtin feature */
typedef struct wmGesture {
struct wmGesture *next, *prev;
int event_type; /* event->type */
int mode; /* for modal callback */
int type; /* gesture type define */
int swinid; /* initial subwindow id where it started */
int points; /* optional, amount of points stored */
int size; /* optional, maximum amount of points stored */
void *customdata;
/* customdata for border is a recti */
/* customdata for circle is recti, (xmin, ymin) is center, xmax radius */
/* customdata for lasso is short array */
/* customdata for straight line is a recti: (xmin,ymin) is start, (xmax, ymax) is end */
} wmGesture;
/* ************** wmEvent ************************ */
/* each event should have full modifier state */
/* event comes from eventmanager and from keymap */
typedef struct wmEvent {
struct wmEvent *next, *prev;
short type; /* event code itself (short, is also in keymap) */
short val; /* press, release, scrollvalue */
int x, y; /* mouse pointer position, screen coord */
int mval[2]; /* region mouse position, name convention pre 2.5 :) */
char utf8_buf[6]; /* from, ghost if utf8 is enabled for the platform,
* BLI_str_utf8_size() must _always_ be valid, check
* when assigning s we don't need to check on every access after */
char ascii; /* from ghost, fallback if utf8 isn't set */
char pad;
/* previous state */
short prevtype;
short prevval;
int prevx, prevy;
double prevclicktime;
int prevclickx, prevclicky;
/* modifier states */
short shift, ctrl, alt, oskey; /* oskey is apple or windowskey, value denotes order of pressed */
short keymodifier; /* rawkey modifier */
short pad1;
/* keymap item, set by handler (weak?) */
const char *keymap_idname;
/* custom data */
short custom; /* custom data type, stylus, 6dof, see wm_event_types.h */
short customdatafree;
int pad2;
void *customdata; /* ascii, unicode, mouse coords, angles, vectors, dragdrop info */
} wmEvent;
/* ************** custom wmEvent data ************** */
typedef struct wmTabletData {
int Active; /* 0=EVT_TABLET_NONE, 1=EVT_TABLET_STYLUS, 2=EVT_TABLET_ERASER */
float Pressure; /* range 0.0 (not touching) to 1.0 (full pressure) */
float Xtilt; /* range 0.0 (upright) to 1.0 (tilted fully against the tablet surface) */
float Ytilt; /* as above */
} wmTabletData;
typedef enum { // motion progress, for modal handlers
P_NOT_STARTED,
P_STARTING, // <--
P_IN_PROGRESS, // <-- only these are sent for NDOF motion
P_FINISHING, // <--
P_FINISHED
} wmProgress;
typedef struct wmNDOFMotionData {
/* awfully similar to GHOST_TEventNDOFMotionData... */
// Each component normally ranges from -1 to +1, but can exceed that.
// These use blender standard view coordinates, with positive rotations being CCW about the axis.
union {
float tvec[3]; // translation
struct { float tx, ty, tz; };
};
union {
float rvec[3]; // rotation:
struct { float rx, ry, rz; };
};
// axis = (rx,ry,rz).normalized
// amount = (rx,ry,rz).magnitude [in revolutions, 1.0 = 360 deg]
float dt; // time since previous NDOF Motion event
wmProgress progress; // is this the first event, the last, or one of many in between?
} wmNDOFMotionData;
typedef struct wmTimer {
struct wmTimer *next, *prev;
struct wmWindow *win; /* window this timer is attached to (optional) */
double timestep; /* set by timer user */
int event_type; /* set by timer user, goes to event system */
void *customdata; /* set by timer user, to allow custom values */
double duration; /* total running time in seconds */
double delta; /* time since previous step in seconds */
double ltime; /* internal, last time timer was activated */
double ntime; /* internal, next time we want to activate the timer */
double stime; /* internal, when the timer started */
int sleep; /* internal, put timers to sleep when needed */
} wmTimer;
typedef struct wmOperatorType {
const char *name; /* text for ui, undo */
const char *idname; /* unique identifier */
const char *description; /* tooltips and python docs */
/* this callback executes the operator without any interactive input,
* parameters may be provided through operator properties. cannot use
* any interface code or input device state.
* - see defines below for return values */
int (*exec)(struct bContext *, struct wmOperator *);
/* this callback executes on a running operator whenever as property
* is changed. It can correct its own properties or report errors for
* invalid settings in exceptional cases.
* Boolean return value, True denotes a change has been made and to redraw */
int (*check)(struct bContext *, struct wmOperator *);
/* for modal temporary operators, initially invoke is called. then
* any further events are handled in modal. if the operation is
* canceled due to some external reason, cancel is called
* - see defines below for return values */
int (*invoke)(struct bContext *, struct wmOperator *, struct wmEvent *);
int (*cancel)(struct bContext *, struct wmOperator *);
int (*modal)(struct bContext *, struct wmOperator *, struct wmEvent *);
/* verify if the operator can be executed in the current context, note
* that the operator might still fail to execute even if this return true */
int (*poll)(struct bContext *);
/* optional panel for redo and repeat, autogenerated if not set */
void (*ui)(struct bContext *, struct wmOperator *);
/* rna for properties */
struct StructRNA *srna;
/* previous settings - for initializing on re-use */
struct IDProperty *last_properties;
/* rna property to use for generic invoke functions.
* menus, enum search... etc */
PropertyRNA *prop;
/* struct wmOperatorTypeMacro */
ListBase macro;
/* pointer to modal keymap, do not free! */
struct wmKeyMap *modalkeymap;
/* only used for operators defined with python
* use to store pointers to python functions */
void *pyop_data;
int (*pyop_poll)(struct bContext *, struct wmOperatorType *ot);
/* RNA integration */
ExtensionRNA ext;
/* Flag last for padding */
short flag;
} wmOperatorType;
/* **************** Paint Cursor ******************* */
typedef void (*wmPaintCursorDraw)(struct bContext *C, int, int, void *customdata);
/* ****************** Messages ********************* */
enum {
WM_LOG_DEBUG = 0,
WM_LOG_INFO = 1000,
WM_LOG_WARNING = 2000,
WM_ERROR_UNDEFINED = 3000,
WM_ERROR_INVALID_INPUT = 3001,
WM_ERROR_INVALID_CONTEXT = 3002,
WM_ERROR_OUT_OF_MEMORY = 3003
};
typedef struct wmReport {
struct wmReport *next, *prev;
const char *typestr;
char *message;
int type;
} wmReport;
/* *************** Drag and drop *************** */
#define WM_DRAG_ID 0
#define WM_DRAG_RNA 1
#define WM_DRAG_PATH 2
#define WM_DRAG_NAME 3
#define WM_DRAG_VALUE 4
/* note: structs need not exported? */
typedef struct wmDrag {
struct wmDrag *next, *prev;
int icon, type; /* type, see WM_DRAG defines above */
void *poin;
char path[1024]; /* FILE_MAX */
double value;
struct ImBuf *imb; /* if no icon but imbuf should be drawn around cursor */
float scale;
int sx, sy;
char opname[200]; /* if set, draws operator name*/
} wmDrag;
/* dropboxes are like keymaps, part of the screen/area/region definition */
/* allocation and free is on startup and exit */
typedef struct wmDropBox {
struct wmDropBox *next, *prev;
/* test if the dropbox is active, then can print optype name */
int (*poll)(struct bContext *, struct wmDrag *, wmEvent *);
/* before exec, this copies drag info to wmDrop properties */
void (*copy)(struct wmDrag *, struct wmDropBox *);
/* if poll survives, operator is called */
wmOperatorType *ot; /* not saved in file, so can be pointer */
struct IDProperty *properties; /* operator properties, assigned to ptr->data and can be written to a file */
struct PointerRNA *ptr; /* rna pointer to access properties */
short opcontext; /* default invoke */
} wmDropBox;
/* *************** migrated stuff, clean later? ************** */
typedef struct RecentFile {
struct RecentFile *next, *prev;
char *filepath;
} RecentFile;
#ifdef __cplusplus
}
#endif
#endif /* __WM_TYPES_H__ */