- Put back vertex/edge/face select 
- Mode menu allows going in/out editmode

- Tested some tweak event stuff in WM, made tweak event follow
  user preset for 'action' or 'select' mouse.
  (Wanted to try this for transform, but better get advise from
  Martin first :)
This commit is contained in:
Ton Roosendaal
2009-01-01 18:05:12 +00:00
parent 029b0c3ecf
commit e2e282989e
13 changed files with 157 additions and 111 deletions

View File

@@ -173,7 +173,7 @@ typedef struct EditMesh
EditFace *act_face;
/* copy from scene */
int selectmode;
short selectmode;
struct DerivedMesh *derivedCage, *derivedFinal;
/* the custom data layer mask that was last used to calculate

View File

@@ -340,25 +340,6 @@ static void ed_marker_move_cancel(bContext *C, wmOperator *op)
}
/* for tweak handlers, check configuration for how to interpret events */
int WM_modal_tweak_check(wmEvent *evt, int tweak_event)
{
/* user preset?? dunno... */
int tweak_modal= 1;
switch(tweak_event) {
case EVT_TWEAK_L:
case EVT_TWEAK_M:
case EVT_TWEAK_R:
if(evt->val==tweak_modal)
return 1;
default:
/* this case is when modal callcback didnt get started with a tweak */
if(evt->val)
return 1;
}
return 0;
}
static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
{
@@ -377,7 +358,7 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
case LEFTMOUSE:
case MIDDLEMOUSE:
case RIGHTMOUSE:
if(WM_modal_tweak_check(evt, mm->event_type)) {
if(WM_modal_tweak_exit(evt, mm->event_type)) {
ed_marker_move_exit(C, op);
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
return OPERATOR_FINISHED;
@@ -625,6 +606,7 @@ static int ed_marker_select(bContext *C, wmEvent *evt, int extend)
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
/* allowing tweaks */
return OPERATOR_PASS_THROUGH;
}

View File

@@ -109,6 +109,8 @@ void EM_select_edge(struct EditEdge *eed, int sel);
void EM_select_face_fgon(struct EditMesh *em, struct EditFace *efa, int val);
void EM_selectmode_flush(struct EditMesh *em);
void EM_deselect_flush(struct EditMesh *em);
void EM_selectmode_set(struct EditMesh *em);
void EM_convertsel(struct EditMesh *em, short oldmode, short selectmode);
/* exported to transform */
int EM_get_actSelection(struct EditMesh *em, struct EditSelection *ese);

View File

@@ -44,6 +44,12 @@ void ED_base_object_activate(struct bContext *C, struct Base *base);
void ED_base_object_free_and_unlink(struct Scene *scene, struct Base *base);
/* bitflags for enter/exit editmode */
#define EM_FREEDATA 1
#define EM_FREEUNDO 2
#define EM_WAITCURSOR 4
void ED_object_exit_editmode(struct bContext *C, int flag);
void ED_object_enter_editmode(struct bContext *C, int flag);
/* cleanup */
int object_data_is_libdata(struct Object *ob);

View File

@@ -109,11 +109,9 @@ extern int faceselectedAND(EditFace *efa, int flag);
void EM_remove_selection(EditMesh *em, void *data, int type);
void EM_set_actFace(EditMesh *em, EditFace *efa);
void EM_select_face(EditFace *efa, int sel);
void EM_selectmode_set(EditMesh *em);
void EM_clear_flag_all(EditMesh *em, int flag);
void EM_select_flush(EditMesh *em);
void EM_set_flag_all(EditMesh *em, int flag);
void EM_convertsel(EditMesh *em, short oldmode, short selectmode);
void EM_add_data_layer(EditMesh *em, CustomData *data, int type);

View File

@@ -113,6 +113,7 @@
#include "ED_anim_api.h"
#include "ED_mesh.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_types.h"
#include "ED_util.h"
@@ -131,7 +132,6 @@
#include "object_intern.h" // own include
/* ************* XXX **************** */
#define EM_WAITCURSOR 0
static void allqueue() {}
static void BIF_undo_push() {}
static void error() {}
@@ -250,7 +250,7 @@ void add_object_draw(Scene *scene, View3D *v3d, int type) /* for toolbox or menu
exit_paint_modes();
// XXX if (G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
// XXX if (G.obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
ob= add_object(type);
// ED_base_object_activate(C, BASACT);
base_init_from_view3d(BASACT, v3d);
@@ -1992,21 +1992,20 @@ void OBJECT_OT_make_track(wmOperatorType *ot)
/* ******************* toggle editmode operator ***************** */
static void exit_editmode(bContext *C, wmOperator *op, int flag) /* freedata==0 at render, 1= freedata, 2= do undo buffer too */
void ED_object_exit_editmode(bContext *C, int flag)
{
Scene *scene= CTX_data_scene(C);
Object *ob;
// Object *obedit= CTX_data_edit_object(C);
int freedata = flag; // XXX & EM_FREEDATA;
int freedata = flag & EM_FREEDATA;
if(G.obedit==NULL) return;
// if(flag & EM_WAITCURSOR) waitcursor(1);
if(flag & EM_WAITCURSOR) waitcursor(1);
if(G.obedit->type==OB_MESH) {
Mesh *me= G.obedit->data;
// if(EM_texFaceCheck())
// allqueue(REDRAWIMAGE, 0);
// if(retopo_mesh_paint_check())
// retopo_end_okee();
@@ -2059,14 +2058,14 @@ static void exit_editmode(bContext *C, wmOperator *op, int flag) /* freedata==0
if(G.obedit==NULL) // XXX && (flag & EM_FREEUNDO))
ED_undo_push(C, "Editmode");
// if(flag & EM_WAITCURSOR) waitcursor(0);
if(flag & EM_WAITCURSOR) waitcursor(0);
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, ob);
}
static void enter_editmode(bContext *C, wmOperator *op)
void ED_object_enter_editmode(bContext *C, int flag)
{
Scene *scene= CTX_data_scene(C);
Base *base= CTX_data_active_base(C);
@@ -2085,7 +2084,7 @@ static void enter_editmode(bContext *C, wmOperator *op)
return;
}
//if(wc) waitcursor(1);
if(flag & EM_WAITCURSOR) waitcursor(1);
if(ob->type==OB_MESH) {
Mesh *me= ob->data;
@@ -2144,24 +2143,23 @@ static void enter_editmode(bContext *C, wmOperator *op)
}
if(ok) {
DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
}
else {
G.obedit= NULL;
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, ob);
}
if(flag & EM_WAITCURSOR) waitcursor(0);
}
static int toggle_editmode_exec(bContext *C, wmOperator *op)
{
if(!CTX_data_edit_object(C))
enter_editmode(C, op);
ED_object_enter_editmode(C, EM_WAITCURSOR);
else
exit_editmode(C, op, 1);
ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
return OPERATOR_FINISHED;
}
@@ -2188,7 +2186,7 @@ void check_editmode(int type)
if (G.obedit==0 || G.obedit->type==type) return;
// XXX exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
// XXX ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
}
/* 0 == do center, 1 == center new, 2 == center cursor */
@@ -3339,8 +3337,8 @@ void convertmenu(Scene *scene, View3D *v3d)
/* texspace and normals */
if(!basen) BASACT= base;
// XXX enter_editmode(scene, v3d, EM_WAITCURSOR);
// XXX exit_editmode(EM_FREEDATA|EM_WAITCURSOR); /* freedata, but no undo */
// XXX ED_object_enter_editmode(C, 0);
// XXX exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR); /* freedata, but no undo */
BASACT= basact;
allqueue(REDRAWVIEW3D, 0);
@@ -4337,9 +4335,9 @@ static void apply_objects_internal(Scene *scene, View3D *v3d, int apply_scale, i
/* texspace and normals */
BASACT= base;
// XXX enter_editmode(scene, v3d, EM_WAITCURSOR);
// XXX ED_object_enter_editmode(C, 0);
BIF_undo_push("Applied object"); /* editmode undo itself */
// XXX exit_editmode(EM_FREEDATA|EM_WAITCURSOR); /* freedata, but no undo */
// XXX ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR); /* freedata, but no undo */
BASACT= basact;
change = 1;
@@ -4413,9 +4411,9 @@ static void apply_objects_internal(Scene *scene, View3D *v3d, int apply_scale, i
/* texspace and normals */
BASACT= base;
// XXX enter_editmode(scene, v3d, EM_WAITCURSOR);
// XXX ED_object_enter_editmode(C, 0);
BIF_undo_push("Applied object"); /* editmode undo itself */
// XXX exit_editmode(EM_FREEDATA|EM_WAITCURSOR); /* freedata, but no undo */
// XXX ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR); /* freedata, but no undo */
BASACT= basact;
change = 1;

View File

@@ -64,6 +64,7 @@
#include "ED_screen.h"
#include "ED_object.h"
#include "ED_mesh.h"
#include "ED_util.h"
#include "ED_types.h"
@@ -5306,8 +5307,12 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
View3D *v3d= sa->spacedata.first;
Object *ob= OBACT;
Object *obedit = CTX_data_edit_object(C);
int bit, shift=0; // XXX shift arg?
EditMesh *em= NULL;
int bit, ctrl=0, shift=0; // XXX shift arg?
if(obedit && obedit->type==OB_MESH) {
em= ((Mesh *)obedit->data)->edit_mesh;
}
/* watch it: if sa->win does not exist, check that when calling direct drawing routines */
switch(event) {
@@ -5362,13 +5367,13 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
v3d->flag &= ~V3D_MODE;
// XXX exit_paint_modes();
// XXX if(ob) exit_posemode(); /* exit posemode for active object */
// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
}
else if (v3d->modeselect == V3D_EDITMODE_SEL) {
if(!obedit) {
v3d->flag &= ~V3D_MODE;
// XXX exit_paint_modes();
// XXX enter_editmode(EM_WAITCURSOR);
ED_object_enter_editmode(C, EM_WAITCURSOR);
ED_undo_push(C, "Original"); /* here, because all over code enter_editmode is abused */
}
}
@@ -5376,7 +5381,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
if (!(G.f & G_SCULPTMODE)) {
v3d->flag &= ~V3D_MODE;
// XXX exit_paint_modes();
// XXX if(obedit) exit_editmode(2); /* exit editmode and undo */
if(obedit) ED_object_exit_editmode(C, EM_FREEUNDO); /* exit editmode and undo */
// XXX set_sculptmode();
}
@@ -5385,7 +5390,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
if (!(G.f & G_VERTEXPAINT)) {
v3d->flag &= ~V3D_MODE;
// XXX exit_paint_modes();
// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
// XXX set_vpaint();
}
@@ -5394,7 +5399,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
if (!(G.f & G_TEXTUREPAINT)) {
v3d->flag &= ~V3D_MODE;
// XXX exit_paint_modes();
// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
// XXX set_texturepaint();
}
@@ -5403,7 +5408,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
if (!(G.f & G_WEIGHTPAINT) && (ob && ob->type == OB_MESH) ) {
v3d->flag &= ~V3D_MODE;
// XXX exit_paint_modes();
// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
// XXX set_wpaint();
}
@@ -5412,7 +5417,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
if (ob) {
v3d->flag &= ~V3D_MODE;
// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
// XXX enter_posemode();
}
@@ -5421,7 +5426,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
if (!(G.f & G_PARTICLEEDIT)) {
v3d->flag &= ~V3D_MODE;
// XXX exit_paint_modes();
// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
// XXX PE_set_particle_edit();
}
@@ -5435,39 +5440,42 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
break;
case B_SEL_VERT:
if(shift==0 || scene->selectmode==0)
scene->selectmode= SCE_SELECT_VERTEX;
// XXX EM_selectmode_set();
countall();
ED_undo_push(C, "Selectmode Set: Vertex");
allqueue(REDRAWVIEW3D, 1);
allqueue(REDRAWIMAGE, 0); /* only needed in cases where mesh and UV selection are in sync */
if(em) {
if(shift==0 || em->selectmode==0)
em->selectmode= SCE_SELECT_VERTEX;
scene->selectmode= em->selectmode;
EM_selectmode_set(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
ED_undo_push(C, "Selectmode Set: Vertex");
}
break;
case B_SEL_EDGE:
if(shift==0 || scene->selectmode==0){
if( (scene->selectmode ^ SCE_SELECT_EDGE) == SCE_SELECT_VERTEX){
// XXX if(ctrl) EM_convertsel(SCE_SELECT_VERTEX,SCE_SELECT_EDGE);
if(em) {
if(shift==0 || em->selectmode==0){
if( (em->selectmode ^ SCE_SELECT_EDGE) == SCE_SELECT_VERTEX){
if(ctrl) EM_convertsel(em, SCE_SELECT_VERTEX,SCE_SELECT_EDGE);
}
em->selectmode = SCE_SELECT_EDGE;
}
scene->selectmode = SCE_SELECT_EDGE;
scene->selectmode= em->selectmode;
EM_selectmode_set(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
ED_undo_push(C, "Selectmode Set: Edge");
}
// XXX EM_selectmode_set();
countall();
ED_undo_push(C, "Selectmode Set: Edge");
allqueue(REDRAWVIEW3D, 1);
allqueue(REDRAWIMAGE, 0); /* only needed in cases where mesh and UV selection are in sync */
break;
case B_SEL_FACE:
if( shift==0 || scene->selectmode==0){
if( ((scene->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_VERTEX) || ((scene->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_EDGE)){
// XXX if(ctrl) EM_convertsel((scene->selectmode ^ SCE_SELECT_FACE),SCE_SELECT_FACE);
if(em) {
if( shift==0 || em->selectmode==0){
if( ((scene->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_VERTEX) || ((scene->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_EDGE)){
if(ctrl) EM_convertsel(em, (scene->selectmode ^ SCE_SELECT_FACE),SCE_SELECT_FACE);
}
em->selectmode = SCE_SELECT_FACE;
}
scene->selectmode = SCE_SELECT_FACE;
scene->selectmode= em->selectmode;
EM_selectmode_set(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
ED_undo_push(C, "Selectmode Set: Face");
}
// XXX EM_selectmode_set();
countall();
ED_undo_push(C, "Selectmode Set: Face");
allqueue(REDRAWVIEW3D, 1);
allqueue(REDRAWIMAGE, 0); /* only needed in cases where mesh and UV selection are in sync */
break;
case B_SEL_PATH:
@@ -5915,12 +5923,14 @@ void view3d_header_buttons(const bContext *C, ARegion *ar)
/* selection modus */
if(obedit && (obedit->type == OB_MESH)) {
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
uiBlockBeginAlign(block);
uiDefIconButBitS(block, TOG, SCE_SELECT_VERTEX, B_SEL_VERT, ICON_VERTEXSEL, xco,yco,XIC,YIC, &scene->selectmode, 1.0, 0.0, 0, 0, "Vertex select mode (Ctrl Tab 1)");
uiDefIconButBitS(block, TOG, SCE_SELECT_VERTEX, B_SEL_VERT, ICON_VERTEXSEL, xco,yco,XIC,YIC, &em->selectmode, 1.0, 0.0, 0, 0, "Vertex select mode (Ctrl Tab 1)");
xco+= XIC;
uiDefIconButBitS(block, TOG, SCE_SELECT_EDGE, B_SEL_EDGE, ICON_EDGESEL, xco,yco,XIC,YIC, &scene->selectmode, 1.0, 0.0, 0, 0, "Edge select mode (Ctrl Tab 2)");
uiDefIconButBitS(block, TOG, SCE_SELECT_EDGE, B_SEL_EDGE, ICON_EDGESEL, xco,yco,XIC,YIC, &em->selectmode, 1.0, 0.0, 0, 0, "Edge select mode (Ctrl Tab 2)");
xco+= XIC;
uiDefIconButBitS(block, TOG, SCE_SELECT_FACE, B_SEL_FACE, ICON_FACESEL, xco,yco,XIC,YIC, &scene->selectmode, 1.0, 0.0, 0, 0, "Face select mode (Ctrl Tab 3)");
uiDefIconButBitS(block, TOG, SCE_SELECT_FACE, B_SEL_FACE, ICON_FACESEL, xco,yco,XIC,YIC, &em->selectmode, 1.0, 0.0, 0, 0, "Face select mode (Ctrl Tab 3)");
xco+= XIC;
uiBlockEndAlign(block);
if(v3d->drawtype > OB_WIRE) {

View File

@@ -133,5 +133,8 @@ void view3d_keymap(wmWindowManager *wm)
transform_keymap_for_space(wm, keymap, SPACE_VIEW3D);
/* generates event, in end to make select work */
WM_keymap_verify_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);
}

View File

@@ -1473,7 +1473,8 @@ static int view3d_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
else
mouse_select(C, mval, extend, 0);
return OPERATOR_FINISHED;
/* allowing tweaks */
return OPERATOR_PASS_THROUGH;
}
void VIEW3D_OT_select(wmOperatorType *ot)

View File

@@ -625,6 +625,7 @@ void transformEvent(TransInfo *t, wmEvent *event)
break;
case ESCKEY:
case RIGHTMOUSE:
printf("cancelled\n");
t->state = TRANS_CANCEL;
break;
case LEFTMOUSE:

View File

@@ -94,6 +94,7 @@ struct wmEventHandler *WM_event_add_modal_handler(struct bContext *C, ListBase *
void WM_event_remove_handlers(struct bContext *C, ListBase *handlers);
void WM_event_add_mousemove(struct bContext *C);
int WM_modal_tweak_exit(struct wmEvent *evt, int tweak_event);
void WM_event_add_notifier(struct bContext *C, unsigned int type, void *data);

View File

@@ -530,35 +530,53 @@ void WM_event_remove_handlers(bContext *C, ListBase *handlers)
}
}
/* do userdef mappings */
static int wm_userdef_event_map(int kmitype)
{
switch(kmitype) {
case SELECTMOUSE:
if(U.flag & USER_LMOUSESELECT)
return LEFTMOUSE;
else
return RIGHTMOUSE;
case ACTIONMOUSE:
if(U.flag & USER_LMOUSESELECT)
return RIGHTMOUSE;
else
return LEFTMOUSE;
case WHEELOUTMOUSE:
if(U.uiflag & USER_WHEELZOOMDIR)
return WHEELUPMOUSE;
else
return WHEELDOWNMOUSE;
case WHEELINMOUSE:
if(U.uiflag & USER_WHEELZOOMDIR)
return WHEELDOWNMOUSE;
else
return WHEELUPMOUSE;
case EVT_TWEAK_A:
if(U.flag & USER_LMOUSESELECT)
return EVT_TWEAK_R;
else
return EVT_TWEAK_L;
case EVT_TWEAK_S:
if(U.flag & USER_LMOUSESELECT)
return EVT_TWEAK_L;
else
return EVT_TWEAK_R;
}
return kmitype;
}
static int wm_eventmatch(wmEvent *winevent, wmKeymapItem *kmi)
{
int kmitype= kmi->type;
/* first do userdef mappings */
if(kmitype==SELECTMOUSE) {
if(U.flag & USER_LMOUSESELECT)
kmitype= LEFTMOUSE;
else
kmitype= RIGHTMOUSE;
}
else if(kmitype==ACTIONMOUSE) {
if(U.flag & USER_LMOUSESELECT)
kmitype= RIGHTMOUSE;
else
kmitype= LEFTMOUSE;
}
else if(kmitype==WHEELOUTMOUSE) {
if(U.uiflag & USER_WHEELZOOMDIR)
kmitype= WHEELUPMOUSE;
else
kmitype= WHEELDOWNMOUSE;
}
else if(kmitype==WHEELINMOUSE) {
if(U.uiflag & USER_WHEELZOOMDIR)
kmitype= WHEELDOWNMOUSE;
else
kmitype= WHEELUPMOUSE;
}
int kmitype= wm_userdef_event_map(kmi->type);
/* the matching rules */
if(winevent->type!=kmitype) return 0;
@@ -961,6 +979,27 @@ void WM_event_add_mousemove(bContext *C)
wm_event_add(window, &event);
}
/* for modal callbacks, check configuration for how to interpret exit with tweaks */
int WM_modal_tweak_exit(wmEvent *evt, int tweak_event)
{
/* user preset?? dunno... */
int tweak_modal= 1;
switch(tweak_event) {
case EVT_TWEAK_L:
case EVT_TWEAK_M:
case EVT_TWEAK_R:
if(evt->val==tweak_modal)
return 1;
default:
/* this case is when modal callcback didnt get started with a tweak */
if(evt->val)
return 1;
}
return 0;
}
/* ********************* ghost stuff *************** */
static int convert_key(GHOST_TKey key)

View File

@@ -260,12 +260,17 @@
/* **************** BLENDER GESTURE EVENTS ********************* */
#define EVT_ACTIONZONE 0x5001
/* tweak events, for L M R mousebuttons */
/* tweak events, for L M R mousebuttons */
#define EVT_TWEAK_L 0x5002
#define EVT_TWEAK_M 0x5003
#define EVT_TWEAK_R 0x5004
/* tweak events for action or select mousebutton */
#define EVT_TWEAK_A 0x5005
#define EVT_TWEAK_S 0x5006
#define EVT_GESTURE 0x5005
#define EVT_GESTURE 0x5010
/* value of tweaks and line gestures, note, KM_ANY (-1) works for this case too */
#define EVT_GESTURE_N 1