[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] Wheel support in XaAES
Hello,
Arnaud BERCEGEAY wrote:
Hello,
The below is how I imagine wheel-support can be done in XaAES and is
already
implemented.
What a good news ! Great :)
;-)
However, I think that we need to find a decent value for WM_WHEEL,
it is 345 for now. Anyway, test this and let me know how it works.
XaAES and wheel mouse handling.
This has changed a little compared to the original documentation and
implementation. When the wheel is on a window whose owner dont know
about
mouse wheels at all, normal WM_ARROWED messages are sent.
... but only if the window has the corresponding slider, right ?
Yes, since I imagine apps that dont know about wheels and have no arrows
gadgets most likely will ignore WM_ARROWED messages anyway.... or?
There is no extra
info added to these messages in this case, as it were in the original
implementation.
I think it's not a pb. If one want to manage the wheel... then he just
has to ask for wheel messages.
Thats what I think too :)
Currently mouse wheel events are sent to the owner of the window
underneath
the mouse pointer
Very good :)
thanks :)
in all cases except when owner of mouse_lock() is waiting
for MU_WHEEL.
Well... i see 3 kind of applications:
- applications that don't support mouse wheel: they will receive
standard WM_ARROWED messages only if the window has the corresponding
slider.
Almost. These kinds need to have the ARROW widget, not slider.
- applications that support WM_WHEEL messages: they will receive
WM_WHEEL messages on mouse wheel click (msg[3] is the window under the
mouse, even if the window doesn't have the corresponding slider)
Again, its the ARROW widget, not slider :)
- applications that manage mouse wheel thru MU_WHEEL data. The main
evnt_multi() loop has the MU_WHEEL bit set, but this application may
perform some evnt_mesag() calls, or some evnt(MU_MESAG|MU_TIMER) calls
and here, the message WM_WHEEL should not be sent (imo) !
The problem is for the 3rd kind of application. If the application is
busy sending and receiving AES messages (GEMscript, VA-protocol...) and
uses a second evnt_multi(MU_TIMER|MU_MESAG) loop for that purpose, in
that case a mouse wheel click shall not be transformed to a WM_ARROWED
message, nor to a WM_WHEEL message.
This is an important point for me, because with the current design of
mouse wheel in XaAES, all my softwares will be of the 3rd kind.
I propose a simple solution few lines later...
msg[0] = WM_WHEEL ( 345 )
msg[1] = ID of sender
msg[2] = ...
msg[3] = window handle
msg[4] = orient
msg[5] = wheel ID
msg[6] = wheel amount
msg[7] = Not used, always 0
'orient' is a bitmask where bit 0 indicates direction, and
bit 1 indicates orientation;
bit 0 - 0 = up or left
1 = down or right
bit 1 - 0 = vertical (bit 0 indicates UP/DOWN)
1 = horizontal (bit 0 indicates LEFT/RIGHT)
'wheel ID' contains the wheel number. 0 is wheel #1, etc..
'wheel amount' holds the number of wheel-turns.
I like this message... but an important information is missing: the
position of the mouse pointer (x and y). Without this information, the
message seems useless for me (anyway, it's far better than
WM_ARROWED/WA_WHEEL (IMO)).
I completely agree, we need to find a way to provide X and Y of mouse
too. Problem is... how?
XWHL_AROWWHEEL ( 1 ) This is the default
wheel_mode set if the
value passed is outside the available range. When this
mode is
selected, normal WM_ARROWED messages are sent upon each
wheel
turn. With this mode, WM_ARROWED messages are send even
when
the window has no ARROW gadgets.
Good !
Thanks again :)
XWHL_SLDRWHEEL ( 2 )
When wheel_mode is set to 2 (XHWL_SLDRWHEEL), XaAES
converts
wheel turns into slider movements. XaAES sends standard
WM_VSLID/WM_HSLID messages reflecting the wheel turns.
I think i understand the reason of this mode. In most systems that
support the wheel (i only tested mandrake and windows), a mouse wheel
click is equivalent to 3 (it's an average) line up/left/dw/right
messages. For example, in my xterm windom (under linux), the window
content scroll by 3 lines per mouse wheel click.
the slider equivalent is a good idea, but the AES is not the right
place for that (IMO). The right place for such stuff (transform mouse
wheel click to movement of several lines) is a higher GEM library like
cflib or windom. Furthermore, i don't think that this mode will made
the programmer life easier. If a programmer want to transform a mouse
wheel click to several lines movement, then the easier way is to catch
WM_WHEEL message and call 3 times the internal function "move 1 line
up/down" of the application.
Here I dont agree. The idea of having the AES do this is because then
the user can set a wheel-sensitivity that goes for all apps supporting
this mode. Using this mode is no harder than with normal WM_xSLIDE
messages, the only difference is that the position value in the
WM_xSLIDE message is passed back when setting the new slider position.
If the application in question do not do any snapping or such stuff, the
two values used in wind_set(handle, WF_xSLIDE, newposition, msgposition,
0,0) will be the same. The problem is that the AES needs to accumulate
real changes to be able to "pass a snap", if you know what i mean. So,
the only diff is one extra param when setting the position of the slider.
BTW, there's a missing wheel_mode :
XWHL_MUWHEEL_ONLY, or XWHL_QUIET, or XWHL_NO_MSG to tell the AES that
the application will call event_multi() with MU_WHEEL when he'd like to
read mouse wheel events. The AES shall never transform mouse wheel
click to message.
Yes. This sounds reasonable. Regarding MU_WHEEL events, read what I
wrote at line 421 in xa_evnt.c and give me your thoughts. I think we
should follow my reasoning there :) Since we wanna add fselect()/fpoll()
functionality via evnt_multi() perhaps an extended version of
evnt_multi() is in place?
Last:
for the naming of the constant, i would vote for removing the first 'X'
letter (WHL_REALWHEEL is ok, no need to prefix with a 'X')
Fine by me :) The 'X' came from XaAES :)
best regards,
Arnaud.
PS: i'm very happy with the work done on the mouse wheel in XaAES... i
hope my atari hardware will soon support the mouse wheel ;)
The current stuff works great with my Milan :)
regards,
Odd Skancke