[Top][All Lists]
[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);
+
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/character.cpp server/mat...,
Sandro Santilli <=