[Top][All Lists]
[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;