gnash-commit
[Top][All Lists]
Advanced

[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");
+
+}




reply via email to

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