while I get most arguments, my preference is always to stick with
higher lever, more meaningful types... as explained in examples in
this thread, most confusing usages is when you have 2 sets of data,
like "cur, prev", then you come from 4 to 8 parameters (ie: color) and
errors are easier to happen.

benefits of having clear high level types is option to offer some
helpers for them, like rectangle intersection, getting the top-left,
top-right, bottom-left, bottom-right, center... points of a rectangle
instead of cumbersome manual math most people that are not used to gfx
don't get at first (cx = x + w / 2).

as we're taking a new API for Eo, we could take the opportunity to
improve that before removing BETA flag.

In C we could do single-line as:

    Eina_Rectangle r = efl_bla_geometry_get(o);
    efl_bla_geometry_set(o, r);
    efl_bla_geometry_set(o, eina_rectangle_intersection(r, boundary));
    efl_bla_geometry_set(o, eina_rectangle(0, 0, 10, 20));
    efl_bla_geometry_set(o, (Eina_Rectangle){.w = 10, .h = 20});



On Fri, Mar 31, 2017 at 10:14 AM,  <marcel-hollerb...@t-online.de> wrote:
> On Fri, Mar 31, 2017 at 07:59:01PM +0900, Carsten Haitzler wrote:
>> On Fri, 31 Mar 2017 11:55:34 +0200 marcel-hollerb...@t-online.de said:
>>
>> > On Fri, Mar 31, 2017 at 06:19:53PM +0900, Carsten Haitzler wrote:
>> > > On Fri, 31 Mar 2017 16:00:52 +0900 Conrad Um <con...@gmail.com> said:
>> > >
>> > > > This is similar to bu5hm4n's idea, but a little different. (Not pass by
>> > > > value, but reference)
>> > > > http://www.mail-archive.com/enlightenment-devel@lists.sourceforge.net/msg82744.html
>> > > >
>> > > > While studying oop, I found that properties are usually expressed as
>> > > > struct or object instead of multiple arguments.
>> > > >
>> > > > For example, "size" property usually accepts Size struct.
>> > > >     public struct  Size {
>> > > >         int width;
>> > > >         int height;
>> > > >     }
>> > > >     obj.size = new Size(100, 100); // This means "obj.setSize(new Size
>> > > > (100, 100));"
>> > > >
>> > > > In languages supporting property accessor expression like C# or Vala,
>> > > > multiple arguments cannot be expressed with that syntax. I think it is
>> > > > better to exchange a set of data in the type of object (or struct, it 
>> > > > can
>> > > > be considered as simplified object).
>> > > >
>> > > > Former example can be translated into the next.
>> > > >     Size size = { 100, 100 };
>> > > >     size_set(obj, &size);
>> > > >
>> > > > I know "size_set(obj, 100, 100)" is more simpler, but handling related
>> > > > variables with one set is more reasonable in point of oop. (Or we can 
>> > > > add
>> > > > c wrapper function like calling eo API by legacy API for more simple
>> > > > function signature)
>> > > >
>> > > > What do you think of this?
>> > >
>> > > i've thought about this before, and realistically using such structs for
>> > > size, geometry, color etc. just is more of a pain than a gain. it
>> > > theoretically looks nice but it just becomes far more of a pain in real
>> > > life to use. in general code gets longer and more verbose, not nicer.
>> >
>> > I dont think so at all. Just take it as a example, what looks nicer:
>> > Eina_Rectangle root, button;
>> >
>> > [... here some geometry gets from those two]
>> >
>> > Or
>> >
>> > int root_x, root_y, root_w, root_h, button_x, button_y, button_w,
>> > button_h;
>> >
>> > [ ... here the rest]
>> >
>> > What is more verbose?
>> >
>> >
>> > Just take a look at the elm_scroller code how much pain it is there with
>> > all the coords definitions. (elm_scroller.c:85, the _key_action_move
>> > function)
>> >
>> > Also, just having the var name once and not 4 times maybe invites to
>> > find better var names than c & v :P
>>
>> getting geometry or size or color is rarer than setting. some numbers for
>> elementary's code:
>>
>> color_get: 9
>> color_set: 93
>>
>> geometry_get + position_get + size_get: 380 + 5 + 4 (389)
>> evas_object_move + resize + size_set + position_set: 133 + 146 + 97 + 90 
>> (466)
>>
>> in enlightenment:
>>
>> color_get: 14
>> color_set: 128
>>
>> geometry_get + position_get + size_get: 325
>> evas_object_move + resize + size_set + position_set: 261 + 321 (582)
>>
>>
>> so COMMON code to set goes from:
>>
>>   blah_set(obj, 10, 20, 30, 40);
>>
>> to:
>>
>>   Color blah = {10, 20, 30, 40};
>>   blah_set(obj, blah); //or &blah
>>
>>
>> so it becomes FAR more verbose. a get goes from:
>>
>>   int r, g, b, a;
>>   blah_get(obj, &r, &g, &b, &a);
>>
>> to:
>>
>>   Color col;
>>   blah_get(obj, &col);
>>
>> or maybe:
>>
>>   Color col = blah_get(obj);
>>
>>
>> if you want to do struct returns (complex type returns). at BEST it is even 
>> and
>> the  gain on a get matches the LOSS on the set (you can typecast inline on 
>> the
>> set too and it just gets very long - so the same).
>>
>> BUT since sets are far more common than gets... you would overall lose. also 
>> as
>> a barrier of entry to learning having to write code like:
>>
>>   Color blah = {10, 20, 30, 40};
>>   blah_set(obj, blah);
>>
>> vs
>>
>>   blah_set(obj, 10, 20, 30, 40);
>>
>> really just make learning an api far more complex as really the first 
>> examples
>> people will learn are all sets not gets.
>>
>> historically gfx api's far more commonly break out colors, coordinates etc. 
>> as
>> params than group them into "complex types". i've seen a lot of gfx api's in 
>> my
>> life. from opengl through to cairo through to lots of very old ones (in basic
>> and other languages) ...
>
> Well the question here is since you are looking in e and efl, who often
> is geometery just setted to specified values? Isnt it most of the time
> setted to some relative value depending on a previous get? So the
> workflow is more get + modification on the container + set again. Which
> would be less code since most container functions in eina are offering
> usefull utility function, and if they do not, then its time to add them,
> since i would consider that common code.
>
> And still, we can generate 2 function types for containered function
> calls, one with the container one with the direct values,
> foo_set(rect) foo_set_D(x,y,w,h) for example, so even for the usecase
> of setting hardcoded values to a geometry you could have the direct way.
>
>>
>> > Greetings
>> >    bu5hm4n
>> >
>> > >
>> > > > Regards,
>> > > > Jeeyong Um (conr2d)
>> > > > ------------------------------------------------------------------------------
>> > > > Check out the vibrant tech community on one of the world's most
>> > > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> > > > _______________________________________________
>> > > > 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)    ras...@rasterman.com
>> > >
>> > >
>> > > ------------------------------------------------------------------------------
>> > > Check out the vibrant tech community on one of the world's most
>> > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> > > _______________________________________________
>> > > enlightenment-devel mailing list
>> > > enlightenment-devel@lists.sourceforge.net
>> > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>> >
>> > ------------------------------------------------------------------------------
>> > Check out the vibrant tech community on one of the world's most
>> > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> > _______________________________________________
>> > 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)    ras...@rasterman.com
>>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel



-- 
Gustavo Sverzut Barbieri
--------------------------------------
Mobile: +55 (16) 99354-9890

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to