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:
authorCampbell Barton <ideasman42@gmail.com>2016-05-06 21:22:48 +0300
committerCampbell Barton <ideasman42@gmail.com>2016-05-06 21:32:08 +0300
commite074554f8ffe16e5693c7f5ab33898f902166fad (patch)
treef01c1cec0094f4a8a6bb87fb330d28575b4ddf41 /source/blender/editors/space_image/image_ops.c
parentddbc351dd30f414dd5d8ceb1621c8c4cac3d7e43 (diff)
Image Editor: Add border zoom
Use Shift-B, UV border-select-pinned is now Ctrl-B. Patch from @rav66
Diffstat (limited to 'source/blender/editors/space_image/image_ops.c')
-rw-r--r--source/blender/editors/space_image/image_ops.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index ae5dcc4c73f..88bab733013 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -990,6 +990,62 @@ void IMAGE_OT_view_zoom_ratio(wmOperatorType *ot)
"Ratio", "Zoom ratio, 1.0 is 1:1, higher is zoomed in, lower is zoomed out", -FLT_MAX, FLT_MAX);
}
+/********************** view border-zoom operator *********************/
+
+static int image_view_zoom_border_exec(bContext *C, wmOperator *op)
+{
+ SpaceImage *sima = CTX_wm_space_image(C);
+ ARegion *ar = CTX_wm_region(C);
+ rctf bounds;
+ const int gesture_mode = RNA_int_get(op->ptr, "gesture_mode");
+
+ WM_operator_properties_border_to_rctf(op, &bounds);
+
+ UI_view2d_region_to_view_rctf(&ar->v2d, &bounds, &bounds);
+
+ const struct {
+ float xof;
+ float yof;
+ float zoom;
+ } sima_view_prev = {
+ .xof = sima->xof,
+ .yof = sima->yof,
+ .zoom = sima->zoom,
+ };
+
+ sima_zoom_set_from_bounds(sima, ar, &bounds);
+
+ /* zoom out */
+ if (gesture_mode == GESTURE_MODAL_OUT) {
+ sima->xof = sima_view_prev.xof + (sima->xof - sima_view_prev.xof);
+ sima->yof = sima_view_prev.yof + (sima->yof - sima_view_prev.yof);
+ sima->zoom = sima_view_prev.zoom * (sima_view_prev.zoom / sima->zoom);
+ }
+
+ ED_region_tag_redraw(ar);
+
+ return OPERATOR_FINISHED;
+}
+
+void IMAGE_OT_view_zoom_border(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Zoom to Border";
+ ot->description = "Zoom in the view to the nearest item contained in the border";
+ ot->idname = "IMAGE_OT_view_zoom_border";
+
+ /* api callbacks */
+ ot->invoke = WM_border_select_invoke;
+ ot->exec = image_view_zoom_border_exec;
+ ot->modal = WM_border_select_modal;
+ ot->cancel = WM_border_select_cancel;
+
+ ot->poll = space_image_main_region_poll;
+
+ /* rna */
+ WM_operator_properties_gesture_border(ot, false);
+}
+
/**************** load/replace/save callbacks ******************/
static void image_filesel(bContext *C, wmOperator *op, const char *path)
{