[clutter] Asynchronous Lazy Actor and Containers API design

From: Alberto Ruiz <aruiz@gnome.org>
Date: Sun Aug 26 2007 - 00:40:02 EDT

Hi there,
I've been trying to figure out how to solve two use cases, and I've found a
lot of similarities:
  * Carousel album cover downloaded from internet.
  * Pdf asynchronous presentation (quite like what I did with opt (bug
#410), but asynchronously to save video memory).

In both use cases I want to save video memory as much as possible. I want to
write a generic set of classes for this purposes, this is my intial draft:

--- * ---
== PendingTaskActor ===
  - Used to give feedback about the loading state.
  - It would be also neat to provide a default one, so the user of the API
doesn't need to create it's own thing. I'm thinking in a generic spin or
something like that.
  - It should be possible to ask it not to waste any video memory (whenever
the task is done) without destroying it.

=== Async/LazyActor ===
  - The one that as a loaded/unloaded state and shows the PendingTaskActor
until the asynchronous operation is done
  - It should be possible to set/get the PendingTaskActor.
  - If the actor is unloaded, then it should waste as less memory as
possible.
  - It should has a "loaded" signal and load/unload members. The load should
be asynchronous.
  - Once the content is loaded, the PendingTaskActor should not waste video
memory.

=== Async/LazyContainer ===
  - This container is responsible to tell the lazy actor whether to load its
content into the memory or not.
  - It should has a list of lazy actors, and the user should set the number
of loaded actors
  - it should have a "current actor", the main one shown (the current album,
or the current pdf slide)
  - it should be possible to say how many actors are loaded before the
current actor, and after the currect actor (a shift value between 0.0 and
1.0)
  - next/prev members are needed.
  - It also should have one PendingTaskActor that should be used as a
pattern for the childs.
--- * ---

This is the first time that I try to write a GObject API for generic
purposes, and I don't know the clutter API very well, so I'll need some help
in the design of this, any input is really appreciated, some questions:

- What should I do to make an actor not to waste any video memory
- Should I implement the Async/LazyActor as an interface? May I implement it
as a ClutterContainer to be able to show the PendingTaskActor as well?
- How can I make the PendingTaskActor not to waste any video memory once the
content is loaded?
- Should I split the AsyncActor and the LazyActor as different interfaces?
- Am I on crack?

I've attached a diagram showing the idea more graphically.

PS: I'm going to implement it with Vala (don't worry I'll deal with Vala
issues with my friends at #vala).

-- 
Un saludo,
Alberto Ruiz
------=_Part_21413_24936776.1188103202112
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Hi there,<br>I&#39;ve been trying to figure out how to solve two use cases, and I&#39;ve found a lot of similarities:<br>&nbsp; * Carousel album cover downloaded from internet.<br>&nbsp; * Pdf asynchronous presentation (quite like what I did with opt (bug #410), but asynchronously to save video memory).
<br><br>In both use cases I want to save video memory as much as possible. I want to write a generic set of classes for this purposes, this is my intial draft:<br><br>--- * ---<br>== PendingTaskActor ===<br>&nbsp; - Used to give feedback about the loading
state.<br>&nbsp; - It would be also neat to provide a default one, so the user of
the API doesn&#39;t need to create it&#39;s own thing. I&#39;m thinking in a
generic spin or something like that.<br>&nbsp; - It should be possible to ask it not to waste any video memory (whenever the task is done) without destroying it.<br><br>=== Async/LazyActor ===<br>&nbsp; - The one that as a loaded/unloaded state and shows the PendingTaskActor until the asynchronous operation is done
<br>&nbsp; - It should be possible to set/get the PendingTaskActor. <br>&nbsp; - If the actor is unloaded, then it should waste as less memory as possible.<br>&nbsp; - It should has a &quot;loaded&quot; signal and load/unload members. The load should be asynchronous.
<br>&nbsp; - Once the content is loaded, the PendingTaskActor should not waste video memory.<br><br>=== Async/LazyContainer&nbsp; ===<br>&nbsp; - This container is responsible to tell the lazy actor whether to load its content into the memory or not.
<br>&nbsp; - It should has a list of lazy actors, and the user should set the number of loaded actors<br>&nbsp; - it should have a &quot;current actor&quot;, the main one shown (the current album, or the current pdf slide)<br>&nbsp; - it should be possible to say how many actors are loaded before the current actor, and after the currect actor (a shift value between 
0.0 and 1.0)<br>&nbsp; - next/prev members are needed.<br>&nbsp; - It also should have one PendingTaskActor that should be used as a pattern for the childs.<br>--- * ---<br><br>This is the first time that I try to write a GObject API for generic purposes, and I don&#39;t know the clutter API very well, so I&#39;ll need some help in the design of this, any input is really appreciated, some questions:
<br><br>- What should I do to make an actor not to waste any video memory <br>- Should I implement the Async/LazyActor as an interface? May I implement it as a ClutterContainer to be able to show the PendingTaskActor as well?
<br>- How can I make the PendingTaskActor not to waste any video memory once the content is loaded?<br>- Should I split the AsyncActor and the LazyActor as different interfaces?<br>- Am I on crack?<br><br>I&#39;ve attached a diagram showing the idea more graphically.
<br><br>PS: I&#39;m going to implement it with Vala (don&#39;t worry I&#39;ll deal with Vala issues with my friends at #vala).<br>-- <br>Un saludo,<br>Alberto Ruiz
------=_Part_21413_24936776.1188103202112--
------=_Part_21412_23431888.1188103202112
Content-Type: image/png; name=ClutterAsyncLazy.png
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f5t1wa0i
Content-Disposition: attachment; filename="ClutterAsyncLazy.png"
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
Nv+kh1AAAAAASUVORK5CYII=
------=_Part_21412_23431888.1188103202112--
-- 
To unsubscribe send a mail to clutter+unsubscribe@o-hand.com
Received on Sun, 26 Aug 2007 05:40:02 +0100

This archive was generated by hypermail 2.1.8 : Sun Aug 26 2007 - 01:00:06 EDT