Vitaly, wouldn't an *empty* MovieClip just be a sprite rather then a full movie ? So far I've understood that we're using movie_def_impl for *full* movies, and not for sprite. What about moving the *empty* movieclip thing into sprite_definition instead ? a sprite_definition still inherits from movie_definition if that is the problem.
--strk; On Thu, Sep 21, 2006 at 04:03:30PM +0000, Vitaly Alexeev wrote: > CVSROOT: /sources/gnash > Module name: gnash > Changes by: Vitaly Alexeev <alexeev> 06/09/21 16:03:30 > > Modified files: > server : sprite_instance.cpp > > Log message: > added remove_movieclip() & create_empty_movieclip() > > CVSWeb URLs: > http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.56&r2=1.57 > > Patches: > Index: sprite_instance.cpp > =================================================================== > RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v > retrieving revision 1.56 > retrieving revision 1.57 > diff -u -b -r1.56 -r1.57 > --- sprite_instance.cpp 21 Sep 2006 13:54:45 -0000 1.56 > +++ sprite_instance.cpp 21 Sep 2006 16:03:30 -0000 1.57 > @@ -115,6 +115,25 @@ > sprite->set_play_state(movie_interface::STOP); > } > > +//removeMovieClip() : Void > +static void sprite_remove_movieclip(const fn_call& fn) > +{ > + assert(dynamic_cast<sprite_instance*>(fn.this_ptr)); > + sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr); > + if (sprite == NULL) > + { > + sprite = dynamic_cast<sprite_instance*>(fn.env->get_target()); > + } > + > + assert(sprite); > + > + sprite_instance* parent = (sprite_instance*) sprite->get_parent(); > + if (parent) > + { > + parent->remove_display_object(sprite->get_depth(), 0); > + } > +} > + > //createEmptyMovieClip(name:String, depth:Number) : MovieClip > static void sprite_create_empty_movieclip(const fn_call& fn) > { > @@ -665,6 +684,7 @@ > as_builtins.set_member("swapDepths", &sprite_swap_depths); > as_builtins.set_member("getDepth", &sprite_get_depth); > as_builtins.set_member("createEmptyMovieClip", > &sprite_create_empty_movieclip); > + as_builtins.set_member("removeMovieClip", &sprite_remove_movieclip); > > // @TODO > //as_builtins.set_member("startDrag", &sprite_start_drag); > @@ -1033,27 +1053,26 @@ > assert(m_action_list.size() == top_action); > } > > -// TODO > -character* sprite_instance::add_empty_movieclip(const char* /*name*/, int > /*depth*/) > +character* sprite_instance::add_empty_movieclip(const char* name, int depth) > { > -// cxform color_transform; > -// matrix matrix; > + cxform color_transform; > + matrix matrix; > > -// movie_definition* mdef = new movie_def_impl(DO_LOAD_BITMAPS, > DO_LOAD_FONT_SHAPES); > -// sprite_instance* sprite = new sprite_instance(m_def.get_ptr(), > m_root, this, 0); > -// m_display_list.remove_display_object(depth); > -// m_display_list.place_character( > -// sprite, > -// depth, > -// color_transform, > -// matrix, > -// 0.0f, > -// 0); > + // empty_mdef will be deleted during deliting sprite > + movie_def_impl* empty_mdef = new movie_def_impl(DO_EMPTY_MOVIECLIP, > DO_LOAD_FONT_SHAPES); > > -// return sprite; > - log_warning("add_empty_movieclip unimplemented"); > + sprite_instance* sprite = new sprite_instance(empty_mdef, m_root, > this, 0); > + sprite->set_name(name); > > - return NULL; > + m_display_list.place_character( > + sprite, > + depth, > + color_transform, > + matrix, > + 0.0f, > + 0); > + > + return sprite; > } > > void sprite_instance::clone_display_object(const tu_string& name, > > > _______________________________________________ > Gnash-commit mailing list > [email protected] > http://lists.gnu.org/mailman/listinfo/gnash-commit -- /"\ ASCII Ribbon Campaign \ / Respect for low technology. X Keep e-mail messages readable by any computer system. / \ Keep it ASCII. _______________________________________________ Gnash-commit mailing list [email protected] http://lists.gnu.org/mailman/listinfo/gnash-commit
