Fix T86796: moving the cursor in the UV Editor does not take aspect into
account UV coords are scaled by aspects (see UVsToTransData). This also applies for the Cursor in the UV Editor which also means that for display and when the cursor coords are flushed (new 'recalcData_cursor_image' was added for this), these need to be converted each time. Maniphest Tasks: T86796 Differential Revision: https://developer.blender.org/D10817
This commit is contained in:
parent
a9cd90135a
commit
56df673be2
Notes:
blender-bot
2023-02-14 03:52:45 +01:00
Referenced by issue #86796, 2D Cursor "runs away" from mouse when dragging in UV Editor
|
@ -1644,6 +1644,21 @@ void animrecord_check_state(TransInfo *t, struct Object *ob)
|
|||
}
|
||||
}
|
||||
|
||||
static void recalcData_cursor_image(TransInfo *t)
|
||||
{
|
||||
TransDataContainer *tc = t->data_container;
|
||||
TransData *td = tc->data;
|
||||
float aspect_inv[2];
|
||||
|
||||
aspect_inv[0] = 1.0f / t->aspect[0];
|
||||
aspect_inv[1] = 1.0f / t->aspect[1];
|
||||
|
||||
td->loc[0] = td->loc[0] * aspect_inv[0];
|
||||
td->loc[1] = td->loc[1] * aspect_inv[1];
|
||||
|
||||
DEG_id_tag_update(&t->scene->id, ID_RECALC_COPY_ON_WRITE);
|
||||
}
|
||||
|
||||
static void recalcData_cursor(TransInfo *t)
|
||||
{
|
||||
DEG_id_tag_update(&t->scene->id, ID_RECALC_COPY_ON_WRITE);
|
||||
|
@ -1678,6 +1693,8 @@ void recalcData(TransInfo *t)
|
|||
recalcData_curve(t);
|
||||
break;
|
||||
case TC_CURSOR_IMAGE:
|
||||
recalcData_cursor_image(t);
|
||||
break;
|
||||
case TC_CURSOR_VIEW3D:
|
||||
recalcData_cursor(t);
|
||||
break;
|
||||
|
|
|
@ -56,6 +56,13 @@ void createTransCursor_image(TransInfo *t)
|
|||
}
|
||||
|
||||
td->flag = TD_SELECTED;
|
||||
|
||||
/* UV coords are scaled by aspects (see UVsToTransData). This also applies for the Cursor in the
|
||||
* UV Editor which also means that for display and when the cursor coords are flushed
|
||||
* (recalcData_cursor_image), these are converted each time. */
|
||||
cursor_location[0] = cursor_location[0] * t->aspect[0];
|
||||
cursor_location[1] = cursor_location[1] * t->aspect[1];
|
||||
|
||||
copy_v3_v3(td->center, cursor_location);
|
||||
td->ob = NULL;
|
||||
|
||||
|
|
Loading…
Reference in New Issue