Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/interface/view2d_ops.c
| Context not available. | |||||
| #include "BLI_blenlib.h" | #include "BLI_blenlib.h" | ||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "BLI_math_base.h" | #include "BLI_math_base.h" | ||||
| #include "BLI_math_vector.h" | |||||
| #include "BKE_context.h" | #include "BKE_context.h" | ||||
| Context not available. | |||||
| } | } | ||||
| else if (event->type == MOUSEMOVE) { | else if (event->type == MOUSEMOVE) { | ||||
| float dx, dy; | float dx, dy; | ||||
| float zoomfac = 0.01f; | |||||
| /* some view2d's (graph) don't have min/max zoom, or extreme ones */ | |||||
| if (v2d->maxzoom > 0.0f) { | |||||
| zoomfac = clamp_f(0.001f * v2d->maxzoom, 0.001f, 0.01f); | |||||
| } | |||||
| /* calculate new delta transform, based on zooming mode */ | /* calculate new delta transform, based on zooming mode */ | ||||
| if (U.viewzoom == USER_ZOOM_SCALE) { | if (U.viewzoom == USER_ZOOM_SCALE) { | ||||
| /* 'scale' zooming */ | /* 'scale' zooming */ | ||||
| float dist; | float dist; | ||||
| float len_old[2]; | |||||
| float len_new[2]; | |||||
| /* x-axis transform */ | /* x-axis transform */ | ||||
| dist = BLI_rcti_size_x(&v2d->mask) / 2.0f; | dist = BLI_rcti_size_x(&v2d->mask) / 2.0f; | ||||
| dx = 1.0f - (fabsf(vzd->lastx - vzd->ar->winrct.xmin - dist) + 2.0f) / | len_old[0] = fabsf(vzd->lastx - vzd->ar->winrct.xmin - dist); | ||||
| (fabsf(event->mval[0] - dist) + 2.0f); | len_new[0] = fabsf(event->x - vzd->ar->winrct.xmin - dist); | ||||
| dx *= 0.5f * BLI_rctf_size_x(&v2d->cur); | |||||
| len_old[0] *= zoomfac * BLI_rctf_size_x(&v2d->cur); | |||||
| len_new[0] *= zoomfac * BLI_rctf_size_x(&v2d->cur); | |||||
| /* y-axis transform */ | /* y-axis transform */ | ||||
| dist = BLI_rcti_size_y(&v2d->mask) / 2.0f; | dist = BLI_rcti_size_y(&v2d->mask) / 2.0f; | ||||
| dy = 1.0f - (fabsf(vzd->lasty - vzd->ar->winrct.ymin - dist) + 2.0f) / | len_old[1] = fabsf(vzd->lasty - vzd->ar->winrct.ymin - dist); | ||||
| (fabsf(event->mval[1] - dist) + 2.0f); | len_new[1] = fabsf(event->y - vzd->ar->winrct.ymin - dist); | ||||
| dy *= 0.5f * BLI_rctf_size_y(&v2d->cur); | |||||
| len_old[1] *= zoomfac * BLI_rctf_size_y(&v2d->cur); | |||||
| len_new[1] *= zoomfac * BLI_rctf_size_y(&v2d->cur); | |||||
| /* Calculate distance */ | |||||
| if (v2d->keepzoom & V2D_KEEPASPECT) { | |||||
| dist = len_v2(len_new) - len_v2(len_old); | |||||
| dx = dy = dist; | |||||
| } | |||||
| else { | |||||
| dx = len_new[0] - len_old[0]; | |||||
| dy = len_new[1] - len_old[1]; | |||||
| } | |||||
| } | } | ||||
| else { | else { | ||||
| /* 'continuous' or 'dolly' */ | /* 'continuous' or 'dolly' */ | ||||
| float fac, zoomfac = 0.01f; | float fac; | ||||
| /* some view2d's (graph) don't have min/max zoom, or extreme ones */ | |||||
| if (v2d->maxzoom > 0.0f) { | |||||
| zoomfac = clamp_f(0.001f * v2d->maxzoom, 0.001f, 0.01f); | |||||
| } | |||||
| /* x-axis transform */ | /* x-axis transform */ | ||||
| fac = zoomfac * (event->x - vzd->lastx); | fac = zoomfac * (event->x - vzd->lastx); | ||||
| dx = fac * BLI_rctf_size_x(&v2d->cur); | dx = fac * BLI_rctf_size_x(&v2d->cur); | ||||
| Context not available. | |||||
| /* y-axis transform */ | /* y-axis transform */ | ||||
| fac = zoomfac * (event->y - vzd->lasty); | fac = zoomfac * (event->y - vzd->lasty); | ||||
| dy = fac * BLI_rctf_size_y(&v2d->cur); | dy = fac * BLI_rctf_size_y(&v2d->cur); | ||||
| /* Only respect user setting zoom axis if the view does not have any zoom restrictions | |||||
| * any will be scaled uniformly */ | |||||
| if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0 && (v2d->keepzoom & V2D_LOCKZOOM_Y) == 0 && | |||||
| (v2d->keepzoom & V2D_KEEPASPECT)) { | |||||
| if (U.uiflag & USER_ZOOM_HORIZ) { | |||||
| dy = 0; | |||||
| } | |||||
| else { | |||||
| dx = 0; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| /* support zoom to always zoom entirely - the v2d code uses portrait or | /* support zoom to always zoom entirely - the v2d code uses portrait or | ||||
| Context not available. | |||||