Fix #89906: Consistent track pad zoom directions #111141
|
@ -6286,7 +6286,7 @@ static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, co
|
|||
hsv[2] = clamp_f(hsv[2] + 0.05f, 0.0f, 1.0f);
|
||||
}
|
||||
else {
|
||||
const float fac = 0.005 * (event->xy[1] - event->prev_xy[1]);
|
||||
const float fac = 0.005 * WM_event_absolute_delta_y(event) / UI_SCALE_FAC;
|
||||
hsv[2] = clamp_f(hsv[2] + fac, 0.0f, 1.0f);
|
||||
}
|
||||
|
||||
|
|
|
@ -696,7 +696,7 @@ static int edbm_bevel_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
}
|
||||
}
|
||||
else if (etype == MOUSEPAN) {
|
||||
float delta = 0.02f * (event->xy[1] - event->prev_xy[1]);
|
||||
float delta = 0.02f * WM_event_absolute_delta_y(event) / UI_SCALE_FAC;
|
||||
if (opdata->segments >= 1 && opdata->segments + delta < 1) {
|
||||
opdata->segments = 1;
|
||||
}
|
||||
|
|
|
@ -595,13 +595,13 @@ static int loopcut_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
break;
|
||||
case MOUSEPAN:
|
||||
if ((event->modifier & KM_ALT) == 0) {
|
||||
cuts += 0.02f * (event->xy[1] - event->prev_xy[1]);
|
||||
cuts += 0.02f * WM_event_absolute_delta_y(event) / UI_SCALE_FAC;
|
||||
if (cuts < 1 && lcd->cuts >= 1) {
|
||||
cuts = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
smoothness += 0.002f * (event->xy[1] - event->prev_xy[1]);
|
||||
smoothness += 0.002f * WM_event_absolute_delta_y(event) / UI_SCALE_FAC;
|
||||
}
|
||||
handled = true;
|
||||
break;
|
||||
|
|
|
@ -605,10 +605,20 @@ static int view_zoom_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
if (ELEM(event->type, MOUSEZOOM, MOUSEPAN)) {
|
||||
float delta, factor;
|
||||
|
||||
delta = event->prev_xy[0] - event->xy[0] + event->prev_xy[1] - event->xy[1];
|
||||
if (event->type == MOUSEPAN) {
|
||||
if (U.uiflag & USER_ZOOM_HORIZ) {
|
||||
delta = WM_event_absolute_delta_x(event);
|
||||
}
|
||||
else {
|
||||
delta = WM_event_absolute_delta_y(event);
|
||||
}
|
||||
|
||||
if (U.uiflag & USER_ZOOM_INVERT) {
|
||||
delta *= -1;
|
||||
if (U.uiflag & USER_ZOOM_INVERT) {
|
||||
delta *= -1.0f;
|
||||
}
|
||||
}
|
||||
else { /* MOUSEZOOM */
|
||||
delta = event->prev_xy[0] - event->xy[0];
|
||||
}
|
||||
|
||||
factor = 1.0f + delta / 300.0f;
|
||||
|
|
|
@ -597,10 +597,20 @@ static int image_view_zoom_invoke(bContext *C, wmOperator *op, const wmEvent *ev
|
|||
UI_view2d_region_to_view(
|
||||
®ion->v2d, event->mval[0], event->mval[1], &location[0], &location[1]);
|
||||
|
||||
delta = event->prev_xy[0] - event->xy[0] + event->prev_xy[1] - event->xy[1];
|
||||
if (event->type == MOUSEPAN) {
|
||||
if (U.uiflag & USER_ZOOM_HORIZ) {
|
||||
delta = WM_event_absolute_delta_x(event);
|
||||
}
|
||||
else {
|
||||
delta = WM_event_absolute_delta_y(event);
|
||||
}
|
||||
|
||||
if (U.uiflag & USER_ZOOM_INVERT) {
|
||||
delta *= -1;
|
||||
if (U.uiflag & USER_ZOOM_INVERT) {
|
||||
delta *= -1.0f;
|
||||
}
|
||||
}
|
||||
else { /* MOUSEZOOM */
|
||||
delta = event->prev_xy[0] - event->xy[0];
|
||||
}
|
||||
|
||||
factor = 1.0f + delta / 300.0f;
|
||||
|
|
|
@ -533,7 +533,7 @@ static void flyEvent(FlyInfo *fly, const wmEvent *event)
|
|||
|
||||
/* Speed adjusting with mouse-pan (track-pad). */
|
||||
case FLY_MODAL_SPEED: {
|
||||
float fac = 0.02f * (event->prev_xy[1] - event->xy[1]);
|
||||
float fac = 0.02f * WM_event_absolute_delta_y(event) / UI_SCALE_FAC;
|
||||
|
||||
/* allowing to brake immediate */
|
||||
if (fac > 0.0f && fly->speed < 0.0f) {
|
||||
|
|
|
@ -281,18 +281,17 @@ static int viewdolly_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
normalize_v3(vod->init.mousevec);
|
||||
}
|
||||
|
||||
if (event->type == MOUSEZOOM) {
|
||||
/* Bypass Zoom invert flag for track pads (pass false always) */
|
||||
|
||||
if (U.uiflag & USER_ZOOM_HORIZ) {
|
||||
vod->init.event_xy[0] = vod->prev.event_xy[0] = event->xy[0];
|
||||
if (ELEM(event->type, MOUSEZOOM, MOUSEPAN)) {
|
||||
int m_xy[2];
|
||||
if (event->type == MOUSEPAN) {
|
||||
m_xy[0] = event->xy[0] + WM_event_absolute_delta_x(event);
|
||||
m_xy[1] = event->xy[1] + WM_event_absolute_delta_y(event);
|
||||
}
|
||||
else {
|
||||
/* Set y move = x move as MOUSEZOOM uses only x axis to pass magnification value */
|
||||
vod->init.event_xy[1] = vod->prev.event_xy[1] = vod->init.event_xy[1] + event->xy[0] -
|
||||
event->prev_xy[0];
|
||||
else { /* MOUSEZOOM */
|
||||
m_xy[0] = event->prev_xy[0];
|
||||
m_xy[1] = event->xy[1] - (event->xy[0] - event->prev_xy[0]);
|
||||
}
|
||||
viewdolly_apply(vod, event->prev_xy, (U.uiflag & USER_ZOOM_INVERT) == 0);
|
||||
viewdolly_apply(vod, m_xy, (U.uiflag & USER_ZOOM_INVERT) == 0);
|
||||
|
||||
viewops_data_free(C, static_cast<ViewOpsData *>(op->customdata));
|
||||
op->customdata = nullptr;
|
||||
|
|
|
@ -347,13 +347,11 @@ static int viewrotate_invoke_impl(bContext * /*C*/,
|
|||
|
||||
if (event_code == VIEW_CONFIRM) {
|
||||
/* MOUSEROTATE performs orbital rotation, so y axis delta is set to 0 */
|
||||
const bool is_inverted = (event->flag & WM_EVENT_SCROLL_INVERT) &&
|
||||
(event->type != MOUSEROTATE);
|
||||
|
||||
int m_xy[2];
|
||||
if (is_inverted) {
|
||||
m_xy[0] = 2 * event->xy[0] - event->prev_xy[0];
|
||||
m_xy[1] = 2 * event->xy[1] - event->prev_xy[1];
|
||||
if (event->type == MOUSEPAN) {
|
||||
m_xy[0] = event->xy[0] + WM_event_absolute_delta_x(event);
|
||||
m_xy[1] = event->xy[1] + WM_event_absolute_delta_y(event);
|
||||
}
|
||||
else {
|
||||
copy_v2_v2_int(m_xy, event->prev_xy);
|
||||
|
|
|
@ -498,15 +498,16 @@ static int viewzoom_invoke_impl(bContext *C,
|
|||
else {
|
||||
eV3D_OpEvent event_code = ELEM(event->type, MOUSEZOOM, MOUSEPAN) ? VIEW_CONFIRM : VIEW_PASS;
|
||||
if (event_code == VIEW_CONFIRM) {
|
||||
if (U.uiflag & USER_ZOOM_HORIZ) {
|
||||
vod->init.event_xy[0] = vod->prev.event_xy[0] = xy[0];
|
||||
int m_xy[2];
|
||||
if (event->type == MOUSEPAN) {
|
||||
m_xy[0] = event->xy[0] + WM_event_absolute_delta_x(event);
|
||||
m_xy[1] = event->xy[1] + WM_event_absolute_delta_y(event);
|
||||
}
|
||||
else {
|
||||
/* Set y move = x move as MOUSEZOOM uses only x axis to pass magnification value */
|
||||
vod->init.event_xy[1] = vod->prev.event_xy[1] = vod->init.event_xy[1] + xy[0] -
|
||||
event->prev_xy[0];
|
||||
else { /* MOUSEZOOM */
|
||||
m_xy[0] = event->prev_xy[0];
|
||||
m_xy[1] = event->xy[1] - (event->xy[0] - event->prev_xy[0]);
|
||||
}
|
||||
viewzoom_apply(vod, event->prev_xy, USER_ZOOM_DOLLY, (U.uiflag & USER_ZOOM_INVERT) != 0);
|
||||
viewzoom_apply(vod, m_xy, USER_ZOOM_DOLLY, (U.uiflag & USER_ZOOM_INVERT) != 0);
|
||||
ED_view3d_camera_lock_autokey(vod->v3d, vod->rv3d, C, false, true);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
|
|
@ -1139,7 +1139,7 @@ int transformEvent(TransInfo *t, const wmEvent *event)
|
|||
case TFM_MODAL_PROPSIZE:
|
||||
/* MOUSEPAN usage... */
|
||||
if (t->flag & T_PROP_EDIT) {
|
||||
float fac = 1.0f + 0.005f * (event->xy[1] - event->prev_xy[1]);
|
||||
float fac = 1.0f + 0.005f * WM_event_absolute_delta_y(event) / UI_SCALE_FAC;
|
||||
t->prop_size *= fac;
|
||||
if (t->spacetype == SPACE_VIEW3D && t->persp != RV3D_ORTHO) {
|
||||
t->prop_size = max_ff(min_ff(t->prop_size, ((View3D *)t->view)->clip_end),
|
||||
|
|
Loading…
Reference in New Issue