Make zoom direction consistent all over the editors
Was discussed in De Balie with lots of artists and we agreed it makes more sense to behave this way
This commit is contained in:
@@ -827,6 +827,11 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
|
||||
dx = RNA_float_get(op->ptr, "deltax");
|
||||
dy = RNA_float_get(op->ptr, "deltay");
|
||||
|
||||
if (U.uiflag & USER_ZOOM_INVERT) {
|
||||
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();
|
||||
@@ -849,12 +854,12 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
|
||||
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;
|
||||
v2d->cur.xmin += ofs + dx;
|
||||
v2d->cur.xmax += ofs - dx;
|
||||
}
|
||||
else {
|
||||
v2d->cur.xmin -= dx;
|
||||
v2d->cur.xmax += dx;
|
||||
v2d->cur.xmin += dx;
|
||||
v2d->cur.xmax -= dx;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -868,12 +873,12 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
|
||||
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;
|
||||
v2d->cur.ymin += ofs + dy;
|
||||
v2d->cur.ymax += ofs - dy;
|
||||
}
|
||||
else {
|
||||
v2d->cur.ymin -= dy;
|
||||
v2d->cur.ymax += dy;
|
||||
v2d->cur.ymin += dy;
|
||||
v2d->cur.ymax -= dy;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -941,7 +946,7 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
/* As we have only 1D information (magnify value), feed both axes
|
||||
* with magnify information that is stored in x axis
|
||||
*/
|
||||
fac = 0.01f * (event->prevx - event->x);
|
||||
fac = 0.01f * (event->x - event->prevx);
|
||||
dx = fac * BLI_rctf_size_x(&v2d->cur) / 10.0f;
|
||||
dy = fac * BLI_rctf_size_y(&v2d->cur) / 10.0f;
|
||||
|
||||
@@ -1044,11 +1049,6 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
}
|
||||
|
||||
/* set transform amount, and add current deltas to stored total delta (for redo) */
|
||||
if (U.uiflag & USER_ZOOM_INVERT) {
|
||||
dx *= -1;
|
||||
dy *= -1;
|
||||
}
|
||||
|
||||
RNA_float_set(op->ptr, "deltax", dx);
|
||||
RNA_float_set(op->ptr, "deltay", dy);
|
||||
|
||||
|
||||
@@ -514,9 +514,14 @@ static int view_zoom_exec(bContext *C, wmOperator *op)
|
||||
static int view_zoom_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
if (event->type == MOUSEZOOM) {
|
||||
float factor;
|
||||
float delta, factor;
|
||||
|
||||
factor = 1.0f + (event->x - event->prevx + event->y - event->prevy) / 300.0f;
|
||||
delta = event->x - event->prevx + event->y - event->prevy;
|
||||
|
||||
if (U.uiflag & USER_ZOOM_INVERT)
|
||||
delta *= -1;
|
||||
|
||||
factor = 1.0f + delta / 300.0f;
|
||||
RNA_float_set(op->ptr, "factor", factor);
|
||||
|
||||
sclip_zoom_set_factor_exec(C, event, factor);
|
||||
@@ -533,11 +538,16 @@ static int view_zoom_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
static int view_zoom_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
ViewZoomData *vpd = op->customdata;
|
||||
float factor;
|
||||
float delta, factor;
|
||||
|
||||
switch (event->type) {
|
||||
case MOUSEMOVE:
|
||||
factor = 1.0f + (vpd->x - event->x + vpd->y - event->y) / 300.0f;
|
||||
delta = event->x - vpd->x + event->y - vpd->y;
|
||||
|
||||
if (U.uiflag & USER_ZOOM_INVERT)
|
||||
delta *= -1;
|
||||
|
||||
factor = 1.0f + delta / 300.0f;
|
||||
RNA_float_set(op->ptr, "factor", factor);
|
||||
sclip_zoom_set(C, vpd->zoom * factor, vpd->location);
|
||||
ED_region_tag_redraw(CTX_wm_region(C));
|
||||
|
||||
@@ -430,11 +430,16 @@ static int image_view_zoom_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
if (event->type == MOUSEZOOM) {
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
float factor, location[2];
|
||||
float delta, factor, location[2];
|
||||
|
||||
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &location[0], &location[1]);
|
||||
|
||||
factor = 1.0f + (event->x - event->prevx + event->y - event->prevy) / 300.0f;
|
||||
delta = event->x - event->prevx + event->y - event->prevy;
|
||||
|
||||
if (U.uiflag & USER_ZOOM_INVERT)
|
||||
delta *= -1;
|
||||
|
||||
factor = 1.0f + delta / 300.0f;
|
||||
RNA_float_set(op->ptr, "factor", factor);
|
||||
sima_zoom_set(sima, ar, sima->zoom * factor, location);
|
||||
ED_region_tag_redraw(CTX_wm_region(C));
|
||||
@@ -452,11 +457,16 @@ static int image_view_zoom_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
ViewZoomData *vpd = op->customdata;
|
||||
float factor;
|
||||
float delta, factor;
|
||||
|
||||
switch (event->type) {
|
||||
case MOUSEMOVE:
|
||||
factor = 1.0f + (vpd->x - event->x + vpd->y - event->y) / 300.0f;
|
||||
delta = event->x - vpd->x + event->y - vpd->y;
|
||||
|
||||
if (U.uiflag & USER_ZOOM_INVERT)
|
||||
delta *= -1;
|
||||
|
||||
factor = 1.0f + delta / 300.0f;
|
||||
RNA_float_set(op->ptr, "factor", factor);
|
||||
sima_zoom_set(sima, ar, vpd->zoom * factor, vpd->location);
|
||||
ED_region_tag_redraw(CTX_wm_region(C));
|
||||
|
||||
@@ -1636,7 +1636,7 @@ static void viewzoom_apply(ViewOpsData *vod, int x, int y, const short viewzoom,
|
||||
if (use_cam_zoom) {
|
||||
float delta;
|
||||
delta = (x - vod->origx + y - vod->origy) / 10.0f;
|
||||
vod->rv3d->camzoom = vod->camzoom0 + (zoom_invert ? delta : -delta);
|
||||
vod->rv3d->camzoom = vod->camzoom0 + (zoom_invert ? -delta : delta);
|
||||
|
||||
CLAMP(vod->rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX);
|
||||
}
|
||||
@@ -1691,11 +1691,11 @@ static void viewzoom_apply(ViewOpsData *vod, int x, int y, const short viewzoom,
|
||||
if (use_cam_zoom) {
|
||||
/* zfac is ignored in this case, see below */
|
||||
#if 0
|
||||
zfac = vod->camzoom0 * (2.0f * ((len2 / len1) - 1.0f) + 1.0f) / vod->rv3d->camzoom;
|
||||
zfac = vod->camzoom0 * (2.0f * ((len1 / len2) - 1.0f) + 1.0f) / vod->rv3d->camzoom;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
zfac = vod->dist0 * (2.0f * ((len2 / len1) - 1.0f) + 1.0f) / vod->rv3d->dist;
|
||||
zfac = vod->dist0 * (2.0f * ((len1 / len2) - 1.0f) + 1.0f) / vod->rv3d->dist;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1888,12 +1888,12 @@ static int viewzoom_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
|
||||
if (U.uiflag & USER_ZOOM_HORIZ) {
|
||||
vod->origx = vod->oldx = event->x;
|
||||
viewzoom_apply(vod, event->prevx, event->prevy, USER_ZOOM_DOLLY, FALSE);
|
||||
viewzoom_apply(vod, event->prevx, event->prevy, USER_ZOOM_DOLLY, (U.uiflag & USER_ZOOM_INVERT) == 0);
|
||||
}
|
||||
else {
|
||||
/* Set y move = x move as MOUSEZOOM uses only x axis to pass magnification value */
|
||||
vod->origy = vod->oldy = vod->origy + event->x - event->prevx;
|
||||
viewzoom_apply(vod, event->prevx, event->prevy, USER_ZOOM_DOLLY, FALSE);
|
||||
viewzoom_apply(vod, event->prevx, event->prevy, USER_ZOOM_DOLLY, (U.uiflag & USER_ZOOM_INVERT) == 0);
|
||||
}
|
||||
ED_view3d_depth_tag_update(vod->rv3d);
|
||||
|
||||
@@ -1971,7 +1971,7 @@ static void viewdolly_apply(ViewOpsData *vod, int x, int y, const short zoom_inv
|
||||
if (zoom_invert)
|
||||
SWAP(float, len1, len2);
|
||||
|
||||
zfac = 1.0f + ((len2 - len1) * 0.01f * vod->rv3d->dist);
|
||||
zfac = 1.0f + ((len1 - len2) * 0.01f * vod->rv3d->dist);
|
||||
}
|
||||
|
||||
if (zfac != 1.0f)
|
||||
@@ -2107,13 +2107,13 @@ static int viewdolly_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
|
||||
if (U.uiflag & USER_ZOOM_HORIZ) {
|
||||
vod->origx = vod->oldx = event->x;
|
||||
viewdolly_apply(vod, event->prevx, event->prevy, FALSE);
|
||||
viewdolly_apply(vod, event->prevx, event->prevy, (U.uiflag & USER_ZOOM_INVERT) == 0);
|
||||
}
|
||||
else {
|
||||
|
||||
/* Set y move = x move as MOUSEZOOM uses only x axis to pass magnification value */
|
||||
vod->origy = vod->oldy = vod->origy + event->x - event->prevx;
|
||||
viewdolly_apply(vod, event->prevx, event->prevy, FALSE);
|
||||
viewdolly_apply(vod, event->prevx, event->prevy, (U.uiflag & USER_ZOOM_INVERT) == 0);
|
||||
}
|
||||
ED_view3d_depth_tag_update(vod->rv3d);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user