Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2010-04-02 07:52:44 +0400
committerJoshua Leung <aligorith@gmail.com>2010-04-02 07:52:44 +0400
commit7b98f6220b2ce1739331f87722e0f88a78ba1a92 (patch)
tree6205f5dafdd83b85910503422e096c9ab600cc4d /source/blender
parent174696fd542e966bc218957cc9a73eea14aefa06 (diff)
Bugfix #21853: Border zoom in the 2D-Views zooms out
* Fixed the way the operator was checking for what the user wanted when using the operator * Added a few specific defines to a copy of the gesture border modal keymap (added one for zooming only) labelled 'In' and 'Out' which make this more useful than being hacked to use select and deselect
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/animation/keyframing.c4
-rw-r--r--source/blender/editors/interface/view2d_ops.c11
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c39
-rw-r--r--source/blender/windowmanager/wm_event_types.h3
4 files changed, 48 insertions, 9 deletions
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index 800b0248728..02b79770941 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -286,7 +286,9 @@ int insert_vert_fcurve (FCurve *fcu, float x, float y, short flag)
BezTriple beztr;
int a;
- /* set all three points, for nicer start position */
+ /* set all three points, for nicer start position
+ * NOTE: +/- 1 on vec.x for left and right handles is so that 'free' handles work ok...
+ */
memset(&beztr, 0, sizeof(BezTriple));
beztr.vec[0][0]= x-1.0f;
beztr.vec[0][1]= y;
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index 4039e975724..8e760a7501c 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -1038,17 +1038,16 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op)
ARegion *ar= CTX_wm_region(C);
View2D *v2d= &ar->v2d;
rctf rect;
- int event_type;
+ int gesture_mode;
/* convert coordinates of rect to 'tot' rect coordinates */
UI_view2d_region_to_view(v2d, RNA_int_get(op->ptr, "xmin"), RNA_int_get(op->ptr, "ymin"), &rect.xmin, &rect.ymin);
UI_view2d_region_to_view(v2d, RNA_int_get(op->ptr, "xmax"), RNA_int_get(op->ptr, "ymax"), &rect.xmax, &rect.ymax);
/* check if zooming in/out view */
- // XXX hardcoded for now!
- event_type= RNA_int_get(op->ptr, "event_type");
+ gesture_mode= RNA_int_get(op->ptr, "gesture_mode");
- if (event_type == LEFTMOUSE) {
+ if (gesture_mode == GESTURE_MODAL_IN) {
/* zoom in:
* - 'cur' rect will be defined by the coordinates of the border region
* - just set the 'cur' rect to have the same coordinates as the border region
@@ -1063,7 +1062,7 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op)
v2d->cur.ymax= rect.ymax;
}
}
- else {
+ else /* if (gesture_mode == GESTURE_MODAL_OUT) */ {
/* zoom out:
* - the current 'cur' rect coordinates are going to end upwhere the 'rect' ones are,
* but the 'cur' rect coordinates will need to be adjusted to take in more of the view
@@ -1116,7 +1115,7 @@ void VIEW2D_OT_zoom_border(wmOperatorType *ot)
ot->poll= view_zoom_poll;
/* rna */
- RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX);
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 7e5aa2ad8f4..535dd5f1a62 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -2070,6 +2070,8 @@ int WM_border_select_modal(bContext *C, wmOperator *op, wmEvent *event)
break;
case GESTURE_MODAL_SELECT:
case GESTURE_MODAL_DESELECT:
+ case GESTURE_MODAL_IN:
+ case GESTURE_MODAL_OUT:
if(border_apply(C, op, event->val)) {
wm_gesture_end(C, op);
return OPERATOR_FINISHED;
@@ -2843,7 +2845,7 @@ void wm_operatortype_init(void)
}
-/* called in transform_ops.c, on each regeneration of keymaps */
+/* circleselect-like modal operators */
static void gesture_circle_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
@@ -2896,7 +2898,7 @@ static void gesture_circle_modal_keymap(wmKeyConfig *keyconf)
}
-/* called in transform_ops.c, on each regeneration of keymaps */
+/* borderselect-like modal operators */
static void gesture_border_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
@@ -2948,6 +2950,38 @@ static void gesture_border_modal_keymap(wmKeyConfig *keyconf)
WM_modalkeymap_assign(keymap, "VIEW3D_OT_zoom_border"); // XXX TODO: zoom border should perhaps map rightmouse to zoom out instead of in+cancel
}
+/* zoom to border modal operators */
+static void gesture_zoom_border_modal_keymap(wmKeyConfig *keyconf)
+{
+ static EnumPropertyItem modal_items[] = {
+ {GESTURE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
+ {GESTURE_MODAL_IN, "IN", 0, "In", ""},
+ {GESTURE_MODAL_OUT, "OUT", 0, "Out", ""},
+ {GESTURE_MODAL_BORDER_BEGIN, "BEGIN", 0, "Begin", ""},
+ {0, NULL, 0, NULL, NULL}};
+
+ wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Gesture Zoom Border");
+
+ /* this function is called for each spacetype, only needs to add map once */
+ if(keymap) return;
+
+ keymap= WM_modalkeymap_add(keyconf, "Gesture Zoom Border", modal_items);
+
+ /* items for modal map */
+ WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, GESTURE_MODAL_CANCEL);
+ WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, GESTURE_MODAL_CANCEL);
+
+ WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_BORDER_BEGIN);
+ WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, 0, 0, GESTURE_MODAL_IN);
+
+ WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_BORDER_BEGIN);
+ WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, 0, 0, GESTURE_MODAL_OUT);
+
+ /* assign map to operators */
+ WM_modalkeymap_assign(keymap, "VIEW2D_OT_zoom_border");
+ WM_modalkeymap_assign(keymap, "VIEW3D_OT_zoom_border");
+}
+
/* default keymap for windows and screens, only call once per WM */
void wm_window_keymap(wmKeyConfig *keyconf)
{
@@ -3035,6 +3069,7 @@ void wm_window_keymap(wmKeyConfig *keyconf)
gesture_circle_modal_keymap(keyconf);
gesture_border_modal_keymap(keyconf);
+ gesture_zoom_border_modal_keymap(keyconf);
}
/* Generic itemf's for operators that take library args */
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index 5f6af878976..59dddbaea5b 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -283,6 +283,9 @@
#define GESTURE_MODAL_BORDER_BEGIN 8 /* border select, activate, use release to detect which button */
+#define GESTURE_MODAL_IN 9
+#define GESTURE_MODAL_OUT 10
+
#endif /* WM_EVENT_TYPES_H */