Sanitized the 'tweak' event.
Original idea was to have WM event system generating it
automatically. However, I first tested it via a handler
and operator, to check what kind of configurations would
be useful. It appeared to not work nice, also because
that inserting a tweak operator in a keymap is confusing.
Now 'tweaks' are generated automatically, and can be
catched by keymaps as any event. The current definition
of tweak is:
- if Left/Middle/Rightmouse pressed
if event wasn't handled by window queue (modal handlers)
start checking mousepositions
- while mousepositions are checked
- escape on any event other than mouse
- on mouse events:
- add tweak event if mousemove > 10 pixels
- stop checking for tweak if mousebutton released
- Tweak events have a define indicating mousebutton used
EVT_TWEAK_L, EVT_TWEAK_M, EVT_TWEAK_R
- In keymap definitions you can use _S or _A to map to
action or select mouse userdef.
- Event value in keymap should be KM_ANY for all tweaks,
or use one of the eight directions:
EVT_GESTURE_E, _SE, _S, _SW, _W, _NW, _N, _NE
- And of course you can add modifier checks in keymaps for it.
- Because tweaks are a result of mouse events, the handlers get
both to evaluate. That means that RMB-select + tweak will work
correctly.
In case you don't want both to be handled, for example the
CTRL+LMB 'extrude' and CTRL+LMB-tweak 'lasso select', you will
need to set the first acting on a EVT_RELEASE, this event only
gets passed on when tweak fails.
The current system allows all options, configurable, we had in 2.48,
and many more! A diagram of what's possible is on the todo. :)
Also in this commit: lasso select editmesh failed with 'zbuffer
occluded select'. Also circle-select failed.
72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
/**
|
|
* $Id:
|
|
*
|
|
* ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2007 Blender Foundation.
|
|
* All rights reserved.
|
|
*
|
|
*
|
|
* Contributor(s): Blender Foundation
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
#ifndef WM_H
|
|
#define WM_H
|
|
|
|
struct wmWindow;
|
|
|
|
typedef struct wmPaintCursor {
|
|
struct wmPaintCursor *next, *prev;
|
|
|
|
void *customdata;
|
|
|
|
int (*poll)(struct bContext *C);
|
|
void (*draw)(bContext *C, int, int, void *customdata);
|
|
} wmPaintCursor;
|
|
|
|
extern void wm_close_and_free(bContext *C, wmWindowManager *);
|
|
extern void wm_close_and_free_all(bContext *C, ListBase *);
|
|
|
|
extern void wm_add_default(bContext *C);
|
|
extern void wm_check(bContext *C);
|
|
|
|
/* register to windowmanager for redo or macro */
|
|
void wm_operator_register(wmWindowManager *wm, wmOperator *op);
|
|
|
|
extern void wm_report_free(wmReport *report);
|
|
|
|
/* wm_operator.c, for init/exit */
|
|
void wm_operatortype_free(void);
|
|
void wm_operatortype_init(void);
|
|
void wm_window_keymap(wmWindowManager *wm);
|
|
|
|
void wm_tweakevent_test(bContext *C, wmEvent *event, int action);
|
|
|
|
/* wm_gesture.c */
|
|
#define WM_LASSO_MAX_POINTS 1024
|
|
void wm_gesture_draw(struct wmWindow *win);
|
|
int wm_gesture_evaluate(bContext *C, wmGesture *gesture);
|
|
void wm_gesture_tag_redraw(bContext *C);
|
|
|
|
/* wm_jobs.h */
|
|
void WM_OT_jobs_timer(struct wmOperatorType *ot);
|
|
|
|
|
|
#endif /* WM_H */
|
|
|