Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.5711.2.54 retrieving revision 1.5711.2.55 diff -u -r1.5711.2.54 -r1.5711.2.55 --- ChangeLog 4 Mar 2008 18:21:55 -0000 1.5711.2.54 +++ ChangeLog 3 Apr 2008 23:14:02 -0000 1.5711.2.55 @@ -1,3 +1,12 @@ +2008-04-04 Sandro Santilli + + * backend/Makefile.am: distribute ogl backend + * server/button_character_instance.cpp: provide a _name property + * server/dlist.cpp: fix invalidated bounds bug + * server/sprite_instance.{cpp,h}, server/parser/sound_definition.cpp, + server/vm/ASHandlers.cpp: always stop any streaming sound when the + sprite is stopped or unloaded. + 2008-03-04 Sandro Santilli * doc/C/Makefile.am: remove generated dox on 'make clean' Index: backend/Makefile.am =================================================================== RCS file: /sources/gnash/gnash/backend/Makefile.am,v retrieving revision 1.68 retrieving revision 1.68.2.1 diff -u -r1.68 -r1.68.2.1 --- backend/Makefile.am 21 Jan 2008 20:56:04 -0000 1.68 +++ backend/Makefile.am 3 Apr 2008 23:14:03 -0000 1.68.2.1 @@ -16,7 +16,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -# $Id: Makefile.am,v 1.68 2008/01/21 20:56:04 rsavoye Exp $ +# $Id: Makefile.am,v 1.68.2.1 2008/04/03 23:14:03 strk Exp $ ## Process this file with automake to generate Makefile.in @@ -59,7 +59,8 @@ render_handler_agg_bitmap.h \ render_handler_agg_compat.h \ render_handler_agg_style.h \ - render_handler_cairo.h + render_handler_cairo.h \ + render_handler_ogl.h # bin_PROGRAMS = gnash Index: server/button_character_instance.cpp =================================================================== RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v retrieving revision 1.81 retrieving revision 1.81.2.1 diff -u -r1.81 -r1.81.2.1 --- server/button_character_instance.cpp 11 Feb 2008 12:55:21 -0000 1.81 +++ server/button_character_instance.cpp 3 Apr 2008 23:14:03 -0000 1.81.2.1 @@ -225,6 +225,9 @@ gettersetter = new builtin_function(&character::target_getset, NULL); o.init_property("_target", *gettersetter, *gettersetter); + + gettersetter = new builtin_function(&character::name_getset, NULL); + o.init_property("_name", *gettersetter, *gettersetter); #if 0 Index: server/dlist.cpp =================================================================== RCS file: /sources/gnash/gnash/server/dlist.cpp,v retrieving revision 1.114 retrieving revision 1.114.2.1 diff -u -r1.114 -r1.114.2.1 --- server/dlist.cpp 19 Feb 2008 19:20:53 -0000 1.114 +++ server/dlist.cpp 3 Apr 2008 23:14:04 -0000 1.114.2.1 @@ -657,11 +657,15 @@ if (mask->boundsInClippingArea()) mask->display(); + else + mask->clear_invalidated(); // avoid stale flag render::end_submit_mask(); if (ch->boundsInClippingArea()) ch->display(); + else + ch->clear_invalidated(); // avoid stale flag render::disable_mask(); @@ -714,7 +718,9 @@ } if (ch->boundsInClippingArea()) - ch->display(); + ch->display(); + else + ch->clear_invalidated(); // avoid stale flag // Notify the renderer that mask drawing has finished. if (ch->isMaskLayer()) Index: server/sprite_instance.cpp =================================================================== RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v retrieving revision 1.480.2.2 retrieving revision 1.480.2.3 diff -u -r1.480.2.2 -r1.480.2.3 --- server/sprite_instance.cpp 4 Mar 2008 11:03:59 -0000 1.480.2.2 +++ server/sprite_instance.cpp 3 Apr 2008 23:14:04 -0000 1.480.2.3 @@ -180,16 +180,6 @@ sprite->set_play_state(sprite_instance::STOP); - // Stop sound stream as well, if such exist - int stream_id = sprite->get_sound_stream_id(); - if (sprite->get_sound_stream_id() != -1) { - media::sound_handler* sh = get_sound_handler(); - if (sh != NULL) sh->stop_sound(stream_id); - sprite->set_sound_stream_id(-1); - } - -/* media::sound_handler* sh = get_sound_handler(); - if (sh != NULL) sh->stop_all_sounds();*/ return as_value(); } @@ -2247,6 +2237,8 @@ sprite_instance::~sprite_instance() { + stopStreamSound(); + // We might have been deleted by Quit... //assert(isDestroyed()); @@ -2431,10 +2423,12 @@ return; } +#if 0 // why would we want to do this ? // Set the current sound_stream_id to -1, meaning that no stream are // active. If there are an active stream it will be updated while // executing the ControlTags. set_sound_stream_id(-1); +#endif // Execute the ControlTag actions // We set _callingFrameActions to true so that add_action_buffer @@ -3049,12 +3043,9 @@ } // Unless the target frame is the next one, stop playback of soundstream - int stream_id = get_sound_stream_id(); - if (target_frame_number != m_current_frame+1 && stream_id != -1) + if (target_frame_number != m_current_frame+1 ) { - media::sound_handler* sh = get_sound_handler(); - if (sh != NULL) sh->stop_sound(stream_id); - set_sound_stream_id(-1); + stopStreamSound(); } size_t loaded_frames = get_loaded_frames(); @@ -3817,9 +3808,8 @@ // It shouldn't happen anyway. // TODO: drop this function. - // Stop all sounds - media::sound_handler* sh = get_sound_handler(); - if (sh != NULL) sh->stop_all_sounds(); + // Stop any streaming sound associated with us + stopStreamSound(); if( ! isUnloaded() ) { @@ -4158,6 +4148,9 @@ log_debug(_("Unloading sprite '%s'"), getTargetPath().c_str()); #endif + // stop any pending streaming sounds + stopStreamSound(); + bool childHaveUnloadHandler = m_display_list.unload(); // We won't be displayed again, so worth releasing @@ -4500,6 +4493,8 @@ void sprite_instance::destroy() { + stopStreamSound(); + m_display_list.destroy(); /// We don't need these anymore @@ -4557,4 +4552,37 @@ } +void +sprite_instance::setStreamSoundId(int id) +{ + if ( id != m_sound_stream_id ) + { + log_debug("Stream sound id from %d to %d, stopping old", m_sound_stream_id, id); + stopStreamSound(); + } + m_sound_stream_id = id; +} + +void +sprite_instance::stopStreamSound() +{ + if ( m_sound_stream_id == -1 ) return; // nothing to do + + media::sound_handler* handler = get_sound_handler(); // TODO: chache ? + if (handler) + { + handler->stop_sound(m_sound_stream_id); + } + + m_sound_stream_id = -1; +} + +void +sprite_instance::set_play_state(play_state s) +{ + if ( s == m_play_state ) return; // nothing to do + if ( s == sprite_instance::STOP ) stopStreamSound(); + m_play_state = s; +} + } // namespace gnash Index: server/sprite_instance.h =================================================================== RCS file: /sources/gnash/gnash/server/sprite_instance.h,v retrieving revision 1.171 retrieving revision 1.171.2.1 diff -u -r1.171 -r1.171.2.1 --- server/sprite_instance.h 20 Feb 2008 14:46:28 -0000 1.171 +++ server/sprite_instance.h 3 Apr 2008 23:14:05 -0000 1.171.2.1 @@ -179,11 +179,11 @@ } /// Stop or play the sprite. - void set_play_state(play_state s) - { - //if (m_play_state != s) m_time_remainder = 0; - m_play_state = s; - } + // + /// If stopped, any stream sound associated with this sprite + /// will also be stopped. + /// + void set_play_state(play_state s); play_state get_play_state() const { return m_play_state; } @@ -743,11 +743,11 @@ #endif } - /// Set the current m_sound_stream_id - virtual void set_sound_stream_id(int id){ m_sound_stream_id = id; } - - /// Get the current m_sound_stream_id - virtual int get_sound_stream_id() { return m_sound_stream_id;} + /// Set the currently playing m_sound_stream_id + // + // TODO: rename to setStreamingSoundId + // + void setStreamSoundId(int id); /// Remove this sprite from the stage. // @@ -877,6 +877,8 @@ private: + void stopStreamSound(); + /// Register this sprite as a listener of core broadcasters // /// This is currently only used for key events broadcaster Index: server/parser/sound_definition.cpp =================================================================== RCS file: /sources/gnash/gnash/server/parser/sound_definition.cpp,v retrieving revision 1.10 retrieving revision 1.10.2.1 diff -u -r1.10 -r1.10.2.1 --- server/parser/sound_definition.cpp 24 Nov 2007 17:21:45 -0000 1.10 +++ server/parser/sound_definition.cpp 3 Apr 2008 23:14:05 -0000 1.10.2.1 @@ -48,7 +48,7 @@ if (handler) { // This makes it possible to stop only the stream when framejumping. - m->set_sound_stream_id(m_handler_id); + m->setStreamSoundId(m_handler_id); handler->play_sound(m_handler_id, 0, 0, m_start, NULL); } } Index: server/vm/ASHandlers.cpp =================================================================== RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v retrieving revision 1.199.2.1 retrieving revision 1.199.2.2 diff -u -r1.199.2.1 -r1.199.2.2 --- server/vm/ASHandlers.cpp 3 Mar 2008 09:22:39 -0000 1.199.2.1 +++ server/vm/ASHandlers.cpp 3 Apr 2008 23:14:05 -0000 1.199.2.2 @@ -17,7 +17,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // -/* $Id: ASHandlers.cpp,v 1.199.2.1 2008/03/03 09:22:39 strk Exp $ */ +/* $Id: ASHandlers.cpp,v 1.199.2.2 2008/04/03 23:14:05 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "gnashconfig.h" @@ -535,16 +535,8 @@ assert( code[thread.pc] == SWF::ACTION_STOP ); #endif - media::sound_handler* s = get_sound_handler(); - sprite_instance* tgt = env.get_target()->to_movie(); assert(tgt); - int stream_id = tgt->get_sound_stream_id(); - - if (s != NULL && stream_id != -1) - { - s->stop_sound(stream_id); - } tgt->set_play_state(sprite_instance::STOP); }