diff options
-rw-r--r-- | source/blender/editors/transform/transform_convert.c | 17 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_convert_cursor.c | 7 |
2 files changed, 24 insertions, 0 deletions
diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c index dd577db01a3..c021c084a23 100644 --- a/source/blender/editors/transform/transform_convert.c +++ b/source/blender/editors/transform/transform_convert.c @@ -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; diff --git a/source/blender/editors/transform/transform_convert_cursor.c b/source/blender/editors/transform/transform_convert_cursor.c index e6a972bfc7c..67d85f9610b 100644 --- a/source/blender/editors/transform/transform_convert_cursor.c +++ b/source/blender/editors/transform/transform_convert_cursor.c @@ -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; |