diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-05-23 11:50:35 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-05-23 11:51:11 +0300 |
commit | e92baab34893f5a5b3d6f59238fdb7855b72d7fe (patch) | |
tree | 457da9be1190b111803eb4a92e7b9384f243cfcd /source/blender/editors/interface/view2d_ops.c | |
parent | 37b5c52f111d4fe6e024c1cd66ba965b3b6bd83d (diff) | |
parent | d886e32270edb8273ec48a41d1bdcef1fe802835 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/editors/interface/view2d_ops.c')
-rw-r--r-- | source/blender/editors/interface/view2d_ops.c | 440 |
1 files changed, 220 insertions, 220 deletions
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 4cd3aad8103..fbc8fe790c9 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -4,7 +4,7 @@ * 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. + * 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 @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2008 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation, Joshua Leung * * ***** END GPL LICENSE BLOCK ***** @@ -73,7 +73,7 @@ static int view2d_poll(bContext *C) */ /* ------------------ Shared 'core' stuff ---------------------- */ - + /* temp customdata for operator */ typedef struct v2dViewPanData { bScreen *sc; /* screen where view pan was initiated */ @@ -87,10 +87,10 @@ typedef struct v2dViewPanData { int startx, starty; /* mouse x/y values in window when operator was initiated */ int lastx, lasty; /* previous x/y values of mouse in window */ int invoke_event; /* event starting pan, for modal exit */ - + short in_scroller; /* for MMB in scrollers (old feature in past, but now not that useful) */ } v2dViewPanData; - + /* initialize panning customdata */ static int view_pan_init(bContext *C, wmOperator *op) { @@ -98,32 +98,32 @@ static int view_pan_init(bContext *C, wmOperator *op) v2dViewPanData *vpd; View2D *v2d; float winx, winy; - + /* regions now have v2d-data by default, so check for region */ if (ar == NULL) return 0; - + /* check if panning is allowed at all */ v2d = &ar->v2d; if ((v2d->keepofs & V2D_LOCKOFS_X) && (v2d->keepofs & V2D_LOCKOFS_Y)) return 0; - + /* set custom-data for operator */ vpd = MEM_callocN(sizeof(v2dViewPanData), "v2dViewPanData"); op->customdata = vpd; - + /* set pointers to owners */ vpd->sc = CTX_wm_screen(C); vpd->sa = CTX_wm_area(C); vpd->v2d = v2d; vpd->ar = ar; - + /* calculate translation factor - based on size of view */ winx = (float)(BLI_rcti_size_x(&ar->winrct) + 1); winy = (float)(BLI_rcti_size_y(&ar->winrct) + 1); vpd->facx = (BLI_rctf_size_x(&v2d->cur)) / winx; vpd->facy = (BLI_rctf_size_y(&v2d->cur)) / winy; - + return 1; } @@ -151,11 +151,11 @@ static int view_pan_poll(bContext *C) static void view_pan_apply_ex(bContext *C, v2dViewPanData *vpd, float dx, float dy) { View2D *v2d = vpd->v2d; - + /* calculate amount to move view by */ dx *= vpd->facx; dy *= vpd->facy; - + /* only move view on an axis if change is allowed */ if ((v2d->keepofs & V2D_LOCKOFS_X) == 0) { v2d->cur.xmin += dx; @@ -165,10 +165,10 @@ static void view_pan_apply_ex(bContext *C, v2dViewPanData *vpd, float dx, float v2d->cur.ymin += dy; v2d->cur.ymax += dy; } - + /* validate that view is in valid configuration after this operation */ UI_view2d_curRect_validate(v2d); - + /* don't rebuild full tree in outliner, since we're just changing our view */ ED_region_tag_redraw_no_rebuild(vpd->ar); @@ -195,8 +195,8 @@ static void view_pan_exit(wmOperator *op) MEM_freeN(op->customdata); op->customdata = NULL; } -} - +} + /* ------------------ Modal Drag Version (1) ---------------------- */ /* for 'redo' only, with no user input */ @@ -204,7 +204,7 @@ static int view_pan_exec(bContext *C, wmOperator *op) { if (!view_pan_init(C, op)) return OPERATOR_CANCELLED; - + view_pan_apply(C, op); view_pan_exit(op); return OPERATOR_FINISHED; @@ -216,38 +216,38 @@ static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event) wmWindow *window = CTX_wm_window(C); v2dViewPanData *vpd; View2D *v2d; - + /* set up customdata */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + vpd = op->customdata; v2d = vpd->v2d; - + /* set initial settings */ vpd->startx = vpd->lastx = event->x; vpd->starty = vpd->lasty = event->y; vpd->invoke_event = event->type; - + if (event->type == MOUSEPAN) { RNA_int_set(op->ptr, "deltax", event->prevx - event->x); RNA_int_set(op->ptr, "deltay", event->prevy - event->y); - + view_pan_apply(C, op); view_pan_exit(op); return OPERATOR_FINISHED; } - + RNA_int_set(op->ptr, "deltax", 0); RNA_int_set(op->ptr, "deltay", 0); - + if (v2d->keepofs & V2D_LOCKOFS_X) WM_cursor_modal_set(window, BC_NS_SCROLLCURSOR); else if (v2d->keepofs & V2D_LOCKOFS_Y) WM_cursor_modal_set(window, BC_EW_SCROLLCURSOR); else WM_cursor_modal_set(window, BC_NSEW_SCROLLCURSOR); - + /* add temp handler */ WM_event_add_modal_handler(C, op); @@ -258,7 +258,7 @@ static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event) static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) { v2dViewPanData *vpd = op->customdata; - + /* execute the events */ switch (event->type) { case MOUSEMOVE: @@ -266,10 +266,10 @@ static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) /* calculate new delta transform, then store mouse-coordinates for next-time */ RNA_int_set(op->ptr, "deltax", (vpd->lastx - event->x)); RNA_int_set(op->ptr, "deltay", (vpd->lasty - event->y)); - + vpd->lastx = event->x; vpd->lasty = event->y; - + view_pan_apply(C, op); break; } @@ -281,7 +281,7 @@ static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) /* calculate overall delta mouse-movement for redo */ RNA_int_set(op->ptr, "deltax", (vpd->startx - vpd->lastx)); RNA_int_set(op->ptr, "deltay", (vpd->starty - vpd->lasty)); - + view_pan_exit(op); WM_cursor_modal_restore(CTX_wm_window(C)); WM_operator_name_call(C, "VIEW2D_OT_zoom", WM_OP_INVOKE_DEFAULT, NULL); @@ -294,10 +294,10 @@ static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) /* calculate overall delta mouse-movement for redo */ RNA_int_set(op->ptr, "deltax", (vpd->startx - vpd->lastx)); RNA_int_set(op->ptr, "deltay", (vpd->starty - vpd->lasty)); - + view_pan_exit(op); WM_cursor_modal_restore(CTX_wm_window(C)); - + return OPERATOR_FINISHED; } } @@ -318,16 +318,16 @@ static void VIEW2D_OT_pan(wmOperatorType *ot) ot->name = "Pan View"; ot->description = "Pan the view"; ot->idname = "VIEW2D_OT_pan"; - + /* api callbacks */ ot->exec = view_pan_exec; ot->invoke = view_pan_invoke; ot->modal = view_pan_modal; ot->cancel = view_pan_cancel; - + /* operator is modal */ ot->flag = OPTYPE_BLOCKING | OPTYPE_GRAB_CURSOR; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -339,26 +339,26 @@ static void VIEW2D_OT_pan(wmOperatorType *ot) static int view_scrollright_exec(bContext *C, wmOperator *op) { v2dViewPanData *vpd; - + /* initialize default settings (and validate if ok to run) */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* also, check if can pan in horizontal axis */ vpd = op->customdata; if (vpd->v2d->keepofs & V2D_LOCKOFS_X) { view_pan_exit(op); return OPERATOR_PASS_THROUGH; } - + /* set RNA-Props - only movement in positive x-direction */ RNA_int_set(op->ptr, "deltax", 20); RNA_int_set(op->ptr, "deltay", 0); - + /* apply movement, then we're done */ view_pan_apply(C, op); view_pan_exit(op); - + return OPERATOR_FINISHED; } @@ -368,10 +368,10 @@ static void VIEW2D_OT_scroll_right(wmOperatorType *ot) ot->name = "Scroll Right"; ot->description = "Scroll the view right"; ot->idname = "VIEW2D_OT_scroll_right"; - + /* api callbacks */ ot->exec = view_scrollright_exec; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -383,26 +383,26 @@ static void VIEW2D_OT_scroll_right(wmOperatorType *ot) static int view_scrollleft_exec(bContext *C, wmOperator *op) { v2dViewPanData *vpd; - + /* initialize default settings (and validate if ok to run) */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* also, check if can pan in horizontal axis */ vpd = op->customdata; if (vpd->v2d->keepofs & V2D_LOCKOFS_X) { view_pan_exit(op); return OPERATOR_PASS_THROUGH; } - + /* set RNA-Props - only movement in negative x-direction */ RNA_int_set(op->ptr, "deltax", -20); RNA_int_set(op->ptr, "deltay", 0); - + /* apply movement, then we're done */ view_pan_apply(C, op); view_pan_exit(op); - + return OPERATOR_FINISHED; } @@ -412,10 +412,10 @@ static void VIEW2D_OT_scroll_left(wmOperatorType *ot) ot->name = "Scroll Left"; ot->description = "Scroll the view left"; ot->idname = "VIEW2D_OT_scroll_left"; - + /* api callbacks */ ot->exec = view_scrollleft_exec; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -426,32 +426,32 @@ static void VIEW2D_OT_scroll_left(wmOperatorType *ot) static int view_scrolldown_exec(bContext *C, wmOperator *op) { v2dViewPanData *vpd; - + /* initialize default settings (and validate if ok to run) */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* also, check if can pan in vertical axis */ vpd = op->customdata; if (vpd->v2d->keepofs & V2D_LOCKOFS_Y) { view_pan_exit(op); return OPERATOR_PASS_THROUGH; } - + /* set RNA-Props */ RNA_int_set(op->ptr, "deltax", 0); RNA_int_set(op->ptr, "deltay", -40); - + PropertyRNA *prop = RNA_struct_find_property(op->ptr, "page"); if (RNA_property_is_set(op->ptr, prop) && RNA_property_boolean_get(op->ptr, prop)) { ARegion *ar = CTX_wm_region(C); RNA_int_set(op->ptr, "deltay", ar->v2d.mask.ymin - ar->v2d.mask.ymax); } - + /* apply movement, then we're done */ view_pan_apply(C, op); view_pan_exit(op); - + return OPERATOR_FINISHED; } @@ -461,10 +461,10 @@ static void VIEW2D_OT_scroll_down(wmOperatorType *ot) ot->name = "Scroll Down"; ot->description = "Scroll the view down"; ot->idname = "VIEW2D_OT_scroll_down"; - + /* api callbacks */ ot->exec = view_scrolldown_exec; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -477,32 +477,32 @@ static void VIEW2D_OT_scroll_down(wmOperatorType *ot) static int view_scrollup_exec(bContext *C, wmOperator *op) { v2dViewPanData *vpd; - + /* initialize default settings (and validate if ok to run) */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* also, check if can pan in vertical axis */ vpd = op->customdata; if (vpd->v2d->keepofs & V2D_LOCKOFS_Y) { view_pan_exit(op); return OPERATOR_PASS_THROUGH; } - + /* set RNA-Props */ RNA_int_set(op->ptr, "deltax", 0); RNA_int_set(op->ptr, "deltay", 40); - + PropertyRNA *prop = RNA_struct_find_property(op->ptr, "page"); if (RNA_property_is_set(op->ptr, prop) && RNA_property_boolean_get(op->ptr, prop)) { ARegion *ar = CTX_wm_region(C); RNA_int_set(op->ptr, "deltay", BLI_rcti_size_y(&ar->v2d.mask)); } - + /* apply movement, then we're done */ view_pan_apply(C, op); view_pan_exit(op); - + return OPERATOR_FINISHED; } @@ -512,10 +512,10 @@ static void VIEW2D_OT_scroll_up(wmOperatorType *ot) ot->name = "Scroll Up"; ot->description = "Scroll the view up"; ot->idname = "VIEW2D_OT_scroll_up"; - + /* api callbacks */ ot->exec = view_scrollup_exec; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -582,24 +582,24 @@ static int view_zoomdrag_init(bContext *C, wmOperator *op) ARegion *ar = CTX_wm_region(C); v2dViewZoomData *vzd; View2D *v2d; - + /* regions now have v2d-data by default, so check for region */ if (ar == NULL) return 0; v2d = &ar->v2d; - + /* check that 2d-view is zoomable */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y)) return 0; - + /* set custom-data for operator */ vzd = MEM_callocN(sizeof(v2dViewZoomData), "v2dViewZoomData"); op->customdata = vzd; - + /* set pointers to owners */ vzd->v2d = v2d; vzd->ar = ar; - + return 1; } @@ -608,7 +608,7 @@ static int view_zoom_poll(bContext *C) { ARegion *ar = CTX_wm_region(C); View2D *v2d; - + /* check if there's a region in context to work with */ if (ar == NULL) return false; @@ -618,15 +618,15 @@ static int view_zoom_poll(bContext *C) return false; v2d = &ar->v2d; - + /* check that 2d-view is zoomable */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y)) return false; - + /* view is zoomable */ return true; } - + /* apply transform to view (i.e. adjust 'cur' rect) */ static void view_zoomstep_apply_ex( bContext *C, v2dViewZoomData *vzd, const bool use_mousepos, @@ -639,7 +639,7 @@ static void view_zoomstep_apply_ex( const int snap_test = ED_region_snap_size_test(ar); /* calculate amount to move view by, ensuring symmetry so the - * old zoom level is restored after zooming back the same amount + * old zoom level is restored after zooming back the same amount */ if (facx >= 0.0f) { dx = BLI_rctf_size_x(&v2d->cur) * facx; @@ -761,40 +761,40 @@ static int view_zoomin_exec(bContext *C, wmOperator *op) /* check that there's an active region, as View2D data resides there */ if (!view_zoom_poll(C)) return OPERATOR_PASS_THROUGH; - + view_zoom_axis_lock_defaults(C, do_zoom_xy); /* set RNA-Props - zooming in by uniform factor */ RNA_float_set(op->ptr, "zoomfacx", do_zoom_xy[0] ? 0.0375f : 0.0f); RNA_float_set(op->ptr, "zoomfacy", do_zoom_xy[1] ? 0.0375f : 0.0f); - + /* apply movement, then we're done */ view_zoomstep_apply(C, op); - + view_zoomstep_exit(op); - + return OPERATOR_FINISHED; } static int view_zoomin_invoke(bContext *C, wmOperator *op, const wmEvent *event) { v2dViewZoomData *vzd; - + if (!view_zoomdrag_init(C, op)) return OPERATOR_PASS_THROUGH; - + vzd = op->customdata; - + if (U.uiflag & USER_ZOOM_TO_MOUSEPOS) { ARegion *ar = CTX_wm_region(C); - + /* store initial mouse position (in view space) */ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &vzd->mx_2d, &vzd->my_2d); } - + return view_zoomin_exec(C, op); } @@ -806,12 +806,12 @@ static void VIEW2D_OT_zoom_in(wmOperatorType *ot) ot->name = "Zoom In"; ot->description = "Zoom in the view"; ot->idname = "VIEW2D_OT_zoom_in"; - + /* api callbacks */ ot->invoke = view_zoomin_invoke; ot->exec = view_zoomin_exec; // XXX, needs view_zoomdrag_init called first. ot->poll = view_zoom_poll; - + /* rna - must keep these in sync with the other operators */ prop = RNA_def_float(ot->srna, "zoomfacx", 0, -FLT_MAX, FLT_MAX, "Zoom Factor X", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); @@ -827,39 +827,39 @@ static int view_zoomout_exec(bContext *C, wmOperator *op) /* check that there's an active region, as View2D data resides there */ if (!view_zoom_poll(C)) return OPERATOR_PASS_THROUGH; - + view_zoom_axis_lock_defaults(C, do_zoom_xy); /* set RNA-Props - zooming in by uniform factor */ RNA_float_set(op->ptr, "zoomfacx", do_zoom_xy[0] ? -0.0375f : 0.0f); RNA_float_set(op->ptr, "zoomfacy", do_zoom_xy[1] ? -0.0375f : 0.0f); - + /* apply movement, then we're done */ view_zoomstep_apply(C, op); view_zoomstep_exit(op); - + return OPERATOR_FINISHED; } static int view_zoomout_invoke(bContext *C, wmOperator *op, const wmEvent *event) { v2dViewZoomData *vzd; - + if (!view_zoomdrag_init(C, op)) return OPERATOR_PASS_THROUGH; vzd = op->customdata; - + if (U.uiflag & USER_ZOOM_TO_MOUSEPOS) { ARegion *ar = CTX_wm_region(C); - + /* store initial mouse position (in view space) */ - UI_view2d_region_to_view(&ar->v2d, + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &vzd->mx_2d, &vzd->my_2d); } - + return view_zoomout_exec(C, op); } @@ -871,12 +871,12 @@ static void VIEW2D_OT_zoom_out(wmOperatorType *ot) ot->name = "Zoom Out"; ot->description = "Zoom out the view"; ot->idname = "VIEW2D_OT_zoom_out"; - + /* api callbacks */ ot->invoke = view_zoomout_invoke; // ot->exec = view_zoomout_exec; // XXX, needs view_zoomdrag_init called first. ot->poll = view_zoom_poll; - + /* rna - must keep these in sync with the other operators */ prop = RNA_def_float(ot->srna, "zoomfacx", 0, -FLT_MAX, FLT_MAX, "Zoom Factor X", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); @@ -910,7 +910,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) dx *= -1; dy *= -1; } - + /* continuous zoom shouldn't move that fast... */ if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop? double time = PIL_check_seconds_timer(); @@ -918,7 +918,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) dx *= time_step * 0.5f; dy *= time_step * 0.5f; - + vzd->timer_lastdraw = time; } @@ -932,7 +932,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) float mval_fac = (vzd->mx_2d - v2d->cur.xmin) / BLI_rctf_size_x(&v2d->cur); float mval_faci = 1.0f - mval_fac; float ofs = (mval_fac * dx) - (mval_faci * dx); - + v2d->cur.xmin += ofs + dx; v2d->cur.xmax += ofs - dx; } @@ -951,7 +951,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) float mval_fac = (vzd->my_2d - v2d->cur.ymin) / BLI_rctf_size_y(&v2d->cur); float mval_faci = 1.0f - mval_fac; float ofs = (mval_fac * dy) - (mval_faci * dy); - + v2d->cur.ymin += ofs + dy; v2d->cur.ymax += ofs - dy; } @@ -961,7 +961,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) } } } - + /* validate that view is in valid configuration after this operation */ UI_view2d_curRect_validate(v2d); @@ -983,14 +983,14 @@ static void view_zoomdrag_exit(bContext *C, wmOperator *op) if (op->customdata) { v2dViewZoomData *vzd = op->customdata; - + if (vzd->timer) WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vzd->timer); - + MEM_freeN(op->customdata); op->customdata = NULL; } -} +} static void view_zoomdrag_cancel(bContext *C, wmOperator *op) { @@ -1002,7 +1002,7 @@ static int view_zoomdrag_exec(bContext *C, wmOperator *op) { if (!view_zoomdrag_init(C, op)) return OPERATOR_PASS_THROUGH; - + view_zoomdrag_apply(C, op); view_zoomdrag_exit(C, op); return OPERATOR_FINISHED; @@ -1014,22 +1014,22 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even wmWindow *window = CTX_wm_window(C); v2dViewZoomData *vzd; View2D *v2d; - + /* set up customdata */ if (!view_zoomdrag_init(C, op)) return OPERATOR_PASS_THROUGH; - + vzd = op->customdata; v2d = vzd->v2d; - + if (event->type == MOUSEZOOM || event->type == MOUSEPAN) { float dx, dy, fac; - + vzd->lastx = event->prevx; vzd->lasty = event->prevy; - + /* As we have only 1D information (magnify value), feed both axes - * with magnify information that is stored in x axis + * with magnify information that is stored in x axis */ fac = 0.01f * (event->prevx - event->x); dx = fac * BLI_rctf_size_x(&v2d->cur) / 10.0f; @@ -1046,26 +1046,26 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even } RNA_float_set(op->ptr, "deltax", dx); RNA_float_set(op->ptr, "deltay", dy); - + view_zoomdrag_apply(C, op); view_zoomdrag_exit(C, op); return OPERATOR_FINISHED; } - + /* set initial settings */ vzd->lastx = event->x; vzd->lasty = event->y; RNA_float_set(op->ptr, "deltax", 0); RNA_float_set(op->ptr, "deltay", 0); - + /* for modal exit test */ vzd->invoke_event = event->type; - + if (U.uiflag & USER_ZOOM_TO_MOUSEPOS) { ARegion *ar = CTX_wm_region(C); - + /* store initial mouse position (in view space) */ - UI_view2d_region_to_view(&ar->v2d, + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &vzd->mx_2d, &vzd->my_2d); } @@ -1076,7 +1076,7 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even WM_cursor_modal_set(window, BC_EW_SCROLLCURSOR); else WM_cursor_modal_set(window, BC_NSEW_SCROLLCURSOR); - + /* add temp handler */ WM_event_add_modal_handler(C, op); @@ -1094,24 +1094,24 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event { v2dViewZoomData *vzd = op->customdata; View2D *v2d = vzd->v2d; - + /* execute the events */ if (event->type == TIMER && event->customdata == vzd->timer) { view_zoomdrag_apply(C, op); } else if (event->type == MOUSEMOVE) { float dx, dy; - + /* calculate new delta transform, based on zooming mode */ if (U.viewzoom == USER_ZOOM_SCALE) { /* 'scale' zooming */ float dist; - + /* x-axis transform */ dist = BLI_rcti_size_x(&v2d->mask) / 2.0f; dx = 1.0f - (fabsf(vzd->lastx - vzd->ar->winrct.xmin - dist) + 2.0f) / (fabsf(event->mval[0] - dist) + 2.0f); dx *= 0.5f * BLI_rctf_size_x(&v2d->cur); - + /* y-axis transform */ dist = BLI_rcti_size_y(&v2d->mask) / 2.0f; dy = 1.0f - (fabsf(vzd->lasty - vzd->ar->winrct.ymin - dist) + 2.0f) / (fabsf(event->mval[1] - dist) + 2.0f); @@ -1120,21 +1120,21 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event else { /* 'continuous' or 'dolly' */ float fac, zoomfac = 0.01f; - + /* some view2d's (graph) don't have min/max zoom, or extreme ones */ if (v2d->maxzoom > 0.0f) zoomfac = CLAMPIS(0.001f * v2d->maxzoom, 0.001f, 0.01f); - + /* x-axis transform */ fac = zoomfac * (event->x - vzd->lastx); dx = fac * BLI_rctf_size_x(&v2d->cur); - + /* y-axis transform */ fac = zoomfac * (event->y - vzd->lasty); dy = fac * BLI_rctf_size_y(&v2d->cur); - + } - + /* support zoom to always zoom entirely - the v2d code uses portrait or landscape exceptions */ if (v2d->keepzoom & V2D_KEEPASPECT) { if (fabsf(dx) > fabsf(dy)) @@ -1142,14 +1142,14 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event else dx = dy; } - + /* set transform amount, and add current deltas to stored total delta (for redo) */ RNA_float_set(op->ptr, "deltax", dx); RNA_float_set(op->ptr, "deltay", dy); vzd->dx += dx; vzd->dy += dy; - + /* store mouse coordinates for next time, if not doing continuous zoom * - continuous zoom only depends on distance of mouse to starting point to determine rate of change */ @@ -1157,28 +1157,28 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event vzd->lastx = event->x; vzd->lasty = event->y; } - + /* apply zooming */ view_zoomdrag_apply(C, op); } else if (event->type == vzd->invoke_event || event->type == ESCKEY) { if (event->val == KM_RELEASE) { - + /* for redo, store the overall deltas - need to respect zoom-locks here... */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0) RNA_float_set(op->ptr, "deltax", vzd->dx); else RNA_float_set(op->ptr, "deltax", 0); - + if ((v2d->keepzoom & V2D_LOCKZOOM_Y) == 0) RNA_float_set(op->ptr, "deltay", vzd->dy); else RNA_float_set(op->ptr, "deltay", 0); - + /* free customdata */ view_zoomdrag_exit(C, op); WM_cursor_modal_restore(CTX_wm_window(C)); - + return OPERATOR_FINISHED; } } @@ -1193,18 +1193,18 @@ static void VIEW2D_OT_zoom(wmOperatorType *ot) ot->name = "Zoom 2D View"; ot->description = "Zoom in/out the view"; ot->idname = "VIEW2D_OT_zoom"; - + /* api callbacks */ ot->exec = view_zoomdrag_exec; ot->invoke = view_zoomdrag_invoke; ot->modal = view_zoomdrag_modal; ot->cancel = view_zoomdrag_cancel; - + ot->poll = view_zoom_poll; - + /* operator is repeatable */ ot->flag = OPTYPE_BLOCKING | OPTYPE_GRAB_CURSOR; - + /* rna - must keep these in sync with the other operators */ prop = RNA_def_float(ot->srna, "deltax", 0, -FLT_MAX, FLT_MAX, "Delta X", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); @@ -1225,7 +1225,7 @@ static void VIEW2D_OT_zoom(wmOperatorType *ot) * Currently, these key mappings are hardcoded, but it shouldn't be too important to * have custom keymappings for this... */ - + static int view_borderzoom_exec(bContext *C, wmOperator *op) { ARegion *ar = CTX_wm_region(C); @@ -1233,17 +1233,17 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op) rctf rect; rctf cur_new = v2d->cur; const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); - + /* convert coordinates of rect to 'tot' rect coordinates */ WM_operator_properties_border_to_rctf(op, &rect); UI_view2d_region_to_view_rctf(v2d, &rect, &rect); - + /* check if zooming in/out view */ const bool zoom_in = !RNA_boolean_get(op->ptr, "zoom_out"); - + if (zoom_in) { - /* zoom in: - * - 'cur' rect will be defined by the coordinates of the border region + /* 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 * if zoom is allowed to be changed */ @@ -1263,13 +1263,13 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op) * - calculate zoom factor, and adjust using center-point */ float zoom, center, size; - + /* TODO: is this zoom factor calculation valid? It seems to produce same results every time... */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0) { size = BLI_rctf_size_x(&cur_new); zoom = size / BLI_rctf_size_x(&rect); center = BLI_rctf_cent_x(&cur_new); - + cur_new.xmin = center - (size * zoom); cur_new.xmax = center + (size * zoom); } @@ -1277,16 +1277,16 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op) size = BLI_rctf_size_y(&cur_new); zoom = size / BLI_rctf_size_y(&rect); center = BLI_rctf_cent_y(&cur_new); - + cur_new.ymin = center - (size * zoom); cur_new.ymax = center + (size * zoom); } } - + UI_view2d_smooth_view(C, ar, &cur_new, smooth_viewtx); - + return OPERATOR_FINISHED; -} +} static void VIEW2D_OT_zoom_border(wmOperatorType *ot) { @@ -1294,15 +1294,15 @@ static void VIEW2D_OT_zoom_border(wmOperatorType *ot) ot->name = "Zoom to Border"; ot->description = "Zoom in the view to the nearest item contained in the border"; ot->idname = "VIEW2D_OT_zoom_border"; - + /* api callbacks */ ot->invoke = WM_gesture_border_invoke; ot->exec = view_borderzoom_exec; ot->modal = WM_gesture_border_modal; ot->cancel = WM_gesture_border_cancel; - + ot->poll = view_zoom_poll; - + /* rna */ WM_operator_properties_gesture_border_zoom(ot); } @@ -1575,17 +1575,17 @@ static void VIEW2D_OT_smoothview(wmOperatorType *ot) typedef struct v2dScrollerMove { View2D *v2d; /* View2D data that this operation affects */ ARegion *ar; /* region that the scroller is in */ - + short scroller; /* scroller that mouse is in ('h' or 'v') */ short zone; /* -1 is min zoomer, 0 is bar, 1 is max zoomer */ // XXX find some way to provide visual feedback of this (active color?) - + float fac; /* view adjustment factor, based on size of region */ float fac_round; /* for pixel rounding (avoid visible UI jitter) */ float delta; /* amount moved by mouse on axis of interest */ - + float scrollbarwidth; /* width of the scrollbar itself, used for page up/down clicks */ int scrollbar_orig; /* initial location of scrollbar x/y, mouse relative */ - + int lastx, lasty; /* previous mouse coordinates (in screen coordinates) for determining movement */ } v2dScrollerMove; @@ -1597,7 +1597,7 @@ typedef struct v2dScrollerMove { * \warning: The start of this struct must not change, so that it stays in sync with the 'real' version * For now, we don't need to have a separate (internal) header for structs like this... */ -struct View2DScrollers { +struct View2DScrollers { /* focus bubbles */ int vert_min, vert_max; /* vertical scrollbar */ int hor_min, hor_max; /* horizontal scrollbar */ @@ -1624,10 +1624,10 @@ enum { static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_min, int sh_max) { bool in_min, in_max, in_bar, out_min, out_max, in_view = 1; - - /* firstly, check if - * - 'bubble' fills entire scroller - * - 'bubble' completely out of view on either side + + /* firstly, check if + * - 'bubble' fills entire scroller + * - 'bubble' completely out of view on either side */ if ((sh_min <= sc_min) && (sh_max >= sc_max)) in_view = 0; if (sh_min == sh_max) { @@ -1638,12 +1638,12 @@ static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_ if (sh_max <= sc_min) in_view = 0; if (sh_min >= sc_max) in_view = 0; } - - + + if (in_view == 0) { return SCROLLHANDLE_BAR; } - + /* check if mouse is in or past either handle */ /* TODO: check if these extents are still valid or not */ in_max = ((mouse >= (sh_max - V2D_SCROLLER_HANDLE_SIZE)) && (mouse <= (sh_max + V2D_SCROLLER_HANDLE_SIZE))); @@ -1651,7 +1651,7 @@ static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_ in_bar = ((mouse < (sh_max - V2D_SCROLLER_HANDLE_SIZE)) && (mouse > (sh_min + V2D_SCROLLER_HANDLE_SIZE))); out_min = mouse < (sh_min - V2D_SCROLLER_HANDLE_SIZE); out_max = mouse > (sh_max + V2D_SCROLLER_HANDLE_SIZE); - + if (in_bar) return SCROLLHANDLE_BAR; else if (in_max) @@ -1662,10 +1662,10 @@ static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_ return SCROLLHANDLE_MIN_OUTSIDE; else if (out_max) return SCROLLHANDLE_MAX_OUTSIDE; - + /* unlikely to happen, though we just cover it in case */ return SCROLLHANDLE_BAR; -} +} /* initialize customdata for scroller manipulation operator */ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *event, short in_scroller) @@ -1676,11 +1676,11 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e View2D *v2d = &ar->v2d; rctf tot_cur_union; float mask_size; - + /* set custom-data for operator */ vsm = MEM_callocN(sizeof(v2dScrollerMove), "v2dScrollerMove"); op->customdata = vsm; - + /* set general data */ vsm->v2d = v2d; vsm->ar = ar; @@ -1689,7 +1689,7 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e /* store mouse-coordinates, and convert mouse/screen coordinates to region coordinates */ vsm->lastx = event->x; vsm->lasty = event->y; - /* 'zone' depends on where mouse is relative to bubble + /* 'zone' depends on where mouse is relative to bubble * - zooming must be allowed on this axis, otherwise, default to pan */ scrollers = UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); @@ -1711,7 +1711,7 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e vsm->zone = mouse_in_scroller_handle(event->mval[0], v2d->hor.xmin, v2d->hor.xmax, scrollers->hor_min, scrollers->hor_max); - + if ((v2d->keepzoom & V2D_LOCKZOOM_X) && ELEM(vsm->zone, SCROLLHANDLE_MIN, SCROLLHANDLE_MAX)) { /* default to scroll, as handles not usable */ vsm->zone = SCROLLHANDLE_BAR; @@ -1724,7 +1724,7 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e /* vertical scroller - calculate adjustment factor first */ mask_size = (float)BLI_rcti_size_y(&v2d->vert); vsm->fac = BLI_rctf_size_y(&tot_cur_union) / mask_size; - + /* pixel rounding */ vsm->fac_round = (BLI_rctf_size_y(&v2d->cur)) / (float)(BLI_rcti_size_y(&ar->winrct) + 1); @@ -1732,16 +1732,16 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e vsm->zone = mouse_in_scroller_handle(event->mval[1], v2d->vert.ymin, v2d->vert.ymax, scrollers->vert_min, scrollers->vert_max); - + if ((v2d->keepzoom & V2D_LOCKZOOM_Y) && ELEM(vsm->zone, SCROLLHANDLE_MIN, SCROLLHANDLE_MAX)) { /* default to scroll, as handles not usable */ vsm->zone = SCROLLHANDLE_BAR; } - + vsm->scrollbarwidth = scrollers->vert_max - scrollers->vert_min; vsm->scrollbar_orig = ((scrollers->vert_max + scrollers->vert_min) / 2) + ar->winrct.ymin; } - + UI_view2d_scrollers_free(scrollers); ED_region_tag_redraw_no_rebuild(ar); } @@ -1753,10 +1753,10 @@ static void scroller_activate_exit(bContext *C, wmOperator *op) v2dScrollerMove *vsm = op->customdata; vsm->v2d->scroll_ui &= ~(V2D_SCROLL_H_ACTIVE | V2D_SCROLL_V_ACTIVE); - + MEM_freeN(op->customdata); op->customdata = NULL; - + ED_region_tag_redraw_no_rebuild(CTX_wm_region(C)); } } @@ -1772,13 +1772,13 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) v2dScrollerMove *vsm = op->customdata; View2D *v2d = vsm->v2d; float temp; - + /* calculate amount to move view by */ temp = vsm->fac * vsm->delta; /* round to pixel */ temp = roundf(temp / vsm->fac_round) * vsm->fac_round; - + /* type of movement */ switch (vsm->zone) { case SCROLLHANDLE_MIN: @@ -1788,16 +1788,16 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) if ((vsm->scroller == 'v') && !(v2d->keepzoom & V2D_LOCKZOOM_Y)) v2d->cur.ymin -= temp; break; - + case SCROLLHANDLE_MAX: - + /* only expand view on axis if zoom is allowed */ if ((vsm->scroller == 'h') && !(v2d->keepzoom & V2D_LOCKZOOM_X)) v2d->cur.xmax += temp; if ((vsm->scroller == 'v') && !(v2d->keepzoom & V2D_LOCKZOOM_Y)) v2d->cur.ymax += temp; break; - + case SCROLLHANDLE_MIN_OUTSIDE: case SCROLLHANDLE_MAX_OUTSIDE: case SCROLLHANDLE_BAR: @@ -1812,12 +1812,12 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) v2d->cur.ymax += temp; } break; - + } - + /* validate that view is in valid configuration after this operation */ UI_view2d_curRect_validate(v2d); - + /* request updates to be done... */ ED_region_tag_redraw_no_rebuild(vsm->ar); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); @@ -1830,7 +1830,7 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *event) { v2dScrollerMove *vsm = op->customdata; - + /* execute the events */ switch (event->type) { case MOUSEMOVE: @@ -1858,11 +1858,11 @@ static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *e break; } } - + /* store previous coordinates */ vsm->lastx = event->x; vsm->lasty = event->y; - + scroller_activate_apply(C, op); break; } @@ -1875,12 +1875,12 @@ static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *e vsm->delta = -vsm->scrollbarwidth * 0.8f; else if (vsm->zone == SCROLLHANDLE_MAX_OUTSIDE) vsm->delta = vsm->scrollbarwidth * 0.8f; - + scroller_activate_apply(C, op); scroller_activate_exit(C, op); return OPERATOR_FINISHED; } - + /* otherwise, end the drag action */ if (vsm->lastx || vsm->lasty) { scroller_activate_exit(C, op); @@ -1901,18 +1901,18 @@ static int scroller_activate_invoke(bContext *C, wmOperator *op, const wmEvent * ARegion *ar = CTX_wm_region(C); View2D *v2d = &ar->v2d; short in_scroller = 0; - + /* check if mouse in scrollbars, if they're enabled */ in_scroller = UI_view2d_mouse_in_scrollers(ar, v2d, event->x, event->y); - + /* if in a scroller, init customdata then set modal handler which will catch mousedown to start doing useful stuff */ if (in_scroller) { v2dScrollerMove *vsm; - + /* initialize customdata */ scroller_activate_init(C, op, event, in_scroller); vsm = (v2dScrollerMove *)op->customdata; - + /* support for quick jump to location - gtk and qt do this on linux */ if (event->type == MIDDLEMOUSE) { switch (vsm->scroller) { @@ -1939,7 +1939,7 @@ static int scroller_activate_invoke(bContext *C, wmOperator *op, const wmEvent * vsm->zone = SCROLLHANDLE_BAR; } } - + /* check if zone is inappropriate (i.e. 'bar' but panning is banned), so cannot continue */ if (vsm->zone == SCROLLHANDLE_BAR) { if (((vsm->scroller == 'h') && (v2d->keepofs & V2D_LOCKOFS_X)) || @@ -1947,30 +1947,30 @@ static int scroller_activate_invoke(bContext *C, wmOperator *op, const wmEvent * { /* free customdata initialized */ scroller_activate_exit(C, op); - + /* can't catch this event for ourselves, so let it go to someone else? */ return OPERATOR_PASS_THROUGH; } } - + /* zone is also inappropriate if scroller is not visible... */ if (((vsm->scroller == 'h') && (v2d->scroll & (V2D_SCROLL_HORIZONTAL_FULLR))) || ((vsm->scroller == 'v') && (v2d->scroll & (V2D_SCROLL_VERTICAL_FULLR))) ) { /* free customdata initialized */ scroller_activate_exit(C, op); - + /* can't catch this event for ourselves, so let it go to someone else? */ /* XXX note: if handlers use mask rect to clip input, input will fail for this case */ return OPERATOR_PASS_THROUGH; } - + /* activate the scroller */ if (vsm->scroller == 'h') v2d->scroll_ui |= V2D_SCROLL_H_ACTIVE; else v2d->scroll_ui |= V2D_SCROLL_V_ACTIVE; - + /* still ok, so can add */ WM_event_add_modal_handler(C, op); return OPERATOR_RUNNING_MODAL; @@ -1991,7 +1991,7 @@ static void VIEW2D_OT_scroller_activate(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_BLOCKING; - + /* api callbacks */ ot->invoke = scroller_activate_invoke; ot->modal = scroller_activate_modal; @@ -2017,7 +2017,7 @@ static int reset_exec(bContext *C, wmOperator *UNUSED(op)) v2d->cur.xmax = v2d->cur.xmin + winx; v2d->cur.ymax = v2d->cur.ymin + winy; - + /* align */ if (v2d->align) { /* posx and negx flags are mutually exclusive, so watch out */ @@ -2053,7 +2053,7 @@ static int reset_exec(bContext *C, wmOperator *UNUSED(op)) /* request updates to be done... */ ED_region_tag_redraw(ar); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); - + UI_view2d_zoom_cache_reset(); return OPERATOR_FINISHED; @@ -2065,27 +2065,27 @@ static void VIEW2D_OT_reset(wmOperatorType *ot) ot->name = "Reset View"; ot->description = "Reset the view"; ot->idname = "VIEW2D_OT_reset"; - + /* api callbacks */ ot->exec = reset_exec; ot->poll = view2d_poll; } - + /* ********************************************************* */ /* Registration */ void ED_operatortypes_view2d(void) { WM_operatortype_append(VIEW2D_OT_pan); - + WM_operatortype_append(VIEW2D_OT_scroll_left); WM_operatortype_append(VIEW2D_OT_scroll_right); WM_operatortype_append(VIEW2D_OT_scroll_up); WM_operatortype_append(VIEW2D_OT_scroll_down); - + WM_operatortype_append(VIEW2D_OT_zoom_in); WM_operatortype_append(VIEW2D_OT_zoom_out); - + WM_operatortype_append(VIEW2D_OT_zoom); WM_operatortype_append(VIEW2D_OT_zoom_border); @@ -2094,7 +2094,7 @@ void ED_operatortypes_view2d(void) #endif WM_operatortype_append(VIEW2D_OT_smoothview); - + WM_operatortype_append(VIEW2D_OT_scroller_activate); WM_operatortype_append(VIEW2D_OT_reset); @@ -2112,15 +2112,15 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) /* pan/scroll */ WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MIDDLEMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0); - + WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MOUSEPAN, 0, 0, 0); - + WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_right", WHEELDOWNMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_left", WHEELUPMOUSE, KM_PRESS, KM_CTRL, 0); - + WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_down", WHEELDOWNMOUSE, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_up", WHEELUPMOUSE, KM_PRESS, KM_SHIFT, 0); - + #ifdef WITH_INPUT_NDOF WM_keymap_add_item(keymap, "VIEW2D_OT_ndof", NDOF_MOTION, 0, 0, 0); #endif @@ -2131,7 +2131,7 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_out", PADMINUS, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_in", PADPLUSKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MOUSEPAN, 0, KM_CTRL, 0); - + WM_keymap_verify_item(keymap, "VIEW2D_OT_smoothview", TIMER1, KM_ANY, KM_ANY, 0); /* scroll up/down - no modifiers, only when zoom fails */ @@ -2141,7 +2141,7 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) /* these may be necessary if vertical scroll is disallowed */ WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_right", WHEELDOWNMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_left", WHEELUPMOUSE, KM_PRESS, 0, 0); - + /* alternatives for page up/down to scroll */ #if 0 // XXX disabled, since this causes conflicts with hotkeys in animation editors /* scroll up/down may fall through to left/right */ @@ -2153,11 +2153,11 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_right", PAGEDOWNKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_left", PAGEUPKEY, KM_PRESS, KM_SHIFT, 0); #endif - + /* zoom - drag */ WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MOUSEZOOM, 0, 0, 0); - + /* borderzoom - drag */ WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_border", BKEY, KM_PRESS, KM_SHIFT, 0); @@ -2171,12 +2171,12 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MOUSEPAN, 0, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_down", WHEELDOWNMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_up", WHEELUPMOUSE, KM_PRESS, 0, 0); - + kmi = WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_down", PAGEDOWNKEY, KM_PRESS, 0, 0); RNA_boolean_set(kmi->ptr, "page", true); kmi = WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_up", PAGEUPKEY, KM_PRESS, 0, 0); RNA_boolean_set(kmi->ptr, "page", true); - + WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MOUSEZOOM, 0, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MOUSEPAN, 0, KM_CTRL, 0); |