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