gnash-dev
[Top][All Lists]
Advanced

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

Re: [Gnash-dev] Re: [Gnash] Playing multiple movies at the same time


From: Sergio Garcia
Subject: Re: [Gnash-dev] Re: [Gnash] Playing multiple movies at the same time
Date: Mon, 20 Aug 2007 17:07:38 +0200


---------- Original Message ----------------------------------
From: strk <address@hidden>
Date:  Mon, 20 Aug 2007 12:25:19 +0200

>> I think that the first step should moving all the static functions and 
>> objets 
>> to the VM class or create a new one for that pourposse and point the static 
>> function 
>> to it. For example:
>
>I reccommend using the existing one. One nice thing of singletons is that it's
>easier to make them non-singleton classes.
> [..]
>Well, if the VM is not a singleton, VM::get() wouldn't make sense anymore.
>Rather, all VM-related parts (including characters, and the movie_root 
>(stage)) would
>need to have it's own pointer to the VM.
>
>> Later we should remove the static function call and add the reference to the 
>> appropiate
>> objects.
>
>Right.
>

What about the following patch to start with? I have move most of the statics 
to the vm and
create the getter/setters on it, then just proxy the statics function to the vm 
singleton ones.

I had to change also the constructor of the vm and create an object from the 
begining.

Next steps should be removing the renderer proxy and start adding a vm 
reference to the 
object that call the statics functions.

BR
Sergio
 
Index: server/impl.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/impl.cpp,v
retrieving revision 1.114
diff -r1.114 impl.cpp
75,82d74
<       /// Base url (for relative urls resolution)
<       //
<       /// we need an auto_ptr becase the URL class
<       /// is an immutable one and needs to be set 
<       /// at construction time..
<       ///
<       static std::auto_ptr<URL> baseurl;
< 
85,105c77,82
< // global Sound handler stuff. Should this be moved to the VM class ?
< static sound_handler* _sound_handler = 0;
< void  set_sound_handler(sound_handler* s) { _sound_handler = s; }
< sound_handler*        get_sound_handler() { return _sound_handler; }
< 
< void
< set_base_url(const URL& url)
< {
<       // can call this only once during a single run
<       assert(!globals::baseurl.get());
<       globals::baseurl.reset(new URL(url));
<       log_msg(_("Base url set to: %s"), globals::baseurl->str().c_str());
< }
< 
< const URL&
< get_base_url()
< {
<       // Don't call me if you haven't set me !
<       assert(globals::baseurl.get());
<       return *globals::baseurl;
< }
---
> // Moved to VM!! 
> void          set_sound_handler(sound_handler* s) { 
> VM::get().set_sound_handler(s); }
> sound_handler*        get_sound_handler() { return 
> VM::get().get_sound_handler(); }
> void          set_base_url(const URL& url) { VM::get().set_base_url(url); }
> const URL&    get_base_url() { return VM::get().get_base_url(); }
> void          set_use_cache_files(bool use_cache) { 
> VM::get().set_use_cache_files(use_cache); }
117,127d93
< static bool
< s_use_cache_files = false;
< 
< // Enable/disable attempts to read cache files when loading
< // movies.
< void
< set_use_cache_files(bool use_cache)
< {
<     s_use_cache_files = use_cache;
< }
< 
489c455
<       if (s_use_cache_files)
---
>       if (VM::get().get_use_cache_files())
Index: server/render.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/render.cpp,v
retrieving revision 1.16
diff -r1.16 render.cpp
9a10
> #include "VM.h"
21,22c22
<       static render_handler* s_render_handler = NULL;
< 
---
>       /// Moved to VM!!!
25c25
<               s_render_handler = r;
---
>               VM::get().set_render_handler(r);        
27d26
< 
30c29
<               return s_render_handler;
---
>               return VM::get().get_render_handler();
55a55
>                       render_handler* s_render_handler = 
> gnash::VM::get().get_render_handler();
65a66
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
76c77
<     
---
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
85a87
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
89a92
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
99a103
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
105a110
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
121a127
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
140a147
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
150a158
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
157a166
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
166a176
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
176a187
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
187a199
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
198a211
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
203a217
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
210a225
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
218a234
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
225a242
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
239a257
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
247a266
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
255a275
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
266a287
>                       render_handler* s_render_handler = 
> VM::get().get_render_handler();
Index: server/render.h
===================================================================
RCS file: /sources/gnash/gnash/server/render.h,v
retrieving revision 1.16
diff -r1.16 render.h
21,23d20
<       /// Return currently registered render handler
<       render_handler* get_render_handler();
< 
25a23,25
>       render_handler* get_render_handler();
>       void            set_render_handler(render_handler* r);
> 
Index: server/vm/VM.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/VM.cpp,v
retrieving revision 1.15
diff -r1.15 VM.cpp
42c42,43
< std::auto_ptr<VM> VM::_singleton;
---
> // Always created
> std::auto_ptr<VM> VM::_singleton(new VM());
44,45c45
< VM&
< VM::init(movie_definition& movie)
---
> VM::VM() : _use_cache_files(false)
47,48c47
<       // Don't call more then once !
<       assert(!_singleton.get());
---
> }
50c49,51
<       _singleton.reset(new VM(movie));
---
> VM::~VM()
> {
> }
51a53,55
> VM&
> VM::init(movie_definition& movie)
> {
53a58,61
>       //Save movie parameters
>       _singleton->_swfversion = movie.get_version();
>       _singleton->_start_time = tu_timer::get_ticks();
>       
67,68d74
<       // Did you call VM::init ?
<       assert(_singleton.get());
75,82c81
<       return _singleton.get();
< }
< 
< VM::VM(movie_definition& topmovie)
<       :
<       _swfversion(topmovie.get_version()),
<       _start_time(tu_timer::get_ticks())
< {
---
>       return _singleton->_root_movie.get();
85,90d83
< VM::~VM()
< {
<       // nothing to do atm, but we'll likely
<       // have to deregister lots of stuff when
<       // things are setup
< }
175a169,221
> void
> VM::set_base_url(const URL& url)
> {
>       // can call this only once during a single run
>       assert(!_baseurl.get());
>       _baseurl.reset(new URL(url));
>       log_msg(_("Base url set to: %s"), _baseurl->str().c_str());
> }
> 
> const URL&
> VM::get_base_url()
> {
>       // Don't call me if you haven't set me !
>       assert(_baseurl.get());
>       return *_baseurl;
> }
> 
> void
> VM::set_use_cache_files(bool use_cache)
> {
>       _use_cache_files = use_cache;
> }
> bool
> VM::get_use_cache_files()
> {
>       return _use_cache_files;
> }
> 
> void 
> VM::set_render_handler(render_handler* h)
> {
>       _render_handler = h;
> }
> 
> render_handler* 
> VM::get_render_handler()
> {
>       return _render_handler;
> }
> 
> void 
> VM::set_sound_handler(sound_handler* s)
> {
>       _sound_handler = s;
> }
> 
> sound_handler*
> VM::get_sound_handler()
> {
>       return _sound_handler;
> }
> 
> 
Index: server/vm/VM.h
===================================================================
RCS file: /sources/gnash/gnash/server/vm/VM.h,v
retrieving revision 1.14
diff -r1.14 VM.h
29a30
> #include "URL.h"
84,86c85
<       /// Initializes the GC singleton
<       ///
<       VM(movie_definition& movie);
---
>       VM();
216a216,226
>       void            set_render_handler(render_handler* h);
>       render_handler* get_render_handler();
> 
>       void            set_sound_handler(sound_handler* s);
>       sound_handler*  get_sound_handler();
> 
>       void            set_base_url(const URL& url);
>       const URL&      get_base_url();
> 
>       void            set_use_cache_files(bool use_cache);
>       bool            get_use_cache_files();
217a228,239
> private:
>       render_handler* _render_handler;
>       sound_handler*  _sound_handler;
>       bool            _use_cache_files;
> 
>       /// Base url (for relative urls resolution)
>       //
>       /// we need an auto_ptr becase the URL class
>       /// is an immutable one and needs to be set
>       /// at construction time..
>       ///
>       std::auto_ptr<URL> _baseurl;


reply via email to

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