gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/character.cpp server/mat...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/character.cpp server/mat...
Date: Sun, 15 Apr 2007 14:31:19 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/04/15 14:31:19

Modified files:
        .              : ChangeLog 
        server         : character.cpp matrix.cpp matrix.h 
                         sprite_instance.cpp 
        server/vm      : ASHandlers.cpp 
        testsuite/server: MatrixTest.cpp 

Log message:
                * server/matrix.{cpp,h}: provided setters for canonical
                  parameters.
                * server/character.cpp: avoid direct access to matrix members.
                * server/sprite_instance.cpp: avoid direct acces to matrix 
members.
                * server/vm/ASHandlers.cpp: fix signedness compiler warnings.
                * testsuite/server/MatrixTest.cpp: add tests for scale 
concatenation.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2876&r2=1.2877
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/gnash/server/matrix.cpp?cvsroot=gnash&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/gnash/server/matrix.h?cvsroot=gnash&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.241&r2=1.242
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.89&r2=1.90
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/server/MatrixTest.cpp?cvsroot=gnash&r1=1.6&r2=1.7

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2876
retrieving revision 1.2877
diff -u -b -r1.2876 -r1.2877
--- ChangeLog   15 Apr 2007 10:52:08 -0000      1.2876
+++ ChangeLog   15 Apr 2007 14:31:18 -0000      1.2877
@@ -1,3 +1,12 @@
+2007-04-15 Sandro Santilli <address@hidden>
+
+       * server/matrix.{cpp,h}: provided setters for canonical 
+         parameters.
+       * server/character.cpp: avoid direct access to matrix members.
+       * server/sprite_instance.cpp: avoid direct acces to matrix members.
+       * server/vm/ASHandlers.cpp: fix signedness compiler warnings.
+       * testsuite/server/MatrixTest.cpp: add tests for scale concatenation.
+
 2007-04-15 Bastiaan Jacques <address@hidden>
 
        * libbase/container.{cpp,h}: Remove tu_string{,i}.

Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- server/character.cpp        14 Apr 2007 18:19:49 -0000      1.34
+++ server/character.cpp        15 Apr 2007 14:31:19 -0000      1.35
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: character.cpp,v 1.34 2007/04/14 18:19:49 strk Exp $ */
+/* $Id: character.cpp,v 1.35 2007/04/15 14:31:19 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -88,8 +88,7 @@
                    // Place our origin so that it coincides with the mouse 
coords
                    // in our parent frame.
                    matrix      local = get_matrix();
-                   local.m_[0][2] = parent_mouse.m_x;
-                   local.m_[1][2] = parent_mouse.m_y;
+                   local.set_translation( parent_mouse.m_x, parent_mouse.m_y );
                    set_matrix(local);
                }
                else
@@ -245,16 +244,17 @@
        if ( fn.nargs == 0 ) // getter
        {
                matrix m = ptr->get_matrix();
-               rv = as_value(TWIPS_TO_PIXELS(m.m_[0][2]));
+               rv = as_value(TWIPS_TO_PIXELS(m.get_x_translation()));
        }
        else // setter
        {
+               double newx = fn.arg(0).to_number(&(fn.env()));
                matrix m = ptr->get_matrix();
-               m.m_[0][2] = 
infinite_to_fzero(PIXELS_TO_TWIPS(fn.arg(0).to_number(&(fn.env()))));
+               m.set_x_translation(infinite_to_fzero(PIXELS_TO_TWIPS(newx)));
                ptr->set_matrix(m);
                ptr->transformedByScript(); // m_accept_anim_moves = false; 
        }
-       return rv;;
+       return rv;
 
 }
 
@@ -267,12 +267,13 @@
        if ( fn.nargs == 0 ) // getter
        {
                matrix m = ptr->get_matrix();
-               rv = as_value(TWIPS_TO_PIXELS(m.m_[1][2]));
+               rv = as_value(TWIPS_TO_PIXELS(m.get_y_translation()));
        }
        else // setter
        {
+               double newy = fn.arg(0).to_number(&(fn.env()));
                matrix m = ptr->get_matrix();
-               m.m_[1][2] = 
infinite_to_fzero(PIXELS_TO_TWIPS(fn.arg(0).to_number(&(fn.env()))));
+               m.set_y_translation(infinite_to_fzero(PIXELS_TO_TWIPS(newy)));
                ptr->set_matrix(m);
                ptr->transformedByScript(); // m_accept_anim_moves = false; 
        }
@@ -559,12 +560,9 @@
                // @@ tulrich: is parameter in world-coords or local-coords?
                matrix m = ptr->get_matrix();
 
-               // Decompose matrix and insert the desired value.
-               float x_scale = m.get_x_scale();
-               float y_scale = m.get_y_scale();
                // input is in degrees
                float rotation = (float) fn.arg(0).to_number(&(fn.env())) * 
float(M_PI) / 180.f;
-               m.set_scale_rotation(x_scale, y_scale, rotation);
+               m.set_rotation(rotation);
 
                ptr->set_matrix(m);
                ptr->transformedByScript(); // m_accept_anim_moves = false; 
@@ -718,10 +716,7 @@
 {
        matrix m = get_matrix();
 
-       // Decompose matrix and insert the desired value.
-       float y_scale = m.get_y_scale();
-       float rotation = m.get_rotation();
-       m.set_scale_rotation(x_scale, y_scale, rotation);
+       m.set_x_scale(x_scale);
 
        set_matrix(m);
        transformedByScript(); // m_accept_anim_moves = false; 
@@ -732,10 +727,7 @@
 {
        matrix m = get_matrix();
 
-       // Decompose matrix and insert the desired value.
-       float x_scale = m.get_x_scale();
-       float rotation = m.get_rotation();
-       m.set_scale_rotation(x_scale, y_scale, rotation);
+       m.set_y_scale(y_scale);
 
        set_matrix(m);
        transformedByScript(); // m_accept_anim_moves = false; 

Index: server/matrix.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/matrix.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- server/matrix.cpp   14 Apr 2007 22:23:05 -0000      1.11
+++ server/matrix.cpp   15 Apr 2007 14:31:19 -0000      1.12
@@ -18,7 +18,7 @@
 //
 // Original author: Thatcher Ulrich <address@hidden> 2003
 //
-// $Id: matrix.cpp,v 1.11 2007/04/14 22:23:05 strk Exp $ 
+// $Id: matrix.cpp,v 1.12 2007/04/15 14:31:19 strk Exp $ 
 //
 
 #ifdef HAVE_CONFIG_H
@@ -131,10 +131,16 @@
 matrix::concatenate_scales(float x, float y)
 // Just like concatenate_scale() but with different scales for x/y
 {
+       matrix m2; m2.set_scale_rotation(x, y, 0);
+       concatenate(m2);
+
+#if 0 // the code below only works when x and y scales are equal,
+      // see testsuite/server/MatrixTest.cpp
        m_[0][0] *= infinite_to_fzero(x);
        m_[0][1] *= infinite_to_fzero(x);
        m_[1][0] *= infinite_to_fzero(y);
        m_[1][1] *= infinite_to_fzero(y);
+#endif
 }
 
 void
@@ -163,6 +169,37 @@
        m_[1][1] = infinite_to_fzero(y_scale * cos_angle);
 }
 
+void
+matrix::set_x_scale(float xscale)
+{
+       float rotation = get_rotation();
+       float yscale = get_y_scale();
+       set_scale_rotation(xscale, yscale, rotation);
+}
+
+void
+matrix::set_y_scale(float yscale)
+{
+       float rotation = get_rotation();
+       float xscale = get_x_scale();
+       set_scale_rotation(xscale, yscale, rotation);
+}
+
+void
+matrix::set_scale(float xscale, float yscale)
+{
+       float rotation = get_rotation();
+       set_scale_rotation(xscale, yscale, rotation);
+}
+
+void
+matrix::set_rotation(float rotation)
+{
+       float xscale = get_x_scale();
+       float yscale = get_y_scale();
+       set_scale_rotation(xscale, yscale, rotation);
+}
+
 
 void
 matrix::read(stream* in)
@@ -221,10 +258,17 @@
 matrix::transform(point& p) const
 // Transform point 'p' by our matrix.
 {
-       float nx = m_[0][0] * p.m_x + m_[0][1] * p.m_y + m_[0][2];
-       float ny = m_[1][0] * p.m_x + m_[1][1] * p.m_y + m_[1][2];
-       p.m_x = nx;
-       p.m_y = ny;
+       transform(p.m_x, p.m_y);
+}
+
+void
+matrix::transform(float& x, float& y) const
+// Transform point 'x,y' by our matrix.
+{
+       float nx = m_[0][0] * x + m_[0][1] * y + m_[0][2];
+       float ny = m_[1][0] * x + m_[1][1] * y + m_[1][2];
+       x = nx;
+       y = ny;
 }
 
 void

Index: server/matrix.h
===================================================================
RCS file: /sources/gnash/gnash/server/matrix.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- server/matrix.h     14 Apr 2007 14:38:28 -0000      1.6
+++ server/matrix.h     15 Apr 2007 14:31:19 -0000      1.7
@@ -18,7 +18,7 @@
 //
 // Original author: Thatcher Ulrich <address@hidden> 2003
 //
-// $Id: matrix.h,v 1.6 2007/04/14 14:38:28 strk Exp $ 
+// $Id: matrix.h,v 1.7 2007/04/15 14:31:19 strk Exp $ 
 //
 
 #ifndef GNASH_MATRIX_H
@@ -112,6 +112,36 @@
        /// Set the scale & rotation part of the matrix. angle in radians.
        void    set_scale_rotation(float x_scale, float y_scale, float 
rotation);
 
+       /// Set the scale part of the matrix, will keep current rotation
+       void    set_scale(float x_scale, float y_scale);
+
+       /// Set the X scale part of the matrix, will keep current rotation and 
Y scale
+       void    set_x_scale(float scale);
+
+       /// Set the Y scale part of the matrix, will keep current rotation and 
X scale
+       void    set_y_scale(float scale);
+
+       /// Set the rotation part of the matrix, will keep current scale
+       void    set_rotation(float rotation);
+
+       /// Set x translation
+       void set_x_translation(float x)
+       {
+               m_[0][2] = x;
+       }
+
+       /// Set y translation
+       void set_y_translation(float y)
+       {
+               m_[1][2] = y;
+       }
+
+       void set_translation(float x, float y)
+       {
+               m_[0][2] = x;
+               m_[1][2] = y;
+       }
+
        /// Initialize from the SWF input stream.
        void    read(stream* in);
 
@@ -127,6 +157,9 @@
        /// Transform point 'p' by our matrix. 
        void    transform(point& p) const;
 
+       /// Transform point 'x,y' by our matrix. 
+       void    transform(float& x, float& y) const;
+
        /// Transform vector 'v' by our matrix. Doesn't apply translation.
        //
        /// Put the result in *result.
@@ -177,6 +210,18 @@
        /// return our rotation component (in radians)
        float   get_rotation() const;
 
+       /// return the canonical x translation
+       float   get_x_translation() const
+       {
+               return m_[0][2];
+       }
+
+       /// return the canonical y translation
+       float   get_y_translation() const
+       {
+               return m_[1][2];
+       }
+
 public: // must be switched to private
 
        /// \brief

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.241
retrieving revision 1.242
diff -u -b -r1.241 -r1.242
--- server/sprite_instance.cpp  15 Apr 2007 10:52:09 -0000      1.241
+++ server/sprite_instance.cpp  15 Apr 2007 14:31:19 -0000      1.242
@@ -1794,22 +1794,20 @@
        boost::intrusive_ptr<edit_text_character_def> txt = new 
edit_text_character_def(get_movie_definition());
        boost::intrusive_ptr<character> txt_char = 
txt->create_character_instance(this, 0);
 
+       // TODO: where to write width and height info ?
+       UNUSED(width);
+       UNUSED(height);
+
+       // Give name and mark as dynamic
        txt_char->set_name(name.c_str());
        txt_char->setDynamic();
 
-       // Here we should set the proper matrix using x,y width and height
-
-       // set _x
-       txt_matrix.m_[0][2] = infinite_to_fzero(PIXELS_TO_TWIPS(x));
-       // set _y
-       txt_matrix.m_[1][2] = infinite_to_fzero(PIXELS_TO_TWIPS(y));
-       // set _width
-       txt_matrix.m_[0][0] = infinite_to_fzero(PIXELS_TO_TWIPS(width));
-       // set _height
-       txt_matrix.m_[1][1] = infinite_to_fzero(PIXELS_TO_TWIPS(height));
+       // Set _x and _y
+       txt_matrix.set_translation(
+                       infinite_to_fzero(PIXELS_TO_TWIPS(x)),
+                       infinite_to_fzero(PIXELS_TO_TWIPS(y)));
 
        // Here we add the character to the displayList.
-
        m_display_list.place_character(
                txt_char.get(),
                depth,

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -b -r1.89 -r1.90
--- server/vm/ASHandlers.cpp    15 Apr 2007 10:52:09 -0000      1.89
+++ server/vm/ASHandlers.cpp    15 Apr 2007 14:31:19 -0000      1.90
@@ -14,7 +14,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: ASHandlers.cpp,v 1.89 2007/04/15 10:52:09 bjacques Exp $ */
+/* $Id: ASHandlers.cpp,v 1.90 2007/04/15 14:31:19 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -886,7 +886,7 @@
        base=1;
     }
 
-    else if ( base > str.length() )
+    else if ( unsigned(base) > str.length() )
     {
        IF_VERBOSE_ASCODING_ERRORS (
        log_aserror("base goes beyond input string in ActionSubString, "
@@ -900,7 +900,7 @@
     // Base is 1-based, we'll use 0-based from now on...
     base -= 1;
 
-    if ( base+size > str.length() )
+    if ( unsigned(base+size) > str.length() )
     {
        IF_VERBOSE_ASCODING_ERRORS (
        log_aserror("base+size goes beyond input string in ActionSubString, "
@@ -911,7 +911,7 @@
 
 
     assert(base >= 0);
-    assert(base < str.length() );
+    assert(unsigned(base) < str.length() );
     assert(size >= 0);
 
     //log_msg("string: %s, size: %d, base: %d", str.c_str(), size, base);

Index: testsuite/server/MatrixTest.cpp
===================================================================
RCS file: /sources/gnash/gnash/testsuite/server/MatrixTest.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- testsuite/server/MatrixTest.cpp     14 Apr 2007 22:23:05 -0000      1.6
+++ testsuite/server/MatrixTest.cpp     15 Apr 2007 14:31:19 -0000      1.7
@@ -69,6 +69,8 @@
        check_equals(identity.get_x_scale(), 1);
        check_equals(identity.get_y_scale(), 1);
        check_equals(identity.get_rotation(), 0);
+       check_equals(identity.get_x_translation(), 0);
+       check_equals(identity.get_y_translation(), 0);
        check( ! identity.does_flip() );
 
        // The inverse of identity is still the identity
@@ -76,37 +78,99 @@
        invert.set_inverse(identity);
        check_equals(invert, matrix::identity);
 
-       // Try setting and getting some values
+       //---------------------------------------------
+       // Test canonic parameter setting and getting
+       //---------------------------------------------
+
        matrix m1;
        m1.set_scale_rotation(1, 3, 0);
        check_equals(m1.get_x_scale(), 1);
        check_equals(m1.get_y_scale(), 3);
        check_equals(m1.get_rotation(), 0);
+       check_equals(m1.get_x_translation(), 0);
+       check_equals(m1.get_y_translation(), 0);
        check(!m1.does_flip());
 
-       m1.set_scale_rotation(1.5, 2.5, 0);
+       m1.set_scale(1.5, 2.5);
        check_equals(D(m1.get_x_scale()), 1.5);
        check_equals(D(m1.get_y_scale()), 2.5);
        check_equals(D(m1.get_rotation()), 0);
+       check_equals(m1.get_x_translation(), 0);
+       check_equals(m1.get_y_translation(), 0);
 
-       m1.set_scale_rotation(34, 4, 0);
+       m1.set_scale(34, 4);
        check_equals(D(m1.get_x_scale()), 34);
        check_equals(D(m1.get_y_scale()), 4);
        check_equals(D(m1.get_rotation()), 0);
+       check_equals(m1.get_x_translation(), 0);
+       check_equals(m1.get_y_translation(), 0);
 
        m1.set_scale_rotation(1, 1, 2);
        check_equals(D(m1.get_x_scale()), 1);
        check_equals(D(m1.get_y_scale()), 1);
        check_equals(D(m1.get_rotation()), 2);
+       check_equals(m1.get_x_translation(), 0);
+       check_equals(m1.get_y_translation(), 0);
 
-       m1.set_scale_rotation(2, 1, 2);
+       m1.set_x_scale(2);
        check_equals(D(m1.get_x_scale()), 2);
        check_equals(D(m1.get_y_scale()), 1);
        check_equals(D(m1.get_rotation()), 2);
+       check_equals(m1.get_x_translation(), 0);
+       check_equals(m1.get_y_translation(), 0);
 
-       m1.set_scale_rotation(1, 2, 2);
+       m1.set_scale(1, 2);
        check_equals(D(m1.get_x_scale()), 1);
        check_equals(D(m1.get_y_scale()), 2);
        check_equals(D(m1.get_rotation()), 2);
+       check_equals(m1.get_x_translation(), 0);
+       check_equals(m1.get_y_translation(), 0);
+
+       m1.set_rotation(0);
+       check_equals(D(m1.get_x_scale()), 1);
+       check_equals(D(m1.get_y_scale()), 2);
+       check_equals(D(m1.get_rotation()), 0);
+       check_equals(m1.get_x_translation(), 0);
+       check_equals(m1.get_y_translation(), 0);
+
+       m1.set_translation(5, 6);
+       check_equals(D(m1.get_x_scale()), 1);
+       check_equals(D(m1.get_y_scale()), 2);
+       check_equals(D(m1.get_rotation()), 0);
+       check_equals(m1.get_x_translation(), 5);
+       check_equals(m1.get_y_translation(), 6);
+
+       m1.set_rotation(2);
+       check_equals(D(m1.get_x_scale()), 1);
+       check_equals(D(m1.get_y_scale()), 2);
+       check_equals(D(m1.get_rotation()), 2);
+       check_equals(m1.get_x_translation(), 5);
+       check_equals(m1.get_y_translation(), 6);
+
+       //---------------------------------------------
+       // Test concatenation
+       //---------------------------------------------
+
+       m1.concatenate_scale(2);
+       check_equals(D(m1.get_x_scale()), 2);
+       check_equals(D(m1.get_y_scale()), 4);
+       check_equals(D(m1.get_rotation()), 2);
+       check_equals(m1.get_x_translation(), 5);
+       check_equals(m1.get_y_translation(), 6);
+
+       m1.concatenate_scales(3, 3);
+       check_equals(D(m1.get_x_scale()), 6);
+       check_equals(D(m1.get_y_scale()), 12);
+       check_equals(D(m1.get_rotation()), 2);
+       check_equals(m1.get_x_translation(), 5);
+       check_equals(m1.get_y_translation(), 6);
+
+       m1.concatenate_scales(2, 1);
+       check_equals(D(m1.get_x_scale()), 12);
+       check_equals(D(m1.get_y_scale()), 12);
+       check_equals(D(m1.get_rotation()), 2);
+       check_equals(m1.get_x_translation(), 5);
+       check_equals(m1.get_y_translation(), 6);
+
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]