On Wed, 09 Jul 2008 19:33:14 -0400 Jose Gonzalez <[EMAIL PROTECTED]> babbled:
it's a matter of how high level you want the api. in fact your end api (the minimal one) is exactly what my original gradient api had.. just add a point a distance from another with a color - it's linear interpolation. clear it and re-fill it again when you want to change i. if you want different interpolation types (logarithmic, etc.) a higher level api can break this down int a series of linear interp points. the more points - the better the quality. the other option is to be able to define gradient interp point angles(like defining a spline curve...) but evas has nothing for that currently... so a simple linear point api means there is less to worry about... for now :) but i've never been into gradients. personally. so i am not the one to comment. i'm no expert nor do i have vested interests. so don't take my comments too seriously. > >>>> So, if anyone has any comments, suggestions, issues.. *anything* with > >>>> evas gradients -- now would be a good time to pipe in. :) > >>>> > >>> > >>> I'd _love_ using gradients, in fact I would use them much more > >>> often, _if_ not everytime I start using them, it all feels like I'm > >>> operating a powerful machine that has 100s of controls and I don't > >>> understand anything. > >>> > >>> Perhaps this is an inherent problem from the gradient complexity, > >>> but I'd appreciate if we had some documentary material that outlines > >>> how to achieve which kind of results, which gradient type to use for > >>> what, how many stops for what effect etc. etc. > >>> > >> > >> Ok, let me try and give you a fairly simplified description of what > >> gradients are basically about, and how evas tries to deal with this.. > >> for > >> better or worse. > >> > >> ....... > >> ....... > >> ....... But to get back to the subject at hand here, and > >> before going on to give > >> more details on current evas gradients, let me ask you this: > >> How would you answer the above two 'general' questions.. or rather, > >> what would > >> *you* like to see as an api that would make you want to use gradients > >> more? > >> > > > > Not much time to reflect on this? Well, that's understandable :) > > Let me go ahead and review the current set of gradient api funcs in evas, > > give some criticisms, and propose some changes I'd like to make to > > improve > > things there (and yes, they would break all gradient stuff). > > > > First, recall I mentioned the two parts involved in gradients: > > 1) Those aspects related to defining a 1-dim image (or "spectrum" as I > > sometimes call it). > > 2) Those aspects related to defining how to map the above to a 2-dim > > region - and this covers things like the gradient type, spread-mode, > > and such things. > > > > Ok, for (1) in evas we currently have the following (set) api funcs: > > > > void evas_object_gradient_color_stop_add(obj, r,g,b,a, int delta); > > void evas_object_gradient_alpha_stop_add(obj, a, int delta); > > void evas_object_gradient_color_data_set(obj, *data, len, has_alpha); > > void evas_object_gradient_alpha_data_set(obj, *data, len); > > void evas_object_gradient_direction_set(obj, *data, int direction); > > void evas_object_gradient_offset_set(obj, *data, float offset); > > and also, > > void evas_object_gradient_clear(obj); > > > > The 'clear' api func removes any stops or data that might have been > > set before. > > The 'offset' api func effectively moves the origin of the 1-dim > > image, > > this is something that as far as I know isn't supported by any vgfx > > api/spec > > (which is unfortunate since it can give very nice animation effects > > which are > > otherwise difficult to obtain for some gradient types, eg. radial ones). > > The 'direction' api func just reverses the start/end of the 1-dim, > > and though not directly supported by most vgfx apis/specs, it can be > > easily > > obtained - it's mostly a simple convenience function. > > The 'color_data' and 'alpha_data' api funcs are to allow for setting > > such a 1-dim image with premul and alpha-only data, rather than going > > thru > > any kind of procedural description. It's not supported by any vgfx > > api/spec > > that I know of, not directly anyway.. though you can certainly > > consider such > > data as an equi-distant set of stops and add it that way (modulo some > > gymnastics > > with premul data and alpha masks and such). > > > > The 'color_stop' and 'alpha_stop' api funcs evas' current procedural > > descriptions for defining the spectrum -- and these I have real issues > > with. > > > > Not only is this method of specifying stops not supported by any > > 'standard' vgfx api/spec, the use of the "int delta" as either some kind > > of 'weight' or maybe 'distance to a next' is somewhat un-intuitive and > > very > > difficult to work with for gui editors and such. > > I propose getting rid of this legacy stuff (inhereted from the > > equally > > archaic Imlib2 method), and adopt a more standard method. > > > > In fact, let's start from scratch altogether here and let me propose > > a minimal set of grdient-spectrum related api functions that more closely > > matches what's given by most vgfx apis/specs: > > > > void evas_object_gradient_clear(obj); > > // keep this one > > > > void evas_object_gradient_color_stop_insert(obj, r,g,b,a, float pos); > > // where 'pos' is clamped to be in [0,1]. Any previous stop at same pos > > // will be overwritten. Must insert one stop at pos 0 and one at pos 1 > > // to get a valid gradient spectrum. > > > > This and matches what most use. One could then possibly add the > > following > > funcs to make it easier/more-intuitive to input, query, and manipulate > > such > > gradient stops: > > > > void evas_object_gradient_color_stop_get(obj, int index, > > *r,*g,*b,*a,*pos); > > // get the value of the stop at 'index', where these are ordered from > > 0 to > > // (number_of_stops - 1) according to increasing position. If 'index' > > is >= > > // the current number of stops, or index < 0, this does nothing. > > > > void evas_object_gradient_color_stop_set(obj, int index, r,g,b,a,pos); > > // modifies the r,g,b,a,pos values of the stop at the given index, > > // where 'pos' is clamped to lie between the prev and next (if any) stop > > // positions in the gradient, and again does nothing if 'index' >= > > current > > // number of stops or index < 0. > > > > void evas_object_gradient_color_stop_remove(obj, int index); > > // removes the color stop at that index, where again the index needs to > > // be valid or nothing is done. > > > > Before continuing, let me point to another big issue - namely, > > whether > > the "r,g,b,a" should be taken as premul color data and then also add > > support > > for a similar set of api funcs that deal with separate alpha_stops... OR, > > should one take these gradient stops as being given by non-premul > > color data? > > The latter is what just about all vgfx apis/specs support - for better > > or worse. > > If writing engines that are more directly able to use apis like > > cairo > > or other common vgfx ones is important, then I suggest going with this... > > If more flexibility is desired then go with separate premul-color & > > alpha stops. > > > > The other api funcs are optional, so if minimality, and vgfx > > apis/specs > > comformance is desired, then get rid of: > > > > void evas_object_gradient_color_data_set(obj, .....); > > void evas_object_gradient_alpha_data_set(obj, .....); > > void evas_object_gradient_direction_set(obj, .....); > > void evas_object_gradient_offset_set(obj, .....); > > > > > > If no one has any comments on anything, I suggest getting rid of > > everything > > currently there for spectrum related funcs and only having the minimal > > two: > > > > void evas_object_gradient_clear(obj); > > void evas_object_gradient_color_stop_insert(obj, r,g,b,a, float pos); > > > > where the r,g,b,a is assumed to be non-premul. > > > > This would make things much more "standard" for this aspect (1) > > of gradients. > > > > I negelected to directly give the next, > not-quite-so-standard-but-more-flexible, minimal alternative.. namely, keep > colors as premul and have color and alpha stops: > > void evas_object_gradient_clear(obj); > void evas_object_gradient_color_stop_insert(obj, r,g,b,a, float pos); > void evas_object_gradient_alpha_stop_insert(obj, a, float pos); > > and possibly then also keep the current color/alpha data set ones for even > greater flexibility if desired: > > void evas_object_gradient_color_data_set(obj, .....); > void evas_object_gradient_alpha_data_set(obj, .....); > > > ____________________________________________________________ > Fabulous Spa Getaway! > Enter for your chance to WIN great beauty prizes everyday! > http://thirdpartyoffers.juno.com/TGL2141/fc/JKFkuJi7UrpfIisWJuFAa5Blk8IJUvnmOcuUdwidma0Bhxaf49tP7K/ > > ------------------------------------------------------------------------- > Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! > Studies have shown that voting for your favorite open source project, > along with a healthy diet, reduces your potential for chronic lameness > and boredom. Vote Now at http://www.sourceforge.net/community/cca08 > _______________________________________________ > 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] ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel