[Top][All Lists]
[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: