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


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp
Date: Tue, 24 Apr 2007 22:22:48 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/04/24 22:22:48

Modified files:
        .              : ChangeLog 
        server         : sprite_instance.cpp 

Log message:
                * server/sprite_instance.cpp (sprite_hit_test): implement
                  hitTest() - not all call types tested.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2989&r2=1.2990
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.256&r2=1.257

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2989
retrieving revision 1.2990
diff -u -b -r1.2989 -r1.2990
--- ChangeLog   24 Apr 2007 21:49:37 -0000      1.2989
+++ ChangeLog   24 Apr 2007 22:22:48 -0000      1.2990
@@ -1,5 +1,10 @@
 2007-04-24 Sandro Santilli <address@hidden>
 
+       * server/sprite_instance.cpp (sprite_hit_test): implement
+         hitTest() - not all call types tested.
+
+2007-04-24 Sandro Santilli <address@hidden>
+
        * server/sprite_instance.cpp: globalToLocal and localToGlobal
          implemented.
        * testsuite/actionscript.all/MovieClip.as: test localToGlobal

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.256
retrieving revision 1.257
diff -u -b -r1.256 -r1.257
--- server/sprite_instance.cpp  24 Apr 2007 21:49:37 -0000      1.256
+++ server/sprite_instance.cpp  24 Apr 2007 22:22:48 -0000      1.257
@@ -616,6 +616,8 @@
        static bool warned_2_arg = false;
        static bool warned_3_arg = false;
 
+       as_environment& env = fn.env();
+
        switch (fn.nargs)
        {
                case 1: // target
@@ -626,38 +628,55 @@
                        {
                                IF_VERBOSE_ASCODING_ERRORS(
                                log_aserror(_("Can't find hitTest target %s"),
-                                       tgt_val.to_string().c_str());
+                                       tgt_val.to_debug_string().c_str());
                                );
                                return as_value();
                        }
+
+                       geometry::Range2d<float> thisbounds = 
sprite->getBounds();
+                       matrix thismat = sprite->get_world_matrix();
+                       thismat.transform(thisbounds);
+
+                       geometry::Range2d<float> tgtbounds = 
target->getBounds();
+                       matrix tgtmat = target->get_world_matrix();
+                       tgtmat.transform(tgtbounds);
+
                        if ( ! warned_1_arg ) {
-                               log_unimpl("hitTest(target)");
+                               log_warning("MovieClip.hitTest(%s) TESTING", 
tgt_val.to_debug_string().c_str());
                                warned_1_arg=true;
                        }
+
+                       return thisbounds.intersects(tgtbounds);
+
                        break;
                }
 
                case 2: // x, y
                {
-                       double x = fn.arg(0).to_number();
-                       double y = fn.arg(1).to_number();
+                       float x = PIXELS_TO_TWIPS(fn.arg(0).to_number(&env));
+                       float y = PIXELS_TO_TWIPS(fn.arg(1).to_number(&env));
+
                        if ( ! warned_2_arg ) {
-                               log_unimpl("hitTest(%g,%g)", x,y);
+                               log_warning("MovieClip.hitTest(%g,%g) TESTING", 
x,y);
                                warned_2_arg=true;
                        }
-                       break;
+
+                       return sprite->pointInBounds(x, y);
                }
 
                case 3: // x, y, shapeFlag
                {
-                       double x = fn.arg(0).to_number();
-                       double y = fn.arg(1).to_number();
+                       double x = PIXELS_TO_TWIPS(fn.arg(0).to_number(&env));
+                       double y = PIXELS_TO_TWIPS(fn.arg(1).to_number(&env));
                        bool shapeFlag = fn.arg(2).to_bool();
+
                        if ( ! warned_3_arg ) {
-                               log_unimpl("hitTest(%g,%g,%d)", x,y,shapeFlag);
+                               log_msg("MovieClip.hitTest(%g,%g,%d) TESTING", 
x,y,shapeFlag);
                                warned_3_arg=true;
                        }
-                       break;
+
+                       if ( ! shapeFlag ) return sprite->pointInBounds(x, y);
+                       else return sprite->pointInVisibleShape(x, y);
                }
 
                default:




reply via email to

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