On Thu, Jul 31, 2008 at 12:04 PM, Jorge Luis Zapata Muga <[EMAIL PROTECTED]> wrote: > On Thu, Jul 17, 2008 at 10:36 AM, Jose Gonzalez <[EMAIL PROTECTED]> wrote: >> As the subject states, let me make a (relatively) short summary of some >> proposed changes and additions to the evas gfx api -- and I'll deal with only >> gradients and a possible vgfx-objs api, leaving transforms (mostly) and >> filters >> for later. >> >> First, changes to the current gradient api. This would replace the >> current >> api with the following one: >> >> >> (1) For creating gradients: >> ********************** >> >> Evas_Object *evas_object_gradient_[type]_add(e); >> >> where the types are: linear and radial (and possibly later also angular, >> rectangular, triangular, sinusoidal, ...) >> >> >> (2) For setting gradient geometries (of a given type): >> ************************************************* >> >> void evas_object_gradient_[type]_fill_set(obj, [geometry desc]); >> >> >> Where the [geom desc] is: >> >> (a) for linear grads, >> >> void evas_object_gradient_linear_fill_set(obj, Evas_Coord x0, Evas_Coord y0, >> Evas_Coord x1, Evas_Coord >> y1); >> >> (b) for radial grads, >> >> void evas_object_gradient_radial_fill_set(obj, Evas_Coord cx0, Evas_Coord >> cy0, >> float rx, float ry); >> >> And we'd leave any other types for later as desired. >> >> >> >> (3) For setting the gradient geometry's "spread" (or repeat, or extend) >> mode: >> ************************************************************************ >> >> void evas_object_gradient_fill_spread_set(obj, int tile_mode); >> >> >> >> (4) For modifying the gradient geometry via a transform: >> *************************************************** >> >> void evas_object_gradient_fill_transform_set(obj, Evas_Transform *t); >> >> where an 'Evas_Transform' is defined as: >> >> struct Evas_Transform >> { >> float mxx, mxy, mxz; >> float myx, myy, myz; >> float mzx, mzy, mzz; >> }; >> >> ie. a 3x3 tmatrix which can be used to define a projective >> transformation >> or an affine one by ignoring the mzx,mzy,mzz components. Only affine >> ones >> supported for grad geometries (though the obj itself may support proj >> ones). >> >> >> >> (5) For clearing/defining the gradient obj's "spectrum": >> *************************************************** >> >> void evas_object_gradient_clear(obj); >> >> ie. remove any stops or data or whatnot from the gradient. >> >> >> void evas_object_gradient_color_np_stop_insert(obj, r, g, b, a, float pos); >> >> ie. insert a NON_PREMUL color at the given pos (clamped to be in [0,1]) >> >> And *possibly* also similar premul such, as exist currently: >> >> 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); >> >> void evas_object_gradient_color_data_set(obj, *data, len, has_alpha); >> void evas_object_gradient_alpha_data_set(obj, *data, len); >> >> >> That's it for basic gradient support (one could add more types, and one >> could add some funcs to query/modify stops if desired). >> >> The reasons for proposing these changes? >> >> To allow for direct support of gradients with various possible engine >> backends >> (eg. xrender, cairo, OpenVG, ... others). >> To have an api which is 'fitted' to what most all vgfx specs/lib-apis >> support >> with gradients. >> To more easily enable and represent various uses of gradients (including >> vgfx >> related ones like "texturing" of geometric figures with them). >> >> >> This then leads to a proposed api for vgfx-objects in evas -- and >> recall, by >> "vgfx-objects", we mean objs that can be "filled and/or stroked" (eg. lines, >> rects, >> polys, paths, ... maybe text) with a color or a "texture" (aka a paint or a >> pattern). >> > > Some time ago i had another idea that i've been implementing, some of > you already know enesim and ekeko, some other dont, let me explain why > i think adding this to evas is not good imho. > > One of the main reasons of not releasing software is that it evolves > too fast or it doesnt stabilize enough to make a stamp on a specific > version and release it; but that is a direct consequence on what your > lib wants to achieve. So im partisan of doing small things with solid > API, of course not too small that it will make the lib itself dumb, > but keep the objectives clear. > > Adding all of this to evas itself not only will make evas more bloated > but more unmaintainable and of course the release time will be > delayed, i'd like to share another idea that might help us achieve the > same goals jose is trying to do, but keeping the api itself of evas > clear enough. > > We are always on the objects/engines problem, how to support more > objects features and how to add more engines and the truth is that the > model we have right now doesnt scale too god, we are duplicating code > here and there for engines and we are limited with current objects for > fast drawing operations and smart objects for outsiders drawers whcih > might not be as fast as an insider object. > > The idea is to flip the concept, totally. Not make the fast objects as > inside objects and the engines as modules, but do both as modules with > a different approach, mainly object+engine approach. The idea can be > that an object (being a module or a library) register with evas for an > specific object name and engine name (of course both the module and > evas should share those names) like: > > evas_object_register(const char *name, const char *engine, Evas_Obj_Func); > > where the functions struct is something we already have but specific > for that engine type. For this to happen, evas should export the > needed functions and abstract the common code into exportable > functions too. > > Use cases: > - An engine doesnt support an object you are requesting natively? > Evas should always fallback to software engine in that case, the > drawing should be done on a user writable buffer and use the software > engine there. So every engine should be reduced to a minimal set of > functions: > > redraw() // redraws part of the engine output buffer > blt_buffer() // blit a buffer into engine output buffer > get_buffer() // get a buffer that the user can draw to > get_native_buffer() // get a native surface so the object-engine can > draw directly there > > - You want to build a private engine? > You should set this engine's minimal functions, if you also want to > provide accelerated objects for your engine, register a new object > with your engine's name and fill the needed functions > > If we can settle down the above, which i think won't be that difficult > to stabilize than the object's api, we would have gain a lot on > flexibility. And then the object's api can be stabilized. > > Why i started enesim? because of the above cases, allow the user to do > fancy graphics objects using enesim's primitives and direct rendering > approach and also for easy benchmarking of the software engine. > > Do you think is a good idea?
Sorry, but this should have gone to part ii. "i" and "i!" get mixed on my head > > >> Which I'll leave for a 'part II' of this thread... >> >> >> ____________________________________________________________ >> Click to become a designer and quit your boring job. >> http://thirdpartyoffers.juno.com/TGL2141/fc/Ioyw6i3l7L9Yyvs84mUKIe3vCf8GDVRRcB4RUunBX6sKcN8nFwKJPi/ >> >> ------------------------------------------------------------------------- >> 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 >> > ------------------------------------------------------------------------- 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