[Cuis-dev] [RFC] True Mouse Wheel Support

Gerald Klix cuis.01 at klix.ch
Fri Aug 13 11:16:27 PDT 2021


This clearly needs more testing, Windows sends only one key.
I overlooked the else in the VM's C-code.
I suspect scrolling by emulation is wrong only on Unix.

BTW: Using the Trackpad on Windows I can get a scroll delta bigger than 
120 (pixels?). Interestingly enough horizontal double-finger swipes
cause the VM to report cursor keys, whereas a conventional
mouse's scroll-wheel tilt is reported as scroll event.

Me puzzled ...


Best Regards,

Gerald



On 8/13/21 4:48 PM, Gerald Klix via Cuis-dev wrote:
> Phil,
> 
> On 8/13/21 4:09 PM, Phil B via Cuis-dev wrote:
>> Gerald,
>>
>> On Fri, Aug 13, 2021 at 3:41 AM Gerald Klix <cuis.01 at klix.ch> wrote:
>>
>>> That surprised me, too. After some thinking -- could not sleep --
>>> it dawned to me that the problem is elsewhere ...
>>>>   I would expect it to be
>>>> the other way around (i.e. that the cooked keyboard event rate would be
>>>> slower.)  I'm assuming that this is a VM thing that probably needs 
>>>> to be
>>>> fixed there (i.e. higher resolution scroll events are quite handy for
>>>> scrolling long lists, zooming etc)
>>> ... Actually the code that generates scroll events from keyboard
>>> events (and vice versa) -- please, don't take this personally -- was
>>> flawed from the very beginning. It generates three/two scroll
>>>
>>
>> WHAT!?! :-)  Seriously, don't worry about calling out any bad code I
>> submit... mistakes happen.  I'd rather have them spotted/fixed than have
>> anyone worry about offending.
> Well, I worked as a software tester for some time and I can decidedly
> assert you: Not every programmer on this globe has your constructive
> attitude, so better be careful.
>>
>>
>>> events from three/two keyboard events.
>>> If you look at the vm-code, you discover that the VM generates three
>>> or two keyboard events from one mouse-wheel event:
>>>
>>> X11:
>>>
>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/c6c18805f2a5ba03b5ea3e765bb7fec1a2fce248/platforms/unix/vm-display-X11/sqUnixX11.c#L3641 
>>>
>>>
>>> OSX Quartz:
>>>
>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/c6c18805f2a5ba03b5ea3e765bb7fec1a2fce248/platforms/unix/vm-display-Quartz/sqUnixQuartz.m#L1911 
>>>
>>>
>>> These ones only generates two keyboard events.
>>>
>>> Linux/Unix framebuffer:
>>>
>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/c6c18805f2a5ba03b5ea3e765bb7fec1a2fce248/platforms/unix/vm-display-fbdev/sqUnixEvdevKeyMouse.c#L662 
>>>
>>>
>>> Windows:
>>>
>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/c6c18805f2a5ba03b5ea3e765bb7fec1a2fce248/platforms/win32/vm/sqWin32Window.c#L429 
>>>
>>>
>>> (Side note: I might be wrong concerning the event count on windows)
>>>
>>> In a nutshell the VM is not really consistent here,
>>> but 2 vs. 3 events did probably go unnoticed.
>>>
>>> You can used the attached file-out of a slightly
>>> instrumented HandMorph>>#generateKeyboardEvent:
>>> method to see the three keyboard
>>> events and the resulting three scroll events.
>>>
>>> As a fix, I suggest to react only on the simulated
>>> key-down-event and ignore the other events.
>>> We than can adjust the scroll counts in the individual
>>> morph classes. I also suggest to make these scroll counts
>>> preferences. This should lead to consistent behavior across
>>> OSes and scroll-wheel event reporting protocols.
>>> Forthermore advanced users can adjust the scroll rate.
>>>
>>
>> Good catch... yes, that's a bug in at least what I did previously.  So no
>> VM fix needed since, as you've shown, the VM is doing the right thing re:
>> simulating a keyboard event and I should have been paying attention to 
>> the
>> event type.  I'm in agreement with the modified behavior you're proposing
>> as it will make the behavior consistent regardless of event source or
>> platform.
> I still have to do some tests on windows and with a mouse/trackpad
> that makes it easy to generate vertical and horizontal
> scrolls at the same time.
> If this happens the #(up down left right) direction
> handling scheme will break.
> If these test go well, I will prepare a complete change-set.
>>
>>
>>>
>>> Best Regards,
>>>
>>> Gerald
>>>
>>>
>>>> Nice to finally see those wheel
>>>> side-to-side direction events... nice work!
>>> Thanks!
>>>>
>>>> The only question I have is if there's a way to detect the 
>>>> capability and
>>>> set the VM parameter automatically on image start?  If so, we could 
>>>> have
>>> a
>>>> preference as to whether or not it should automatically be set. (I
>>> imagine
>>>> most would)
>>> Actually we can activate it unconditionally, because
>>> the OSX VM will disregard the VM parameter and sent simulated keyboard
>>> events anyway. It Quartz window code does not refer to
>>> this VM parameter.
>>>
>>>
>> Cool... then I'd suggest enabling on image startup.  Juan, would you 
>> agree?
> Juan,
> 
> since you have a Mac handy, can you please test that my assumption
> is correct. Activate mouse-wheel-event reporting in the VM
> and make sure that scrolling still works.
> Please also check that my assumption about the
> 3 keyboard-events that are generated is correct for OSX.
>>
>> Thanks,
>> Phil
>>
>>
> 
> Best Regards,
> 
> Gerald


More information about the Cuis-dev mailing list