[GEM-dev] Re: multiple_window: the questions begin!

Hans-Christoph Steiner hans at eds.org
Mon Dec 6 21:33:43 CET 2004


This whole thing is definitely colored by my view of treating input  
devices like sensors.  But I think this would lead to the most flexible  
system with the least duplicated code and effort:

- [gemmouse] is not representing the mouse, but only the mouse cursor  
info.  A mouse outputs relative info, not absolute coords.  The  
current [gemmouse] outputs absolute coords of the cursor, whether that  
cursor is controlled by mouse, tablet, joystick, keyboard, eye  
tracking, whatever.

- Gem should handle window focus and window position.  Everything else  
can be handled in the regular Pd space, including mouse cursor coords  
and clicks within the gem window.

So I think that Gem should only output focus and the root location of  
each window.  Then everything else, i.e. getting data from HIDs, would  
be handled in the Pd space.  Then we need to create a [cursor] (or a  
better name? [ospointer]? [systempointer]? [mousepointer]?) object  
which gets the mouse cursor coords from the OS.  I think that you could  
easily implement all of the existing [gemmouse] etc. functionality with  
such a design, and make it work with multiple windows.

.hc

On Dec 3, 2004, at 3:57 AM, IOhannes m zmoelnig wrote:

> hi
>
> Hans-Christoph Steiner wrote:
>
>> No offence taken.
> fine!
>
>> Sorry if this seems annoying, but I need to understand the whole   
>> problem before giving good advice.
>
> ok. a short summary:
> there are a couple of objects that get user-input "in the context of  
> the gem-window", namely mouse, keyboard and tablet (i am not sure at  
> all, whether [gemtablet] is limited to the gem-window somehow as i  
> have never used a tablet. probably it is not.
> as Gem currently supports only one window, all the objects (at least  
> mouse+keyboard) are related to this single window.
>
> now we plan to support multiple windows in the future.
> user-interaction should be (in my opinion) per-window, especially if  
> (as it is) the retrieved data (like mouse-position) is in relation to  
> that window.
>
> this shouldn't be a real problem with keyboard (and tablet, if (which  
> is what i believe) it is not related to the "window" at all)
>
>
>> The idea behind the [hid] stuff is  that you are getting sensor data  
>> from the devices, with as little  filtering from the OS as possible.   
>> Correct me if I am wrong, but the  basic goal with Gem seems to be to  
>> get pointer position data and clicks  within that gemwin, so that's a  
>> different thing.  That's getting  information from the OS about the  
>> pointer interacting with the window.
>
> basically true.
> i have added the [gemkeyname] a while ago, back then when there was  
> only pd's [keyname] which only responded to key-strokes within pd's  
> focus.
> this is "unfortunate", as we now have to provide a layer of  
> compatibility which (in my opinion) must not depend on anything but  
> Gem and pd (this is: no other externals must  be involved)
>
>
>> For example, something like keyboard data is not at all related to  
>> the  pointer, so it doesn't matter whether you getting the events  
>> globally  (i.e. from [hid]) or locally (i.e. from [gemkeyboard]).   
>> The only
>
> that is correct.
>
>> difference is whether the gemwin has focus or not.  But if you can  
>> get  the focus state from the gemwin, then you could use [hid] to get
>
> i am planning to output a "focus" message just because of this.
>
>
>> So it seems that Gem should only handle the window interaction data   
>> (pointer coords, button clicks in that window), and output when  
>> gemwin  has focus (maybe it does this already?).  The rest can be  
>> handled with  standard Pd objects (i.e. [hid], or whatever).  This  
>> idea is a bit raw  since I am mired in writing my thesis paper, but I  
>> think this direction  would ultimately be the right approach.  Less  
>> duplicated code, fewer  different objects to learn, more flexible,  
>> etc.
>
> big words: "standard Pd objects (i.e. [hid]" ;-)
> anyhow, i agree that not each and every external that makes it's own  
> windows should (have to) handle all the events that appear in that  
> window (especially if they are not really window-related like  
> joystick)
>
>
>> I had zero intention of complaining, I was just under the impression   
>> that y'all wanted to keep the gem HID objects distinct, and I wanted  
>> to
>
> the only reason is backwards compatibility..
> i have no personal liking of [gemkeyboard] at all (although might have  
> been very useful to other people)
>
>
>
> conclusions (not necessarily drawn from the babble above) in no order,  
> and partly just my personal opinion:
>
> +MUST: there must be a compatibility layer to the old [gemmouse] and  
> friends (most likely built as abstractions)
>
> +NEED: there *should* be no dependencies on other external libraries  
> (we are going to have a hard time if people have to recompile their  
> kernels because they don't have evdev-support which they need to get a  
> [hid]-based [gemkey] to work again); otoh [hid] would be the choice as  
> it is cross-platform (does it work on irix ?)
>
> +NEED: window-related events (clicks in window, mouse-position, ...)  
> should be handled on a per window basis, presumably as a  
> message-output by the object that represents the window (e.g.  
> [gemwindow]).
>
> +[gemmouse] is window related and would thus be provided by Gem itself  
> (and it is surely the mostly used of all gemhids)
>
> +[gemkeyboard] (or whatever it's exact name is;-)) might still be  
> "subject to change" (as the help-file says) as the output-format is  
> not completely cross-platform, or was: gerard (i think) has submitted  
> a patch that makes linux and windoze keynames be the same; no idea  
> about osX though (does it work at all?); this gives us a lot freedom !
>
> +[gemtablet] might entirely vanish and be substituted by a wrapper  
> around hid. this seems contradictory, but the tablet-code does not  
> work to well, is not cross-platform at all (it worked under NT but i  
> have no idea about modern windozes with modern devices, i have no idea  
> about linux (maybe works, but rather not), and i have no idea about  
> osX (probably doesn't work)), as an object with umpteen ooutlets it is  
> clumsy (sorry Mark). a compatibility abstraction should not be to hard  
> to do.
>
>
>
>
> and just an incomplete list of (proposed) messages that might/should  
> be emitted by a [gemwindow]
> "mouse" (with x, y, buttons, wheels and stuff);
> "focus"
> "offset" (window position)
> "dimen" (window dimension)
> probably all information you get at the console when sending an  
> "info"-message should be output as well.
> i am not sure whether "offset" and "dimen" should be sent  
> automatically whenever they are changed by the user (by dragging the  
> window and resizing it) or whether this should only be retrieved when  
> the object gets polled.
>
>
>
>
>
>
> ah long mail
> hope it makes sense
> mfg.muzt.ys
> IOhannes
>
>
>
> _______________________________________________
> GEM-dev mailing list
> GEM-dev at iem.at
> http://iem.at/cgi-bin/mailman/listinfo/gem-dev
>

________________________________________________________________________ 
____

                     There is no way to peace, peace is the way.
										-A.J. Muste





More information about the GEM-dev mailing list