gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/movie_root.cpp server/sp...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/movie_root.cpp server/sp...
Date: Thu, 08 Feb 2007 17:01:01 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/02/08 17:01:01

Modified files:
        .              : ChangeLog 
        server         : movie_root.cpp sprite_instance.cpp 
                         sprite_instance.h 
        server/asobj   : MovieClipLoader.cpp 

Log message:
                * server/asobj/MovieClipLoader.cpp (loadClip): use the new
                  sprite_instance::loadMovie() method.
                * server/movie_root.cpp: keep root sprite alive during actions
                  execution.
                * server/sprite_instance.{cpp,h}: complete implementation of
                  MovieClip.loadMovie().

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2277&r2=1.2278
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.37&r2=1.38
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.151&r2=1.152
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.61&r2=1.62
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/MovieClipLoader.cpp?cvsroot=gnash&r1=1.15&r2=1.16

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2277
retrieving revision 1.2278
diff -u -b -r1.2277 -r1.2278
--- ChangeLog   8 Feb 2007 16:39:37 -0000       1.2277
+++ ChangeLog   8 Feb 2007 17:01:00 -0000       1.2278
@@ -1,4 +1,13 @@
-2007-02-07 Martin Guy <address@hidden>
+2007-02-08 Sandro Santilli <address@hidden>
+
+       * server/asobj/MovieClipLoader.cpp (loadClip): use the new
+         sprite_instance::loadMovie() method.
+       * server/movie_root.cpp: keep root sprite alive during actions
+         execution.
+       * server/sprite_instance.{cpp,h}: complete implementation of
+         MovieClip.loadMovie(). 
+
+2007-02-08 Martin Guy <address@hidden>
 
        * server/asobj/Number.cpp: Only do string-to-number conversion when
          text value is required, not on every math operation; moved text

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -b -r1.37 -r1.38
--- server/movie_root.cpp       5 Feb 2007 07:18:30 -0000       1.37
+++ server/movie_root.cpp       8 Feb 2007 17:01:01 -0000       1.38
@@ -446,6 +446,15 @@
        size_t prevframe = _movie->get_current_frame();
 #endif
 
+       // Keep root sprite alive during actions execution.
+       //
+       // This is *very* important, as actions in the movie itself
+       // could get rid of it. A simple example:
+       //
+       //      _root.loadMovie(other);
+       //
+       boost::intrusive_ptr<sprite_instance> keepMovieAlive(_movie.get());
+
        _movie->advance(delta_time);
 
 #ifdef GNASH_DEBUG

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -b -r1.151 -r1.152
--- server/sprite_instance.cpp  8 Feb 2007 16:23:28 -0000       1.151
+++ server/sprite_instance.cpp  8 Feb 2007 17:01:01 -0000       1.152
@@ -542,10 +542,11 @@
                //return;
        }
 
-       log_msg("MovieClip.loadMovie: url is %s", url.str().c_str());
+       sprite->loadMovie(url);
+       log_warning("MovieClip.loadMovie(%s) - TESTING ", url.str().c_str());
 
 
-       log_error("FIXME: %s not implemented yet", __PRETTY_FUNCTION__);
+       //log_error("FIXME: %s not implemented yet", __PRETTY_FUNCTION__);
        //moviecliploader_loadclip(fn);
 }
 
@@ -3535,4 +3536,66 @@
        
 }
 
+bool
+sprite_instance::loadMovie(const URL& url)
+{
+       boost::intrusive_ptr<movie_definition> md ( create_library_movie(url) );
+       if (md == NULL)
+       {
+               log_error("can't create movie_definition for %s\n",
+                       url.str().c_str());
+               return false;
+       }
+
+       boost::intrusive_ptr<movie_instance> extern_movie;
+       extern_movie = md->create_movie_instance();
+       if (extern_movie == NULL)
+       {
+               log_error("can't create extern movie_instance "
+                       "for %s\n", url.str().c_str());
+               return false;
+       }
+
+       save_extern_movie(extern_movie.get());
+
+       const char* name = get_name().c_str();
+       uint16_t depth = get_depth();
+       bool use_cxform = false;
+       cxform color_transform = get_cxform();
+       bool use_matrix = false;
+       matrix mat = get_matrix();
+       float ratio = get_ratio();
+       uint16_t clip_depth = get_clip_depth();
+       //character* new_movie = extern_movie->get_root_movie();
+
+       // Get a pointer to our own parent 
+       character* parent = get_parent();
+       if ( parent )
+       {
+               extern_movie->set_parent(parent);
+
+               sprite_instance* parent_sp = parent->to_movie();
+               assert(parent_sp);
+               parent_sp->replace_display_object(
+                                  extern_movie.get(),
+                                  name,
+                                  depth,
+                                  use_cxform,
+                                  color_transform,
+                                  use_matrix,
+                                  mat,
+                                  ratio,
+                                  clip_depth);
+       }
+       else
+       {
+               movie_root& root = _vm.getRoot();
+               // Make sure we won't kill ourself !
+               assert(get_ref_count() > 1);
+               root.setRootMovie(extern_movie.get());
+       }
+
+       return true;
+}
+
 } // namespace gnash

Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -b -r1.61 -r1.62
--- server/sprite_instance.h    3 Feb 2007 23:02:07 -0000       1.61
+++ server/sprite_instance.h    8 Feb 2007 17:01:01 -0000       1.62
@@ -17,7 +17,7 @@
 // 
 //
 
-/* $Id: sprite_instance.h,v 1.61 2007/02/03 23:02:07 strk Exp $ */
+/* $Id: sprite_instance.h,v 1.62 2007/02/08 17:01:01 strk Exp $ */
 
 // Stateful live Sprite instance
 
@@ -445,6 +445,11 @@
 
        sprite_instance* to_movie () { return this; }
 
+       /// Load a movie in this sprite, replacing it
+       //
+       /// Return: true if it succeeded, false otherwise
+       ///
+       bool loadMovie(const URL& url);
 
        //
        // ActionScript support

Index: server/asobj/MovieClipLoader.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/MovieClipLoader.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- server/asobj/MovieClipLoader.cpp    18 Jan 2007 22:53:21 -0000      1.15
+++ server/asobj/MovieClipLoader.cpp    8 Feb 2007 17:01:01 -0000       1.16
@@ -186,22 +186,9 @@
        //       the loading thread actually started
        dispatchEvent("onLoadStart", events_call);
 
-       boost::intrusive_ptr<movie_definition> md ( create_library_movie(url) );
-       if (md == NULL)
-       {
-               log_error("can't create movie_definition for %s\n",
-                       url.str().c_str());
-               return false;
-       }
+       bool ret = target.loadMovie(url);
+       if ( ! ret ) return false;
 
-       boost::intrusive_ptr<sprite_instance> extern_movie;
-       extern_movie = md->create_instance();
-       if (extern_movie == NULL)
-       {
-               log_error("can't create extern movie_interface "
-                       "for %s\n", url.str().c_str());
-               return false;
-       }
 
        /// This event must be dispatched when actions
        /// in first frame of loaded clip have been  executed.
@@ -215,37 +202,6 @@
        ///
        dispatchEvent("onLoadInit", events_call);
   
-
-       save_extern_movie(extern_movie.get());
-
-       const char* name = target.get_name().c_str();
-       uint16_t depth = target.get_depth();
-       bool use_cxform = false;
-       cxform color_transform =  target.get_cxform();
-       bool use_matrix = false;
-       matrix mat = target.get_matrix();
-       float ratio = target.get_ratio();
-       uint16_t clip_depth = target.get_clip_depth();
-       character* new_movie = extern_movie->get_root_movie();
-
-       // Get a pointer to target's sprite parent 
-       character* parent = target.get_parent();
-       assert(parent);
-       new_movie->set_parent(parent);
-
-       sprite_instance* parent_sp = dynamic_cast<sprite_instance*>(parent);
-       assert(parent_sp);
-       parent_sp->replace_display_object(
-                          new_movie,
-                          name,
-                          depth,
-                          use_cxform,
-                          color_transform,
-                          use_matrix,
-                          mat,
-                          ratio,
-                          clip_depth);
-
        struct mcl *mcl_data = getProgress(&target);
 
        // the callback since we're done loading the file




reply via email to

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