gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/as_value.cpp server/movi...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_value.cpp server/movi...
Date: Wed, 09 Jan 2008 11:41:02 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/01/09 11:41:01

Modified files:
        .              : ChangeLog 
        server         : as_value.cpp movie_root.cpp movie_root.h 

Log message:
        Add a movie_root::findCharacterByTarget() and use it for soft refs.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5352&r2=1.5353
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.110&r2=1.111
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.143&r2=1.144
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.99&r2=1.100

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5352
retrieving revision 1.5353
diff -u -b -r1.5352 -r1.5353
--- ChangeLog   9 Jan 2008 11:06:38 -0000       1.5352
+++ ChangeLog   9 Jan 2008 11:41:01 -0000       1.5353
@@ -1,5 +1,11 @@
 2008-01-09 Sandro Santilli <address@hidden>
 
+       * server/: as_value.cpp, movie_root.{cpp,h}:
+         Add a movie_root::findCharacterByTarget() and
+         use it for soft refs.
+
+2008-01-09 Sandro Santilli <address@hidden>
+
        * testsuite/misc-ming.all/DragDropTestRunner.cpp:
          advance playhead while waiting for movies to be
          loaded.

Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -b -r1.110 -r1.111
--- server/as_value.cpp 5 Jan 2008 15:35:08 -0000       1.110
+++ server/as_value.cpp 9 Jan 2008 11:41:01 -0000       1.111
@@ -1518,32 +1518,7 @@
 {
        if ( tgtstr.empty() ) return NULL;
 
-       VM& vm = VM::get();
-       string_table& st = vm.getStringTable();
-       as_object* o = vm.getRoot().getRootMovie();
-
-       // TODO: for another optimization we may cache
-       //       the string_table::key for each element
-       //       as the CharacterProxy target (instead of
-       //       the full string, to be parsed everytime)
-
-       //string::size_type size = tgtstr.size();
-       string::size_type from = 0;
-       while ( string::size_type to=tgtstr.find_first_of('.', from) )
-       {
-               string part(tgtstr, from, to-from);
-               o = o->get_path_element(st.find(part));
-               if ( ! o ) {
-#ifdef GNASH_DEBUG_SOFT_REFERENCES
-                       log_debug("Evaluating target path for soft ref 
rebinding: element '%s' of path '%s' not found",
-                               part.c_str(), tgtstr.c_str());
-#endif
-                       return NULL;
-               }
-               if ( to == string::npos ) break;
-               from = to+1;
-       }
-       return o->to_character();
+       return VM::get().getRoot().findCharacterByTarget(tgtstr);
 }
 
 void

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -b -r1.143 -r1.144
--- server/movie_root.cpp       9 Jan 2008 09:11:02 -0000       1.143
+++ server/movie_root.cpp       9 Jan 2008 11:41:01 -0000       1.144
@@ -1664,5 +1664,34 @@
        }
 }
 
+character*
+movie_root::findCharacterByTarget(const std::string& tgtstr_orig) const
+{
+       if ( tgtstr_orig.empty() ) return NULL;
+
+       std::string tgtstr = PROPNAME(tgtstr_orig);
+
+       VM& vm = VM::get();
+       string_table& st = vm.getStringTable();
+       as_object* o = getRootMovie(); // FIXME: could have been dropped ! use 
_movies.front() instead
+
+       string::size_type from = 0;
+       while ( string::size_type to=tgtstr.find_first_of('.', from) )
+       {
+               string part(tgtstr, from, to-from);
+               o = o->get_path_element(st.find(part));
+               if ( ! o ) {
+//#ifdef GNASH_DEBUG_TARGET_RESOLUTION
+                       log_debug("Evaluating target path for soft ref 
rebinding: element '%s' of path '%s' not found",
+                               part.c_str(), tgtstr.c_str());
+//#endif
+                       return NULL;
+               }
+               if ( to == string::npos ) break;
+               from = to+1;
+       }
+       return o->to_character();
+}
+
 } // namespace gnash
 

Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -b -r1.99 -r1.100
--- server/movie_root.h 9 Jan 2008 08:29:36 -0000       1.99
+++ server/movie_root.h 9 Jan 2008 11:41:01 -0000       1.100
@@ -15,7 +15,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: movie_root.h,v 1.99 2008/01/09 08:29:36 strk Exp $ */
+/* $Id: movie_root.h,v 1.100 2008/01/09 11:41:01 strk Exp $ */
 
 /// \page events_handling Handling of user events
 ///
@@ -605,6 +605,8 @@
     ///
     void flushHigherPriorityActionQueues();
 
+    character* findCharacterByTarget(const std::string& tgtstr) const;
+
 private:
 
     /// Listeners container




reply via email to

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