-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 This one time, at band camp, Jose O Gonzalez wrote: > From: Jose O Gonzalez <[EMAIL PROTECTED]> > To: enlightenment-devel@lists.sourceforge.net > Date: Wed, 17 Aug 2005 01:00:38 -0400 > Subject: [E-devel] Smart objects > > > There are some aspects of evas' internals, particularly > in relation to "smart" objects, that I'd like to expound upon > here - especially since it relates to some issues I've met > while recently trying to finish off some things :) > > In evas, the addition of "clip" objects (and possibly > other kinds of 'modifier' objects, eg. filter objects, texture > objects, ...), and the addition of "smart" objects, has made > the internal logic of the canvas difficult to follow and > control - there's too much ambiguity as to who controls what, > responds to what, which functions are to be called when.., etc. > In order to have an efficient rendering path, and to > maintain flexibility with partly external objects like smart > objects (and with modifier types of objects like clip objects), > the canvas internals need to be somewhat redone. > > The main source of problems stems from the fact that > each layer maintains a list of all objects 'in' the layer. > Basically, when rendering the evas, one does something like: > for each layer, one steps thru its list of objects in a > 'pre-render' stage, and while doing this one builds another > list of objects which is then stepped thru in a 'render' stage, > and lastly one steps thru a 'post-render' stage. > Objects that are 'modifier' kinds of objects, like > clip objects, and objects which currently are not themselves > directly 'renderable', like smart objects, have to be excluded > from some of these steps - in the case of smart objects it's > because currently there's nothing for them to "do" to themselves > that wouldn't also involve doing things to their members.. > and that's going to (possibly) get done when stepping thru > the layers as we reach those member objects.. > > The point of the 'pre-render/post-render' stages is > mainly twofold: to allow for objects to determine what parts > of their state has changed since the 'last' rendering, and > to allow for objects to defer expensive computations and such, > until we are about to actually render the canvas.. > Thus, if possible, state changes are only 'realized' > internally when needed, and only those changes rel to the last > time rendering occurred. In particular, this allows one to > determine things like which areas need to be rendered again, > rather than having to render the entire canvas each time. > > Currently, there's no way to have smart objects > pre-render/render/post-render themselves unless we impose > restrictions on the stacking order of their member objects, > and/or modify the layers' object lists, and alter the rendering > path somewhat. > A partial step forward would be to provide smart objects > with the ability to specify 'pre-render' and 'post-render' kinds > of functions (eg. a 'text-formatting/layout' lib based on some > smart class would have the pre-render function do something > like: if object's layout state has changed, recalculate things > accordingly..). > > Increasing the requirements on the parent/child > relationship between smart objects and their members would > allow for further refinements of this, and even for an > (external) 'render' callback to be set on smart objects. > They still cannot access rendering internals, and any internal > rendering they might do on their own (by altering image data > via their own resources and such), they could just as well do > in the pre-render callback. > What it would allow is for a generic means to handle > the situation - one which would be useful to have for other > types which *could* access engine internals (like evas-objects). > It would allow one to define the internal default behavior > of the render function for smart objects, ie. to render > all their member objects (in their stacking order). It also > gives a coherent semantics to the behavior of things like > 'nested' smart objects, since one'd have a tree structure > formed out of the parent/child relationship. > > Some parts of the canvas code currently "tend" towards > adopting this kind of semantics, but it's not coherently applied > throughout. > Currently, a smart object's members can't quite make > up their minds wether they belong to the smart object, or to > the layer.. Right now they belong to both, in ways which vary > in semantics from function to function - not altogether clearly > or consistently. > > Let me try and give some idea of what I mean by this. > > Suppose you asked for the 'topmost' object in an evas, > ie. called the api function "evas_object_top_get(evas)". > Will you get the object which is at the top of the > stacking order? eg, will you get an object that you set via > "evas_object_raise(obj)" where you know that the obj belongs > to the topmost layer.. > Well, it depends... if the obj is a member of a smart > object then you won't. What you will get is the highest object > which has no 'parent', ie. is not a member of some smart object. > Similar behavior obtains with other stacking-order 'get' api > functions such as "evas_object_above_get". > > However, the related stacking-order 'set' functions like > "evas_object_raise", "evas_object_stack_above", and some of the > 'get' functions like "evas_object_top_at_xy_get", do not care > wether an object has a 'parent' or is a 'parent', at least not > as far as stacking order is concerned.. > > Similar variations exist for "event" related api functions > when dealing with the 'parent/child' relation that smart objects > have introduced. > > This is clearly not a well defined state of affairs -- > either smart objects "own" their children, and/or the layer does. > If both (so that smart objects are like disconnected > blobs), then what is a clear, consistent semantics for stacking > order, event handling, and associated api functions? > > Smart objects are just too wild.. :) > > > Jose.
I cannot believe no one has responded to this. I am not going to pretend to have an interesting response to this, but I can say that I did read your whole post and you did have some interesting things to say. Perhaps you should stop by #edevelop and discuss things with raster. At anyrate good stuff. Stephen - -- - ------------- Apó Mechanís Theós -------------- The Voidengineer (Stephen Horner) 悟 protocol.x at gmail.com PGP 0xCDC2DD2B -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQFDBr5GRRkTWiD8QjIRAqgsAKCNjv12baKXTUK9dwYbmF05HgnaywCfZoNV VuE2lfL7unX4ocukCiqlQb4= =2pEo -----END PGP SIGNATURE----- ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel