[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test... |
Date: |
Tue, 24 Apr 2007 21:49:37 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/04/24 21:49:37
Modified files:
. : ChangeLog
server : sprite_instance.cpp
testsuite/actionscript.all: MovieClip.as
Log message:
* server/sprite_instance.cpp: globalToLocal and localToGlobal
implemented.
* testsuite/actionscript.all/MovieClip.as: test localToGlobal
and globalToLocal.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2988&r2=1.2989
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.255&r2=1.256
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/MovieClip.as?cvsroot=gnash&r1=1.66&r2=1.67
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2988
retrieving revision 1.2989
diff -u -b -r1.2988 -r1.2989
--- ChangeLog 24 Apr 2007 21:11:18 -0000 1.2988
+++ ChangeLog 24 Apr 2007 21:49:37 -0000 1.2989
@@ -1,5 +1,12 @@
2007-04-24 Sandro Santilli <address@hidden>
+ * server/sprite_instance.cpp: globalToLocal and localToGlobal
+ implemented.
+ * testsuite/actionscript.all/MovieClip.as: test localToGlobal
+ and globalToLocal.
+
+2007-04-24 Sandro Santilli <address@hidden>
+
* server/sprite_instance.cpp: stubbed localToGlobal and setMask
* testsuite/actionscript.all/MovieClip.as: test availability of
localToGlobal and setMask.
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.255
retrieving revision 1.256
diff -u -b -r1.255 -r1.256
--- server/sprite_instance.cpp 24 Apr 2007 21:11:18 -0000 1.255
+++ server/sprite_instance.cpp 24 Apr 2007 21:49:37 -0000 1.256
@@ -49,6 +49,7 @@
#include "URLAccessManager.h" // for loadVariables
#include "LoadVariablesThread.h"
#include "ExecutableCode.h"
+#include "gnash.h" // for point class !
#include <vector>
#include <string>
@@ -849,30 +850,139 @@
sprite_globalToLocal(const fn_call& fn)
{
boost::intrusive_ptr<sprite_instance> sprite =
ensureType<sprite_instance>(fn.this_ptr);
- UNUSED(sprite);
+
+ as_value ret;
+
+ if ( fn.nargs < 1 )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("MovieClip.globalToLocal() takes one arg"));
+ );
+ return ret;
+ }
+
+ boost::intrusive_ptr<as_object> obj = fn.arg(0).to_object();
+ if ( ! obj )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("MovieClip.globalToLocal(%s): "
+ "first argument doesn't cast to an object"),
+ fn.arg(0).to_debug_string().c_str());
+ );
+ return ret;
+ }
+
+ as_value tmp;
+ float x = 0;
+ float y = 0;
+
+ if ( ! obj->get_member("x", &tmp) )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("MovieClip.globalToLocal(%s): "
+ "object parameter doesn't have an 'x' member"),
+ fn.arg(0).to_debug_string().c_str());
+ );
+ return ret;
+ }
+ x = PIXELS_TO_TWIPS(tmp.to_number(&fn.env()));
+
+ if ( ! obj->get_member("y", &tmp) )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("MovieClip.globalToLocal(%s): "
+ "object parameter doesn't have an 'y' member"),
+ fn.arg(0).to_debug_string().c_str());
+ );
+ return ret;
+ }
+ y = PIXELS_TO_TWIPS(tmp.to_number(&fn.env()));
+
+ point pt(x, y);
+ matrix world_mat = sprite->get_world_matrix();
+ world_mat.transform_by_inverse(pt);
+
+ obj->set_member("x", TWIPS_TO_PIXELS(round(pt.m_x)));
+ obj->set_member("y", TWIPS_TO_PIXELS(round(pt.m_y)));
static bool warned = false;
if ( ! warned )
{
- log_unimpl("MovieClip.globalToLocal()");
+ log_msg("MovieClip.globalToLocal() TESTING");
warned=true;
}
- return as_value();
+
+ return ret;
}
static as_value
sprite_localToGlobal(const fn_call& fn)
{
boost::intrusive_ptr<sprite_instance> sprite =
ensureType<sprite_instance>(fn.this_ptr);
- UNUSED(sprite);
+
+ as_value ret;
+
+ if ( fn.nargs < 1 )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("MovieClip.localToGlobal() takes one arg"));
+ );
+ return ret;
+ }
+
+ boost::intrusive_ptr<as_object> obj = fn.arg(0).to_object();
+ if ( ! obj )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("MovieClip.localToGlobal(%s): "
+ "first argument doesn't cast to an object"),
+ fn.arg(0).to_debug_string().c_str());
+ );
+ return ret;
+ }
+
+ as_value tmp;
+ float x = 0;
+ float y = 0;
+
+ if ( ! obj->get_member("x", &tmp) )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("MovieClip.localToGlobal(%s): "
+ "object parameter doesn't have an 'x' member"),
+ fn.arg(0).to_debug_string().c_str());
+ );
+ return ret;
+ }
+ x = PIXELS_TO_TWIPS(tmp.to_number(&fn.env()));
+
+ if ( ! obj->get_member("y", &tmp) )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("MovieClip.localToGlobal(%s): "
+ "object parameter doesn't have an 'y' member"),
+ fn.arg(0).to_debug_string().c_str());
+ );
+ return ret;
+ }
+ y = PIXELS_TO_TWIPS(tmp.to_number(&fn.env()));
+
+ point pt(x, y);
+ matrix world_mat = sprite->get_world_matrix();
+ world_mat.transform(pt);
+
+ obj->set_member("x", TWIPS_TO_PIXELS(round(pt.m_x)));
+ obj->set_member("y", TWIPS_TO_PIXELS(round(pt.m_y)));
static bool warned = false;
if ( ! warned )
{
- log_unimpl("MovieClip.localToGlobal()");
+ log_msg("MovieClip.localToGlobal() TESTING");
warned=true;
}
- return as_value();
+
+ return ret;
+
}
static as_value
Index: testsuite/actionscript.all/MovieClip.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/MovieClip.as,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -b -r1.66 -r1.67
--- testsuite/actionscript.all/MovieClip.as 24 Apr 2007 21:11:18 -0000
1.66
+++ testsuite/actionscript.all/MovieClip.as 24 Apr 2007 21:49:37 -0000
1.67
@@ -22,7 +22,7 @@
// compile this test case with Ming makeswf, and then
// execute it like this gnash -1 -r 0 -v out.swf
-rcsid="$Id: MovieClip.as,v 1.66 2007/04/24 21:11:18 strk Exp $";
+rcsid="$Id: MovieClip.as,v 1.67 2007/04/24 21:49:37 strk Exp $";
#include "check.as"
@@ -741,3 +741,114 @@
check_equals(b.yMax, 40);
#endif // OUTPUT_VERSION >= 6
+
+//----------------------------------------------
+// Test localToGlobal and globalToLocal
+//----------------------------------------------
+
+static_clip_name = "__shared_assets";
+static_clip = __shared_assets;
+if ( typeof(static_clip) == 'movieclip' )
+{
+ o = {x:0, y:0};
+ static_clip.localToGlobal(o);
+ check_equals(o.x, 0);
+ check_equals(o.y, 0);
+ static_clip.globalToLocal(o);
+ check_equals(o.x, 0);
+ check_equals(o.y, 0);
+
+ static_clip._x += 50;
+ static_clip._y -= 30;
+
+ o = {x:0, y:0};
+ static_clip.localToGlobal(o);
+ check_equals(o.x, 50);
+ check_equals(o.y, -30);
+ static_clip.globalToLocal(o);
+ check_equals(o.x, 0);
+ check_equals(o.y, 0);
+
+ o = {x:1, y:1};
+ static_clip.localToGlobal(o);
+ check_equals(o.x, 51);
+ check_equals(o.y, -29);
+ static_clip.globalToLocal(o);
+ check_equals(o.x, 1);
+ check_equals(o.y, 1);
+
+ static_clip._xscale *= 2;
+ static_clip._yscale *= 0.5;
+
+ o = {x:0, y:0};
+ static_clip.localToGlobal(o);
+ check_equals(o.x, 50);
+ check_equals(o.y, -30);
+ static_clip.globalToLocal(o);
+ check_equals(o.x, 0);
+ check_equals(o.y, 0);
+
+ o = {x:2, y:2};
+ static_clip.localToGlobal(o);
+ check_equals(o.x, 54);
+ check_equals(o.y, -29);
+ static_clip.globalToLocal(o);
+ check_equals(o.x, 2);
+ check_equals(o.y, 2);
+
+ static_clip._rotation = 90;
+
+ o = {x:0, y:0};
+ static_clip.localToGlobal(o);
+ check_equals(o.x, 50);
+ check_equals(o.y, -30);
+ static_clip.globalToLocal(o);
+ check_equals(o.x, 0);
+ check_equals(o.y, 0);
+
+ o = {x:2, y:2};
+ static_clip.localToGlobal(o);
+ check_equals(o.x, 49);
+ check_equals(o.y, -26);
+ static_clip.globalToLocal(o);
+ check_equals(o.x, 2);
+ check_equals(o.y, 2);
+
+ // omit the 'y' member (invalid call)
+ o = {x:2};
+ static_clip.localToGlobal(o);
+ check_equals(o.x, 2);
+ check_equals(typeof(o.y), 'undefined');
+ static_clip.globalToLocal(o);
+ check_equals(o.x, 2);
+ check_equals(typeof(o.y), 'undefined');
+
+ // Upper case
+ o = {X:2, Y:2};
+ static_clip.localToGlobal(o);
+#if OUTPUT_VERSION < 7
+ check_equals(o.X, 49);
+ check_equals(o.Y, -26);
+#else // OUTPUT_VERSION >= 7
+ check_equals(o.X, 2);
+ check_equals(o.Y, 2);
+ check_equals(typeof(o.x), 'undefined');
+ check_equals(typeof(o.y), 'undefined');
+#endif
+ static_clip.globalToLocal(o);
+ check_equals(o.X, 2);
+ check_equals(o.Y, 2);
+
+ static_clip._rotation = 0;
+ static_clip._x -= 50;
+ static_clip._y += 30;
+ static_clip._xscale *= 0.5;
+ static_clip._yscale *= 2;
+
+ // TODO: try with x/y being getter-setter of the localToGlobal and
globalToLocal parameter
+}
+else
+{
+ note("There is not '"+static_clip_name+"' clip statically-defined, so
we could not test localToGlobal() and globalToLocal() against it");
+
+}
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test..., Sandro Santilli, 2007/04/06
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test..., Sandro Santilli, 2007/04/12
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test..., Sandro Santilli, 2007/04/14
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test..., Sandro Santilli, 2007/04/24
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test..., Sandro Santilli, 2007/04/24
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test...,
Sandro Santilli <=
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp test..., Sandro Santilli, 2007/04/24