On Mon, 16 Jul 2007 15:27:44 -0300 "Andre Magalhaes" <[EMAIL PROTECTED]>
babbled:

excellent. will track from bugzilla from now on - first i need to clean out my
mailbox mess.

> Added to bugzilla:
> 
> http://bugzilla.enlightenment.org/show_bug.cgi?id=105 (evas patch)
> http://bugzilla.enlightenment.org/show_bug.cgi?id=106 (edje patch)
> 
> BR
> Andrunko
> 
> On 7/16/07, Andre Magalhaes <[EMAIL PROTECTED]> wrote:
> > Hi,
> >
> > On 7/16/07, The Rasterman Carsten Haitzler <[EMAIL PROTECTED]> wrote:
> > > On Mon, 9 Jul 2007 19:20:57 -0300 "Andre Magalhaes" <[EMAIL PROTECTED]>
> > > babbled:
> > >
> > > > Hey Raster,
> > > >
> > > > On 7/9/07, The Rasterman Carsten Haitzler <[EMAIL PROTECTED]> wrote:
> > > > > On Fri, 6 Jul 2007 18:00:08 -0300 "Andre Magalhaes"
> > > > > <[EMAIL PROTECTED]> babbled:
> > > > >
> > > > > > Hi all,
> > > > > >
> > > > > > As this is my first post here, let me introduce myself. I am Andre
> > > > > > Moreira Magalhaes, aka andrunko, and I work for INdT in Brazil.
> > > > >
> > > > > hey andre :)
> > > > >
> > > > > > Now let's go to the point. I am working on a project that requires
> > > > > > that an Evas_Object to have a custom click area. This object is a
> > > > > > non-retangular object (a circle for eg) with a transparent
> > > > > > backgroung. When i click on the background of this object, if the
> > > > > > click was in a transparent area this object shouldn't receive any
> > > > > > event. I was investigating the Evas code and i found 3 ways that
> > > > > > this could be done.
> > > > >
> > > > > currently evas doesn't do this. in theory it could - but it doesn't.
> > > > >
> > > > > > 1 - Change evas_object_was_in_output_rect to always return 0 if the
> > > > > > rect is in a transparent area of the object (not desired)
> > > > > > 2 - Change evas_object_event_callback_call to return a boolean value
> > > > > > indicating if the object handled the event and if not, keep sending
> > > > > > event to the other objects in the list. If the object handled the
> > > > > > event, stop there. This would require a lot of changes.
> > > > > > 3 - Change evas_object_was_in_output_rect to check a for a custom
> > > > > > "in_output_rect" method on the object, and if this method is set,
> > > > > > use it to check if the rect is in output rect. This would require a
> > > > > > new function, evas_object_is_in_output_rect_cb_set (or something
> > > > > > similar) that could be implemented whenever is needed. If this
> > > > > > method is not set, check the clip rectangle as it's done today.
> > > > >
> > > > > actually i already designed for this. there is an is_inside and
> > > > > was_inside method for objects. only line and polygon objects provide
> > > > > them and they just return 1 - these CAN be called if a point is
> > > > > inside the object rect and the code wants to determine if an event is
> > > > > still inside the object based on private object data (eg polygon
> > > > > outline, image pixel alpha channel data etc.). right now it basically
> > > > > isn't used - but its intent was to be used for this. the problem is
> > > > > this is actually relatively slow/expensive to do. you probably also
> > > > > want a way of enabling or disabling this level of event processing
> > > > > per object to save cost. so we probably need to add an object flag to
> > > > > use these methods, if they exist, or disable them (disabled by
> > > > > default), then provide methods for image objects at the least - then
> > > > > actually use them, if they are provided, and the flag is enabled for
> > > > > that object. implementing this won't be too hrd, but it won't be
> > > > > trivial. you need to be able to figure otu any x,y co-ord within the
> > > > > object and what pixel of the image that may map to based on
> > > > > paremeters of the object, then go check that pixel's alpha channel
> > > > > (if the image has an alpha channel). for polygon nd line objects you
> > > > > need to do some half-plane point intersection math (easy but its order
> > > > > (n) where n is the number of sides of the polygon). for lines its
> > > > > strange - you might want perfect inclusion, but that's a very small
> > > > > space unless its a thick line (doesn't exist currently). for text...
> > > > > thats hard as you need to figure out what character is in that x,y
> > > > > (that's easy) and then check the character glyph pixels to see if its
> > > > > inside...
> > > > >
> > > > > but anyway - i added this mechanism in at the very start but have
> > > > > never used it (or really needed it enough to implement the rest of
> > > > > it).
> > > > hmmm, i didn't know about this is_inside method, it's similar to what
> > >
> > > not surprising. it's hidden away for "one day when i might want to use
> > > it" :)
> > >
> > > > i wanted but with some improvements :D. Attached there is a patch to
> > > > implement it on evas_object_image and edje, and a callback to
> > > > enable/disable it. I didn't like the name convention but this is
> > > > something easy to change. I tested it here and it seems to be working.
> > > > This is my first patch to evas, so please let me know where i can
> > > > improve. Any comment is welcome
> > >
> > > you seem to have only implemented the evas-side of using this method and
> > > a very simple/primitive "get pixel" in evas_object_image_is_inside ().
> > > This doesn't handle border scaling and any form of fills other than
> > > "Scaling" fills. i think you really need to implement this - you need to
> > > take the x,y in canvas-co-ordinates, then convert this to a, x,y in the
> > > pixel array for the image (remember there is a fill origin and size so
> > > the image may get scaled differently to the size of the object, also its
> > > original can be offset. also there is border scaling that removes scaling
> > > for specified edges of the image that you need to account for in
> > > converting the canvas co-ord x,y into a pixel x,y reference).
> > hmmm, ok, i will fix this.
> >
> > > and as gustavo mentioned - this only covers argb32 images - doesn't
> > > handle yuv (though yuv will ALWAYS be "in" as there is no alpha channel
> > > so you can detect this and skip the check and return 1), and the 16bpp
> > > engine images too... alpha is a separate plane at the end.
> > This is already done in the last patch with stride support. It returns
> > 1 for yuv cspace and handles 32 and 16 bpp images.
> >
> > I will attach the last version of the patches again in case you missed it
> >
> > BR
> > Andrunko
> >
> > > > > > In the current code, i could do repeat_events=1 to make both objects
> > > > > > receive the event, and do nothing on the circle object if the
> > > > > > clicked area is a transparent area. The problem is that this won't
> > > > > > work for the lower widget, as it's always receive the event, even
> > > > > > if the circle handled it.
> > > > >
> > > > > see above - also add a flag to edje to enable or disable this event
> > > > > processing and bingo... all done. :)
> > > > >
> > > > > > Any other ideas on how to do it? I am willing to write a patch if
> > > > > > you agree. I would vote for number 3, as it's extensible, does not
> > > > > > require a lot of changes and does not impact on performance in the
> > > > > > default case (no custom is_in_output_rect method).
> > > > >
> > > > > none of the above - see my suggestion :)
> > > > >
> > > > > > Any help is appreciate,
> > > > > > BR
> > > > > > Andrunko
> > > > > >
> > > > > > -------------------------------------------------------------------------
> > > > > > This SF.net email is sponsored by DB2 Express
> > > > > > Download DB2 Express C - the FREE version of DB2 express and take
> > > > > > control of your XML. No limits. Just data. Click to get it now.
> > > > > > http://sourceforge.net/powerbar/db2/
> > > > > > _______________________________________________
> > > > > > 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] 裸好多
> > > > > Tokyo, Japan (東京 日本)
> > > > >
> > > >
> > > > BR
> > > > Andrunko
> > > >
> > >
> > >
> > > --
> > > ------------- Codito, ergo sum - "I code, therefore I am" --------------
> > > The Rasterman (Carsten Haitzler)    [EMAIL PROTECTED]
> > > 裸好多
> > > Tokyo, Japan (東京 日本)
> > >
> >
> >
> 


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

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to