2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public License
4 * as published by the Free Software Foundation; either version 2
5 * of the License, or (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software Foundation,
14 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * The Original Code is Copyright (C) 2007 Blender Foundation.
17 * All rights reserved.
20 /** \file blender/windowmanager/wm_event_system.h
24 #ifndef __WM_EVENT_SYSTEM_H__
25 #define __WM_EVENT_SYSTEM_H__
27 /* return value of handler-operator call */
28 #define WM_HANDLER_CONTINUE 0
29 #define WM_HANDLER_BREAK 1
30 #define WM_HANDLER_HANDLED 2
31 #define WM_HANDLER_MODAL 4 /* MODAL|BREAK means unhandled */
36 /* wmKeyMap is in DNA_windowmanager.h, it's saveable */
38 struct wmEventHandler_KeymapFn {
39 void (*handle_post_fn)(wmKeyMap *keymap, wmKeyMapItem *kmi, void *user_data);
43 typedef struct wmEventHandler {
44 struct wmEventHandler *next, *prev;
46 char type; /* WM_HANDLER_DEFAULT, ... */
47 char flag; /* WM_HANDLER_BLOCKING, ... */
50 wmKeyMap *keymap; /* pointer to builtin/custom keymaps */
51 const rcti *bblocal, *bbwin; /* optional local and windowspace bb */
52 /* Run after the keymap item runs. */
53 struct wmEventHandler_KeymapFn keymap_callback;
55 struct bToolRef *keymap_tool;
57 /* modal operator handler */
58 wmOperator *op; /* for derived/modal handlers */
59 struct ScrArea *op_area; /* for derived/modal handlers */
60 struct ARegion *op_region; /* for derived/modal handlers */
61 short op_region_type; /* for derived/modal handlers */
64 wmUIHandlerFunc ui_handle; /* callback receiving events */
65 wmUIHandlerRemoveFunc ui_remove; /* callback when handler is removed */
66 void *ui_userdata; /* user data pointer */
67 struct ScrArea *ui_area; /* for derived/modal handlers */
68 struct ARegion *ui_region; /* for derived/modal handlers */
69 struct ARegion *ui_menu; /* for derived/modal handlers */
71 /* drop box handler */
74 struct wmGizmoMap *gizmo_map;
77 /* custom types for handlers, for signaling, freeing */
83 /* wm_event_system.c */
84 void wm_event_free_all (wmWindow *win);
85 void wm_event_free (wmEvent *event);
86 void wm_event_free_handler (wmEventHandler *handler);
88 /* goes over entire hierarchy: events -> window -> screen -> area -> region */
89 void wm_event_do_handlers (bContext *C);
91 void wm_event_add_ghostevent (wmWindowManager *wm, wmWindow *win, int type, int time, void *customdata);
93 void wm_event_do_depsgraph(bContext *C);
94 void wm_event_do_refresh_wm_and_depsgraph(bContext *C);
95 void wm_event_do_notifiers(bContext *C);
97 float wm_pressure_curve(float raw_pressure);
102 void wm_dropbox_free(void);
103 void wm_drags_check_ops(bContext *C, const wmEvent *event);
104 void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect);
106 #endif /* __WM_EVENT_SYSTEM_H__ */