On Tue, 10 Apr 2007 13:02:56 +0200 Cedric BAIL <[EMAIL PROTECTED]> babbled:
> On Tuesday 10 April 2007 01:13:16 Jorge Luis Zapata Muga wrote: > > On 4/7/07, The Rasterman Carsten Haitzler <[EMAIL PROTECTED]> wrote: > > > On Wed, 21 Mar 2007 17:45:43 +0100 Cedric BAIL <[EMAIL PROTECTED]> > > > babbled: > > > > > > i'll do this one first - it's less work than the sdl engine + cache +.... > > > one :) > > :) > > > > > Another discussion, this time about events. During my test of SDL > > > > engine, I did like the key repeat functionnality of SDL, but it wasn't > > > > possible to easily expose it to evas. So I just added a > > > > EVAS_CALLBACK_KEY_REPEAT with the corresponding > > > > 'evas_event_feed_key_repeat'. It seems quite logic and work. See > > > > evas_key_repeat.diff. > > > > hmmm- is the point of this to send a key repeat event diferently to a > > > normal keydown/up - the reason i never had this is basically from the > > > hardware or x point of view - it's just more key down/up events. key > > > repeat is done by the keyboard controller - or if not inside x itself. x > > > apps dont know it's a repeat event. > > Yes, it's basically more keydown event (no up corresponding to the repeat > event). I tested sdl key repeat, and fowarded them, just like keydown. In > some case, I started to put code in the keydown event just to know if it was > a repeat (basically testing a boolean, if a previous keydown event occur and > without keyup). Looking at the result, I just think evas could send me > directly the right even, removing the need to handle the special keydown in > apps, but just in Ecore. > I don't know how X handle it, and taking a look at how SDL does the > job when running in X didn't look really obvious to me. in x, when you get a key repeat, you simply get a key up event then another key down. you actually can't tell its a key repeat event at all. so in x you won't be able to flag a repeated key event. > > > > I don't know what is the policy for adding new events, but SDL > > > > could also expose some Joystick events: > > > > SDL_JoyAxisEvent -- Joystick axis motion event structure > > > > SDL_JoyButtonEvent -- Joystick button event structure > > > > SDL_JoyHatEvent -- Joystick hat position change event structure > > > > SDL_JoyBallEvent -- Joystick trackball motion event structure > > > > Would people object if I come up with some evas event for this also ? > > > > This would be nice, if an Ecore SDL was able to directly feed them to > > > > evas. But I will understand that it's not the primary usage/goal of > > > > evas. > > > > > > i wouldn't object at all. the evas events are intended to be extended and > > > become a superset of whatever input devices exist. if it makes sens to > > > re-use existing systems (key events or mouse) then use them (eg remote > > > controls imho should be key events). one thing i think i do need to do is > > > exten evas and ecore etc. events to allow for multiple mice and keyboards > > > so you can tell which one is which. this of course means an abi break - > > > add members to structs, but thats why we are still at 0.x :) so summary - > > > yes. adding these is perfectly fine. > > > > > > > On the same subject, it would also be nice if we could handle > > > > multiple device easily in evas. From what I see, the only thing that is > > > > needed is a 'char* device' in all struct _Evas_Event and breaking all > > > > evas_event_feed functions prototype by adding a device parameter. The > > > > device could be set to NULL, so all existing code will still work with > > > > very few modification (mainly in ecore). > > > > Would people be interested/object to this kind of patch ? > > > > > > yes - definitely. i think you need to actually do 2 things. you need to > > > add an typedef enum _Evas_Device_Class { > > > EVAS_DEVICE_CLASS_MOUSE, > > > EVAS_DEVICE_CLASS_KEYBOARD, > > > /* Extend as needed */ > > > } Evas_Device_Class; > > > typedef struct _Evas_Device Evas_Device; > > > > > > struct _Evas_Device { > > > int version; /* starting version 1 */ > > > int num; /* device number - guaranteed to always be there. the "default" > > > device is 0, but extra devices may be 1, 2, 3 etc. this is unique with > > > the device class so the first mouse is device 0, the 2nd is device 1. the > > > first keyboard is device 0, the second is device 1 etc. */ > > > Evas_Device_Class clas; /* The class of device - EVAS_DEVICE_CLASS_MOUSE, > > > EVAS_DEVICE_CLASS_KEYBOARD etc. */ > > > const char *name; /* This may not exist - or > > > may be synthesized. this only lets you get a better idea of the device > > > (eg "Logitech Mouse" or "Microsoft Keyboard > > > - Natural Media" etc.) */ > > > /* NB: This structure may be extended in the future - version will > > > indicate how much it has extended */ > > > }; > > > > > > then every event in evas that comes FROM a device add a > > > > > > const Evas_Device *dev; > > > > > > to the structure - this way in future we can extend the meaning of a > > > device without breaking event structs. (same with event feed calls) > > > > > > of course we will need ways to add and delete devices from evas in > > > general and modify them, list them etc. > > > > > > i.e. > > > > > > Evas_Device *evas_device_add(void); > > > void evas_device_del(Evas_Device *dev); > > > const Evas_List *evas_device_list(void); > > > void evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas); > > > void evas_device_name_set(Evas_Device *dev, const char *name); > > > > > > etc. > > > > > > it would be ecore_evas's job to init evas with at least basic devices > > > (mouse, keyboard - you can add joystick etc. to this too). > > > > > > sound useful? > > > Sounds very similar to what i did to ecore_fb a while ago, indeed very > > usefull. Just one thing, instead of defining the device classes as > > "device types" (keyboard, joystick, mouse, touchpad, touchscreen, etc) > > wouldnt be better to define them as "device capabilities" > > (absolute/relative axes, buttons/keys, etc) so a keyboard has only > > capabilities of button/keys, a mouse has relative axes, a touchscreen > > absolute axes, and so on ... ? In case of a special device it just > > need to "or" the different capabilities it has. > > Hmmm, I don't know how we can use this extra bit of information. The > evas_event_feed_mouse_move and evas_event_feed_mouse_wheel will need to be > merged in that case (not saying we will need to handle the long list of > others defined relative/absolute axes from the Linux kernel). Computing move > and wheel event from inside evas sound strange to me. > I would rather define 3 class : > #define EVAS_DEVICE_CLASS_KEYS 0x1 > #define EVAS_DEVICE_CLASS_MOTION 0x2 > #define EVAS_DEVICE_CLASS_WHEEL 0x4 > > Changing the struct _Evas_Device to : > struct _Evas_Device { > int version; /* Already version 2 ;) */ > int number; /* Unique number given by evas. */ > > /* A bitmask of the different class. */ > int class; > > /* Number of "motion" plane. */ > int motions; > /* Number of wheel. */ > int wheels; > > /* Could be NULL, synthetized or provided during initialization, just > to give a better idea of the device. */ > const char* name; > }; and this is meant to cover keyboards as well? i think this isn't THAT useful without many more extensions like: int buttons; int axes; etc. i think we may be going a bit too far in trying to generalise all devices as a series of properties in a single device framework. > The functions initializing this structure are almost the same : > Evas_Device *evas_device_add(void); > void evas_device_del(Evas_Device *dev); > const Evas_List *evas_device_list(void); > void evas_device_class_set(Evas_Device *dev, int class, int motions, > int wheels); > void evas_device_name_set(Evas_Device *dev, const char *name); > > But feeding event will need some change: > void evas_event_feed_motion(Evas *e, int x, int y, unsigned int > timestamp, const Evas_Device *device, int plane, const void *data); > void evas_event_feed_wheel(Evas *e, int z, unsigned int timestamp, > const Evas_Device *device, int index, const void *data); > > The others should look the same: > void evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const > Evas_Device *device, const void *data); > void evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const > Evas_Device *device, const void *data); > void evas_event_feed_key_down(Evas *e, const char *keyname, const > char *key, const char *string, const char *compose, unsigned int timestamp, > const Evas_Device *device, const void *data); > void evas_event_feed_key_up(Evas *e, const char *keyname, const char > *key, const char *string, const char *compose, unsigned int timestamp, const > Evas_Device *device, const void *data); > > What do you think about this proposition ? > > Cedric > > PS: Sorry for the previous mail, with huge line, don't know what my mailer > was thinking... > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > 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 (東京 日本) ------------------------------------------------------------------------- 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