Commit: c74255181e59d21e8d580d1694bc15359bfa1e6d
Author: Campbell Barton
Date:   Fri Jun 26 15:45:09 2015 +1000
Branches: master
https://developer.blender.org/rBc74255181e59d21e8d580d1694bc15359bfa1e6d

Cleanup: transform aspect

Transform code had duplicate aspect checking,
now store aspect in TransInfo.aspect for reuse.

===================================================================

M       source/blender/editors/transform/transform.c
M       source/blender/editors/transform/transform.h
M       source/blender/editors/transform/transform_constraints.c
M       source/blender/editors/transform/transform_conversions.c
M       source/blender/editors/transform/transform_generics.c
M       source/blender/editors/transform/transform_snap.c

===================================================================

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index cba620c..1c8c21c 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -239,6 +239,38 @@ void setTransformViewMatrices(TransInfo *t)
        calculateCenter2D(t);
 }
 
+void setTransformViewAspect(TransInfo *t, float r_aspect[3])
+{
+       copy_v3_fl(r_aspect, 1.0f);
+
+       if (t->spacetype == SPACE_IMAGE) {
+               SpaceImage *sima = t->sa->spacedata.first;
+
+               if (t->options & CTX_MASK) {
+                       ED_space_image_get_aspect(sima, &r_aspect[0], 
&r_aspect[1]);
+               }
+               else if (t->options & CTX_PAINT_CURVE) {
+                       /* pass */
+               }
+               else {
+                       ED_space_image_get_uv_aspect(sima, &r_aspect[0], 
&r_aspect[1]);
+               }
+       }
+       else if (t->spacetype == SPACE_CLIP) {
+               SpaceClip *sclip = t->sa->spacedata.first;
+
+               if (t->options & CTX_MOVIECLIP) {
+                       ED_space_clip_get_aspect_dimension_aware(sclip, 
&r_aspect[0], &r_aspect[1]);
+               }
+               else {
+                       ED_space_clip_get_aspect(sclip, &r_aspect[0], 
&r_aspect[1]);
+               }
+       }
+       else if (t->spacetype == SPACE_IPO) {
+               /* depemds on context of usage */
+       }
+}
+
 static void convertViewVec2D(View2D *v2d, float r_vec[3], int dx, int dy)
 {
        float divx, divy;
@@ -292,25 +324,19 @@ void convertViewVec(TransInfo *t, float r_vec[3], int dx, 
int dy)
                }
        }
        else if (t->spacetype == SPACE_IMAGE) {
-               float aspx, aspy;
-
                if (t->options & CTX_MASK) {
                        convertViewVec2D_mask(t->view, r_vec, dx, dy);
-                       ED_space_image_get_aspect(t->sa->spacedata.first, 
&aspx, &aspy);
                }
                else if (t->options & CTX_PAINT_CURVE) {
                        r_vec[0] = dx;
                        r_vec[1] = dy;
-
-                       aspx = aspy = 1.0;
                }
                else {
                        convertViewVec2D(t->view, r_vec, dx, dy);
-                       ED_space_image_get_uv_aspect(t->sa->spacedata.first, 
&aspx, &aspy);
                }
 
-               r_vec[0] *= aspx;
-               r_vec[1] *= aspy;
+               r_vec[0] *= t->aspect[0];
+               r_vec[1] *= t->aspect[1];
        }
        else if (ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) {
                convertViewVec2D(t->view, r_vec, dx, dy);
@@ -319,8 +345,6 @@ void convertViewVec(TransInfo *t, float r_vec[3], int dx, 
int dy)
                convertViewVec2D(&t->ar->v2d, r_vec, dx, dy);
        }
        else if (t->spacetype == SPACE_CLIP) {
-               float aspx, aspy;
-
                if (t->options & CTX_MASK) {
                        convertViewVec2D_mask(t->view, r_vec, dx, dy);
                }
@@ -328,21 +352,8 @@ void convertViewVec(TransInfo *t, float r_vec[3], int dx, 
int dy)
                        convertViewVec2D(t->view, r_vec, dx, dy);
                }
 
-               if (t->options & CTX_MOVIECLIP) {
-                       
ED_space_clip_get_aspect_dimension_aware(t->sa->spacedata.first, &aspx, &aspy);
-               }
-               else if (t->options & CTX_MASK) {
-                       /* TODO - NOT WORKING, this isnt so bad since its only 
display aspect */
-                       ED_space_clip_get_aspect(t->sa->spacedata.first, &aspx, 
&aspy);
-               }
-               else {
-                       /* should never happen, quiet warnings */
-                       BLI_assert(0);
-                       aspx = aspy = 1.0f;
-               }
-
-               r_vec[0] *= aspx;
-               r_vec[1] *= aspy;
+               r_vec[0] *= t->aspect[0];
+               r_vec[1] *= t->aspect[1];
        }
        else {
                printf("%s: called in an invalid context\n", __func__);
@@ -364,15 +375,10 @@ void projectIntViewEx(TransInfo *t, const float vec[3], 
int adr[2], const eV3DPr
                SpaceImage *sima = t->sa->spacedata.first;
 
                if (t->options & CTX_MASK) {
-                       float aspx, aspy;
                        float v[2];
 
-                       ED_space_image_get_aspect(sima, &aspx, &aspy);
-
-                       copy_v2_v2(v, vec);
-
-                       v[0] = v[0] / aspx;
-                       v[1] = v[1] / aspy;
+                       v[0] = vec[0] / t->aspect[0];
+                       v[1] = vec[1] / t->aspect[1];
 
                        BKE_mask_coord_to_image(sima->image, &sima->iuser, v, 
v);
 
@@ -386,11 +392,10 @@ void projectIntViewEx(TransInfo *t, const float vec[3], 
int adr[2], const eV3DPr
                        adr[1] = vec[1];
                }
                else {
-                       float aspx, aspy, v[2];
+                       float v[2];
 
-                       ED_space_image_get_uv_aspect(t->sa->spacedata.first, 
&aspx, &aspy);
-                       v[0] = vec[0] / aspx;
-                       v[1] = vec[1] / aspy;
+                       v[0] = vec[0] / t->aspect[0];
+                       v[1] = vec[1] / t->aspect[1];
 
                        UI_view2d_view_to_region(t->view, v[0], v[1], &adr[0], 
&adr[1]);
                }
@@ -435,15 +440,10 @@ void projectIntViewEx(TransInfo *t, const float vec[3], 
int adr[2], const eV3DPr
                        MovieClip *clip = ED_space_clip_get_clip(sc);
 
                        if (clip) {
-                               float aspx, aspy;
                                float v[2];
 
-                               ED_space_clip_get_aspect(sc, &aspx, &aspy);
-
-                               copy_v2_v2(v, vec);
-
-                               v[0] = v[0] / aspx;
-                               v[1] = v[1] / aspy;
+                               v[0] = vec[0] / t->aspect[0];
+                               v[1] = vec[1] / t->aspect[1];
 
                                BKE_mask_coord_to_movieclip(sc->clip, 
&sc->user, v, v);
 
@@ -458,13 +458,10 @@ void projectIntViewEx(TransInfo *t, const float vec[3], 
int adr[2], const eV3DPr
                        }
                }
                else if (t->options & CTX_MOVIECLIP) {
-                       float v[2], aspx, aspy;
-
-                       copy_v2_v2(v, vec);
-                       
ED_space_clip_get_aspect_dimension_aware(t->sa->spacedata.first, &aspx, &aspy);
+                       float v[2];
 
-                       v[0] /= aspx;
-                       v[1] /= aspy;
+                       v[0] = vec[0] / t->aspect[0];
+                       v[1] = vec[1] / t->aspect[1];
 
                        UI_view2d_view_to_region(t->view, v[0], v[1], &adr[0], 
&adr[1]);
                }
@@ -520,7 +517,6 @@ void applyAspectRatio(TransInfo *t, float vec[2])
 {
        if ((t->spacetype == SPACE_IMAGE) && (t->mode == TFM_TRANSLATION) && 
!(t->options & CTX_PAINT_CURVE)) {
                SpaceImage *sima = t->sa->spacedata.first;
-               float aspx, aspy;
 
                if ((sima->flag & SI_COORDFLOATS) == 0) {
                        int width, height;
@@ -530,28 +526,13 @@ void applyAspectRatio(TransInfo *t, float vec[2])
                        vec[1] *= height;
                }
 
-               ED_space_image_get_uv_aspect(sima, &aspx, &aspy);
-               vec[0] /= aspx;
-               vec[1] /= aspy;
+               vec[0] /= t->aspect[0];
+               vec[1] /= t->aspect[1];
        }
        else if ((t->spacetype == SPACE_CLIP) && (t->mode == TFM_TRANSLATION)) {
                if (t->options & (CTX_MOVIECLIP | CTX_MASK)) {
-                       SpaceClip *sc = t->sa->spacedata.first;
-                       float aspx, aspy;
-
-
-                       if (t->options & CTX_MOVIECLIP) {
-                               ED_space_clip_get_aspect_dimension_aware(sc, 
&aspx, &aspy);
-
-                               vec[0] /= aspx;
-                               vec[1] /= aspy;
-                       }
-                       else if (t->options & CTX_MASK) {
-                               ED_space_clip_get_aspect(sc, &aspx, &aspy);
-
-                               vec[0] /= aspx;
-                               vec[1] /= aspy;
-                       }
+                       vec[0] /= t->aspect[0];
+                       vec[1] /= t->aspect[1];
                }
        }
 }
@@ -560,7 +541,6 @@ void removeAspectRatio(TransInfo *t, float vec[2])
 {
        if ((t->spacetype == SPACE_IMAGE) && (t->mode == TFM_TRANSLATION)) {
                SpaceImage *sima = t->sa->spacedata.first;
-               float aspx, aspy;
 
                if ((sima->flag & SI_COORDFLOATS) == 0) {
                        int width, height;
@@ -570,24 +550,13 @@ void removeAspectRatio(TransInfo *t, float vec[2])
                        vec[1] /= height;
                }
 
-               ED_space_image_get_uv_aspect(sima, &aspx, &aspy);
-               vec[0] *= aspx;
-               vec[1] *= aspy;
+               vec[0] *= t->aspect[0];
+               vec[1] *= t->aspect[1];
        }
        else if ((t->spacetype == SPACE_CLIP) && (t->mode == TFM_TRANSLATION)) {
                if (t->options & (CTX_MOVIECLIP | CTX_MASK)) {
-                       SpaceClip *sc = t->sa->spacedata.first;
-                       float aspx = 1.0f, aspy = 1.0f;
-
-                       if (t->options & CTX_MOVIECLIP) {
-                               ED_space_clip_get_aspect_dimension_aware(sc, 
&aspx, &aspy);
-                       }
-                       else if (t->options & CTX_MASK) {
-                               ED_space_clip_get_aspect(sc, &aspx, &aspy);
-                       }
-
-                       vec[0] *= aspx;
-                       vec[1] *= aspy;
+                       vec[0] *= t->aspect[0];
+                       vec[1] *= t->aspect[1];
                }
        }
 }
diff --git a/source/blender/editors/transform/transform.h 
b/source/blender/editors/transform/transform.h
index 418fb8e..af82f41 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -357,6 +357,8 @@ typedef struct TransInfo {
        eRedrawFlag redraw;         /* redraw flag                          */
        float           prop_size;              /* proportional circle radius   
        */
        char            proptext[20];   /* proportional falloff text            
        */
+       float       aspect[3];      /* spaces using non 1:1 aspect, (uv's, 
f-curve, movie-clip... etc)
+                                    * use for conversion and snapping. */
        float       center[3];      /* center of transformation             */
        float       center2d[2];    /* center in screen coordinates         */
        int         imval[2];       /* initial mouse position               */
@@ -542,6 +544,7 @@ void transformApply(struct bContext *C, TransInfo *t);
 int  transformEnd(struct bContext *C, TransInfo *t);
 
 void setTransformViewMatrices(TransInfo *t);
+void setTransformViewAspect(TransInfo *t, float r_aspect[3]);
 void convertViewVec(TransInfo *t, float r_vec[3], int dx, int dy);
 void projectIntViewEx(TransInfo *t, const float vec[3], int adr[2], const 
eV3DProjTest flag);
 void projectIntView(TransInfo *t, const float vec[3], int adr[2]);
diff --git a/source/blender/editors/transform/transform_constraints.c 
b/source/blender/editors/transform/transform_constraints.c
index 03d626f..50c255b 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -751,19 +751,7 @@ void drawPropCircle(const struct bContext *C, TransInfo *t)
                        mul_m4_v3(t->obedit->obmat, center); /* because 
t->center is in local space */
                }
                else if (t->spacetype == SPACE_IMAGE) {
-                       float aspx, aspy;
-
-                       if (t->options & CTX_MASK) {
-                               /* untested - mask aspect is TODO */
-                               
ED_space_image_get_aspect(t->sa->spacedata.first, &aspx, &aspy);
-                       }
-                       else if (t->options & CTX_PAINT_CURVE) {
-                               aspx = aspy = 1.0f;
-                       }
-                       else {
-                               
ED_space_image_get_uv_aspect(t->sa->spacedata.first, &aspx, &aspy);
-                       }
-                       glScalef(1.0f / aspx, 1.0f / aspy, 1.0f);
+                       glScalef(1.0f / t->aspect[0], 1.0f / t->aspect[1], 
1.0f);
                }
                else if (ELEM(t->spacetype, SPACE_IPO, SPACE_ACTION)) {
                        /* only scale y */
diff --git a/source/blender/editors/transform/transform_conversions.c 
b/source/blender/editors/transform/transform_conversions.c
index abaa55e..c9e7e08 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -2727,7 +2727,6 @@ static void createTransUVs(bContext *C, TransInfo *t)
        BLI_bitmap *island_enabled = NULL;
        struct { float co[2]; int co_num; } *island_center = NULL;
        int count = 0, countsel = 0, count_rejected = 0;
-       float aspect[2];
        const bool is_prop_edit = (t->flag & T_PROP_EDIT) != 0;
        const bool is_prop_connected = (t->flag & T_PROP_CONNECTED) != 0;
        const bool is_island_center = (t->around == V3D_LOCAL);
@@ -2798,14 +2797,12 @@ static void createTrans

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to