[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/as_environment.cpp serve...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/as_environment.cpp serve... |
Date: |
Thu, 17 Apr 2008 22:45:33 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 08/04/17 22:45:33
Modified files:
. : ChangeLog
server : as_environment.cpp
button_character_instance.cpp character.cpp
character.h sprite_instance.cpp
sprite_instance.h swf_function.cpp
testsuite/swfdec: PASSING
Log message:
* server/character.{cpp,h}: make get_root return m_root no
matter
lockroot and provide a new getAsRoot() for lockroot-aware
operations.
* server/as_environment.cpp,
server/button_character_instance.cpp,
server/sprite_instance.{cpp,h}, server/swf_function.cpp:
Use getAsRoot() when the _root member is needed, implement it
to check _lockroot on every component of the path, and to
check for movie (not VM only) version.
Fixes bug #22930.
* testsuite/swfdec/PASSING: movieclip-lockroot-{7,8}.swf and
movieclip-lockroot-loadmovie-6.swf complete the lockroot
test series.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6320&r2=1.6321
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.cpp?cvsroot=gnash&r1=1.129&r2=1.130
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.cpp?cvsroot=gnash&r1=1.91&r2=1.92
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.91&r2=1.92
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.137&r2=1.138
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.504&r2=1.505
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.178&r2=1.179
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf_function.cpp?cvsroot=gnash&r1=1.52&r2=1.53
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.129&r2=1.130
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.6320
retrieving revision 1.6321
diff -u -b -r1.6320 -r1.6321
--- ChangeLog 17 Apr 2008 21:04:11 -0000 1.6320
+++ ChangeLog 17 Apr 2008 22:45:31 -0000 1.6321
@@ -1,5 +1,20 @@
2008-04-17 Sandro Santilli <address@hidden>
+ * server/character.{cpp,h}: make get_root return m_root no matter
+ lockroot and provide a new getAsRoot() for lockroot-aware
+ operations.
+ * server/as_environment.cpp, server/button_character_instance.cpp,
+ server/sprite_instance.{cpp,h}, server/swf_function.cpp:
+ Use getAsRoot() when the _root member is needed, implement it
+ to check _lockroot on every component of the path, and to
+ check for movie (not VM only) version.
+ Fixes bug #22930.
+ * testsuite/swfdec/PASSING: movieclip-lockroot-{7,8}.swf and
+ movieclip-lockroot-loadmovie-6.swf complete the lockroot
+ test series.
+
+2008-04-17 Sandro Santilli <address@hidden>
+
* configure.ac: drop the trap, messes up with autoconf internals.
2008-04-17 Sandro Santilli <address@hidden>
Index: server/as_environment.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_environment.cpp,v
retrieving revision 1.129
retrieving revision 1.130
diff -u -b -r1.129 -r1.130
--- server/as_environment.cpp 24 Mar 2008 21:31:16 -0000 1.129
+++ server/as_environment.cpp 17 Apr 2008 22:45:31 -0000 1.130
@@ -558,8 +558,8 @@
const char* p = path.c_str();
if (*p == '/')
{
- // Absolute path. Start at the root.
- sprite_instance* root = m_target->get_root();
+ // Absolute path. Start at the (AS) root (handle _lockroot)
+ sprite_instance* root =
const_cast<sprite_instance*>(m_target->getAsRoot());
if ( ! *(++p) )
{
#ifdef DEBUG_TARGET_FINDING
Index: server/button_character_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -b -r1.91 -r1.92
--- server/button_character_instance.cpp 16 Apr 2008 21:12:51 -0000
1.91
+++ server/button_character_instance.cpp 17 Apr 2008 22:45:32 -0000
1.92
@@ -898,10 +898,8 @@
//
if (name_key == NSV::PROP_uROOT)
{
-
- // Let ::get_root() take care of _lockroot
- movie_instance* relRoot = get_root();
- val->set_as_object( relRoot );
+ // getAsRoot() will take care of _lockroot
+ val->set_as_object( const_cast<sprite_instance*>( getAsRoot() ) );
return true;
}
Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -b -r1.91 -r1.92
--- server/character.cpp 17 Apr 2008 09:12:57 -0000 1.91
+++ server/character.cpp 17 Apr 2008 22:45:32 -0000 1.92
@@ -104,8 +104,8 @@
{
if (key == NSV::PROP_uROOT)
{
- // get_root() will handle _lockroot
- return get_root();
+ // getAsRoot() will handle _lockroot
+ return const_cast<sprite_instance*>(getAsRoot());
}
const std::string& name = _vm.getStringTable().value(key);
@@ -177,8 +177,8 @@
m_invalidated = true;
#ifdef DEBUG_SET_INVALIDATED
- printf("%p set_invalidated() of %s in %s:%d\n", this,
get_name().c_str(),
- debug_file, debug_line);
+ printf("%p set_invalidated() of %s in %s:%d\n",
+ this, get_name(), debug_file, debug_line);
#endif
// NOTE: the SnappingRanges instance used here is not
initialized by the
@@ -1053,6 +1053,12 @@
}
#endif
+const sprite_instance*
+character::getAsRoot() const
+{
+ return get_root();
+}
+
} // namespace gnash
Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.137
retrieving revision 1.138
diff -u -b -r1.137 -r1.138
--- server/character.h 11 Apr 2008 15:33:45 -0000 1.137
+++ server/character.h 17 Apr 2008 22:45:32 -0000 1.138
@@ -724,17 +724,12 @@
return pointInShape(x, y);
}
- /// Return the relative or absolute root of this character
+ /// Return the relative root of this character
//
/// The "relative" is the movie_instance created by
/// the same SWF definition that contained the
/// definition of this character.
///
- /// The "absolute" is top of parent's tree.
- ///
- /// TODO: what about programmatically created characters ?
- /// which would their "relative" root be ?
- ///
/// The default implementation is to invoke get_root
/// against this character's parent.
///
@@ -742,6 +737,12 @@
return get_parent()->get_root();
}
+ /// Return the _root ActionScript property of this character.
+ //
+ /// By default calls get_root().
+ ///
+ virtual const sprite_instance* getAsRoot() const;
+
/// Find the object which is one degree removed from us,
/// given the relative pathname.
///
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.504
retrieving revision 1.505
diff -u -b -r1.504 -r1.505
--- server/sprite_instance.cpp 16 Apr 2008 19:53:45 -0000 1.504
+++ server/sprite_instance.cpp 17 Apr 2008 22:45:32 -0000 1.505
@@ -2282,9 +2282,8 @@
if (name_key == NSV::PROP_uROOT)
{
- // Let ::get_root() take care of _lockroot
- movie_instance* relRoot = get_root();
- val->set_as_object( relRoot );
+ // getAsRoot() will take care of _lockroot
+ val->set_as_object( const_cast<sprite_instance*>( getAsRoot() ) );
return true;
}
@@ -4542,24 +4541,39 @@
movie_instance*
sprite_instance::get_root() const
{
- movie_instance* relRoot = m_root;
- character* rootParent = relRoot->get_parent();
- if ( rootParent )
- {
- // if the relative root has a parent we descend
- // to it unless SWF version of the VM is >= 7
- // AND _lockroot of the relative url is true
- if ( getVM().getSWFVersion() >= 7 )
+ return m_root;
+}
+
+const sprite_instance*
+sprite_instance::getAsRoot() const
+{
+ log_debug("getAsRoot called for sprite %s, with _lockroot %d and
version %d", getTarget(), getLockRoot(), getSWFVersion());
+
+ // TODO1: as an optimization, if swf version < 7
+ // we might as well just return m_root,
+ // the whole chain from this sprite to it's
+ // m_root should have the same version...
+ //
+ // TODO2: implement this with iteration rather
+ // then recursion.
+ //
+
+ character* parent = get_parent();
+ if ( ! parent ) return this; // no parent, we're the root
+
+ // If we have a parent, we descend to it unless
+ // our _lockroot is true AND our or the VM's
+ // SWF version is > 6
+ //
+ if ( getSWFVersion() > 6 || getVM().getSWFVersion() > 6 )
{
- if ( relRoot->getLockRoot() )
+ if ( getLockRoot() )
{
- return relRoot;
+ return this; // locked
}
}
- return rootParent->get_root();
- }
- return relRoot;
+ return parent->getAsRoot();
}
as_value
Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.178
retrieving revision 1.179
diff -u -b -r1.178 -r1.179
--- server/sprite_instance.h 11 Apr 2008 15:33:46 -0000 1.178
+++ server/sprite_instance.h 17 Apr 2008 22:45:32 -0000 1.179
@@ -109,15 +109,16 @@
TAG_DLIST = 1<<1
};
- /// \brief
- /// Return this sprite's root as
- /// specified at contruction time
+ // Overridden to use the m_root member
+ virtual movie_instance* get_root() const;
+
+ /// Return the _root ActionScript property of this sprite.
//
/// Relative or absolute is determined by
/// the _lockroot property, see getLockRoot
/// and setLockRoot.
///
- virtual movie_instance* get_root() const;
+ virtual const sprite_instance* getAsRoot() const;
/// \brief
/// Return the sprite_definition (or movie_definition)
@@ -130,7 +131,7 @@
/// Return version of the SWF definition of this instance
/// as been parsed from.
//
- int getSWFVersion()
+ int getSWFVersion() const
{
return m_def->get_version();
}
Index: server/swf_function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf_function.cpp,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -b -r1.52 -r1.53
--- server/swf_function.cpp 28 Mar 2008 17:16:11 -0000 1.52
+++ server/swf_function.cpp 17 Apr 2008 22:45:32 -0000 1.53
@@ -233,9 +233,9 @@
if (m_function2_flags & PRELOAD_ROOT)
{
// Put '_root' in a register.
- // NOTE: _lockroot will be hanlded by get_root()
+ // NOTE: _lockroot will be hanlded by getAsRoot()
our_env->local_register(current_reg).set_as_object(
- our_env->get_target()->get_root());
+
const_cast<sprite_instance*>(our_env->get_target()->getAsRoot()));
current_reg++;
}
Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.129
retrieving revision 1.130
diff -u -b -r1.129 -r1.130
--- testsuite/swfdec/PASSING 16 Apr 2008 15:59:46 -0000 1.129
+++ testsuite/swfdec/PASSING 17 Apr 2008 22:45:33 -0000 1.130
@@ -394,6 +394,9 @@
movieclip-get-swf-version-load-8.swf:a0ee7aae28219fa92f4036c7fd2f0174
movieclip-lockroot-5.swf:fe978aade775b3701f8813fde797c8cd
movieclip-lockroot-6.swf:9321972287d40cbdedbb4c29b7cded84
+movieclip-lockroot-7.swf:2c259395b13374b44027abf379d4518c
+movieclip-lockroot-8.swf:4da3e2092446bba32c303d35fdd7e5d7
+movieclip-lockroot-loadmovie-6.swf:679b3cea0d9643744aa29c88ae9908e1
movieclip-lockroot-loadmovie-7.swf:84ad9218797251db3ee79f9241f27b67
movieclip-lockroot-loadmovie-8.swf:3ac7430bf84185e34aee32b2d2394600
moviecliploader-constructor-5.swf:fd0fb9a785017456810f06b61c109d35
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/as_environment.cpp serve...,
Sandro Santilli <=