gnash-commit
[Top][All Lists]
Advanced

[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




reply via email to

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