[Top][All Lists]
[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
- [Gnash-commit] gnash ChangeLog server/movie_root.cpp server/sp...,
Sandro Santilli <=