On Sun, 21 Aug 2005 12:29:16 +0200 Simon TRENY <[EMAIL PROTECTED]> babbled:

> Hi Jose,

i think the real solution is to move child objects of a smart object out of the
regualr object list and into the smart objects' inernal list and do stacking
within an object only etc. thus rendering is now a recursive walk down smart
objects to and stacking is onyl WITHIN a smart object etc. this will sovle a
lot of these problems much mroe cleanly imho :)

> I don't know very well the evas internals but here is what I think.
> In my opinion, smart objects are only a way to combinate several 
> primitive evas objects and make them a coherent object. So I don't think 
> you'll need to add the prerender/postrender things in a smart object, 
> prerender and postrender are done in each member objects. If you want to 
> have more control on how your object is rendered, I think you have to 
> make a new primitive evas object and to add it directly in the evas API.
> 
> The main problem with smart objects currently is imho, the stacking 
> problem (i fact, I currently encounter this problem):
> If you do "evas_object_stack_above(obj, smart_object);" your object will 
> be stack above the smart object, but not necessarily above the member 
> objects of the smart object. In fact, it depends on how your smart 
> object and its member objects are ordered in the stack before the call.
> 
> For example, if we have two objects: a smart object called S (and whose 
> member objects are called M1, M2, ...) and a "normal" object called O. 
> Here are two codes that should do the same but that do not because of 
> this problem:
> (on the right is the order of the objects in the stack after each 
> function call)
> 
> 1rst example:
> evas_object_raise(S); --> "O M1 M2 ... S"
> evas_object_stack_above(O, S); --> "M1 M2 ... S O"
> So, with this example, object O appears indeed above the smart object 
> and its member objects.
> 
> 2nd example:
> evas_object_lower(S); --> "S M1 M2 ... O"
> evas_object_stack_above(O, S); --> "S O M1 M2 ..."
> Now, object O is indeed above the smart object, but not above its member 
> objects.
> 
> I think the cleanest solution (and probably the easiest to implement 
> too) is to add two functions to smart objects: "lower_get" and  
> "above_get" which should respectively return the lower member object of 
> the smart object and the "higher" one (I don't know if "higher" is the 
> good english word: I mean the member object that is the most on the top 
> of the stack). Then, when we call stack_above(obj1, obj2) or 
> stack_below(obj1, obj2), we check if obj2 is a smart object, and if it 
> is, we call respectively obj2->above_get() and obj2->lower_get() to know 
> above or below which evas object we should really stack obj1.
> 
> I don't know if I've been really clear, and I've probably said wrong 
> things :)
> 
> Simon TRENY <MoOm>
> 
> 
> Jose O Gonzalez a écrit :
> 
> >     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.
> >
> >
> >
> >-------------------------------------------------------
> >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
> >
> >
> >  
> >
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    [EMAIL PROTECTED]
裸好多                              [EMAIL PROTECTED]
Tokyo, Japan (東京 日本)


-------------------------------------------------------
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

Reply via email to