Commit graph

11734 commits

Author SHA1 Message Date
Bill Currie
793914718f [x11] Implement input names
Mouse axis and button names are handled internally (and thus
case-insensitive).

Key names are handled by X11. Case-sensitivity is currently determined
by Xlib.
2021-11-18 13:01:33 +09:00
Bill Currie
84f746dab2 [input] Allow button and axis inputs to be named
keyhelp provides the input name if it is known, and in_bind tries to use
the provided input name if not a number. Case sensitivity for name
lookups is dependent on the input driver.
2021-11-18 12:59:18 +09:00
Bill Currie
f4c521d51d [input] Move in_devbindings_t definition
In the end, it doesn't need to be public, so move it into in_binding.c
2021-11-18 11:17:04 +09:00
Bill Currie
fbcb22d41a [qw] Sort out move axis directions and names
Everything is set up so default recipes work as expected (by me) for a
3Dconnexion SpaceNavigator:
    translation axes move quakeguy in the direction the puck is moved
    tilting the puck forward pitches forward (look down)
    tilting the puck to the left rolls to the left
    twisting the puck clockwise (looked at from the top) turns quakeguy
    to the right.

This does mean that the default pitch motion for a regular mouse is now
push forward to pitch forward (look down) (inverted from before).

Mouse scaling is out (too small), but that's because in_amp etc are
ignored for now (thinking about how to integrate cvars with axis
recipes). Joystick input will be the same.
2021-11-16 20:26:19 +09:00
Bill Currie
c3fa0d6464 [input] Fix incorrect arg count in in_unbind_f
Yay for copying and editing code :P
2021-11-16 20:14:33 +09:00
Bill Currie
1381932552 [input] Fix imt block management
Reset the blocks completely when loading configs and fix a leftover from
when I thought I'd expose the block numbers to bindings but then changed
my mind to simply track the base binding.
2021-11-16 20:12:53 +09:00
Bill Currie
111e5d923e [cexpr] Support casting to double
For int, uint and float, also add uint to float (not that it will do any
good for values over 16M).
2021-11-16 19:59:47 +09:00
Bill Currie
73ab33ba97 [input] Actually return the button in IN_FindButton
Returning the wrapper object makes for some weird behaviour.
2021-11-16 16:33:53 +09:00
Bill Currie
7739972f19 [x11] Block raw inputs if cooked inputs are handled
The cooked inputs (ie_key, ie_mouse) are intended for UI interaction, so
generally should have priority over the raw events, which are intended
for game interaction.
2021-11-16 12:55:55 +09:00
Bill Currie
b8baa04b2e [input] Split binding event handler
There's now an internal event handler for taking care of device addition
and removal, and a public event handler for dealing with device input
events in various contexts In particular, so the clients can check for
the escape key.
2021-11-16 12:54:23 +09:00
Bill Currie
1868fe7404 [qw] Save and load cvars before input config
Saving is not so important, but for loading, while the input system
doesn't make much use of cvars at this stage, it makes sense for them to
be loaded before the input system configuration is loaded.
2021-11-16 08:48:35 +09:00
Bill Currie
b80c19bd77 [util] Save and load cvars to/from plist configs
Other than some backwards compatibility, this completes the
configuration updates for now.
2021-11-15 22:04:29 +09:00
Bill Currie
8cf0d00eda [qw] Switch quakeforge.cfg to property list format
Cvars aren't handled yet, but input configuration is. Seems to work :)
2021-11-14 10:32:35 +09:00
Bill Currie
fede9125e1 [input] Save/load config to/from plist configs
While the console command line is quite good for setting everything up,
the devices being bound do need to be present when the commands are
executed (due to needing extra data provided by the devices). Thus
property lists that store the extra data (button and axis counts, device
names/ids, connection names, etc) seems to be the best solution.
2021-11-14 10:17:05 +09:00
Bill Currie
7c9f3a3b09 [util] Expose the quakerc check function
qargs probably needs to go away. It certainly needs to be rethought. For
now, this is good enough to get qw working with plist-based
quakeforge.cfg
2021-11-14 10:12:14 +09:00
Bill Currie
6a9e5f4970 [input] Fix incorrect placement of pure attribute
Should be on the prototype, not definition (for public functions).
2021-11-14 10:10:39 +09:00
Bill Currie
08bf3a6b8e [gamecode] Fix incorrect return in PR_RESRESET
I think it's a holdover from before switching the resmap macros to be
usable in larger functions. I'm surprised it took this long to run into.
2021-11-14 10:09:10 +09:00
Bill Currie
08083b8630 [input] Use double for recipe float values
Recipes themselves still use float, but using double in the cexpr values
allows bare floating point numbers (which parse as double) to be used,
making the bind command line a little more user-friendly.
2021-11-12 08:09:41 +09:00
Bill Currie
adaa3c5485 [input] Get bindings actually working
The mouse bound to movement axes works (though signs are all over the
place, so movement direction is a little off), and binding F10 (key 68)
to quit works :)
2021-11-12 00:24:04 +09:00
Bill Currie
6e85377d7a [cexpr] Support variable assignment
I might have to add code to block it when necessary, but it's needed for
axis recipe parsing.
2021-11-12 00:19:58 +09:00
Bill Currie
5557bf0b09 [input] Implement axis binding
Each axis binding has its own recipe (meaning the same input axis can be
interpreted differently for each binding)

Recipes are specified with field=value pairs after the axis name.
Valid fields are minzone, maxzone, deadzone, curve and scale, with
deadzone doubling as a balanced/unbalanced flag.

The default recipe has no zones, is balanced, and curve and scale are 1.
2021-11-11 15:51:47 +09:00
Bill Currie
f77b4199c4 Fix some optimization warnings 2021-11-11 15:43:07 +09:00
Bill Currie
6da8a2622f [qw] Create axes for viewdelta
First step in removing IN_Move. Once nq is updated, IN_Move can be
removed entirely.
2021-11-10 15:50:14 +09:00
Bill Currie
9172e76107 [input] Move name and description into in_axis_t
Like with in_button_t, it makes creating static axes a little easier.
2021-11-10 15:48:22 +09:00
Bill Currie
b231b63413 [input] Implement hot-plug support for bindings
Hot-plug support is done via "connections" (not sure I'm happy with the
name) that provide a user specifiable name to input devices.  The
connections record the device name (eg, "6d spacemouse") and id (usually
usb path for evdev devices, but may be the device unique id if
available) and whether automatic reconnection should match just the
device name or both device name and id (prevents problems with changing
the device connected to the one usb port).
2021-11-10 13:22:44 +09:00
Bill Currie
b95c749438 [input] Add a per-device event data pointer
This might pose a problem with multiple event targets (we'll see), but
it will make connecting input devices to bindings much easier.
2021-11-10 13:22:10 +09:00
Bill Currie
f5ccf46ae3 [input] Correct some comments
Not much worse than incorrect comments.
2021-11-09 22:28:56 +09:00
Bill Currie
5328c06fbf [input] Clean up imt.h a little
Unnecessary enum removed, and the imt block struct moved to imt.c
(doesn't need to be public). Also, remove device name from the imt block
(and thus the parameter to the functions) as it turns out not to be
needed.
2021-11-09 22:23:57 +09:00
Bill Currie
620ea30683 [input] Implement the core binding commands
Again, much testing is needed, but all the core binding commands are
implemented (ie, not the legacy support commands).
2021-11-08 16:56:26 +09:00
Bill Currie
925ca8081c [input] Implement imt creation, binding, etc
Much testing is needed, but the bulk of imt management is implemented.
Axis bindings are not properly implemented yet, though.
2021-11-08 16:54:52 +09:00
Bill Currie
fd5abb4c61 Correct the libjack package name
Debian has been using jack2 for ages, about time the right lib was
recommended.
2021-11-08 15:53:43 +09:00
Bill Currie
839808e659 [input] Implement several binding commands
in_bind is only partially implemented (waiting on imt), but device
listing, device naming, and input identification are working. The event
handling system made for a fairly clean implementation for input
identification thanks to the focused event handling.
2021-11-08 15:38:26 +09:00
Bill Currie
4898a44263 [console] Hook up new input system
This has smashed the keydest handling for many things, and bindings, but
seems to be a good start with the new input system: the console in
qw-client-x11 is usable (keyboard-only).

The button and axis values have been removed from the knum_t enum as
mouse events are separate from key events, and other button and axis
inputs will be handled separately.

keys.c has been disabled in the build as it is obsolute (thus much of
the breakage).
2021-11-08 11:20:04 +09:00
Bill Currie
6dc90c5497 [x11] Remove key focus and destination handling
I'm undecided on how to handle application focus (probably gain/lose
events), and the destination handler has been a stub for a while. One less
dependency on the "old" key handling code.
2021-11-05 14:56:27 +09:00
Bill Currie
31c1eae1ec [x11] Send key events for pasted text
I'm undecided if the pasted text should be sent as a string rather than
individual key events, but this will do the job for now as it gets me
closer to being able to test everything.
2021-11-05 14:54:33 +09:00
Bill Currie
0c8fbf0ce4 [x11] Don't use select for checking for events
It seems that under certain circumstances (window managers?), select is not
reliable for getting key events, so use of select has been disabled until I
figure out what's going on and how to fix it.
2021-11-05 13:30:01 +09:00
Bill Currie
63f5c738ca [x11] Send cooked keyboard and mouse events
For the mouse in x11, I'm not sure which is more cooked: deltas or
window-relative coordinates, but I don't imagine that really matters too
much. However, keyboard and mouse events suitable for 2D user interfaces
are sent at the same time as the more game oriented button and axis events.
2021-11-05 13:26:44 +09:00
Bill Currie
0a885fe704 [x11] Rename x11 input devices to core
The x11 keyboard and mouse devices are really core input devices rather
than x11 input devices in that keyboard and mouse will be present on most
systems and thus not specific to the main user interface (x11, windows,
etc).
2021-11-05 10:02:21 +09:00
Bill Currie
7d022db702 [util] Avoid Sys_Shutdown for IO signals
It turns out that calling Sys_Shutdown in the signal handler can cause
lockups due to the signal occurring at unsafe times. Fortunately, this is
just the IO related signals (INT, HUP, TERM, QUIT) as the others are
usually caused by actual errors and should not occur in system code thus
timing should not be an issue. However, care will need to be taken when it
comes to handling SIGINT or similar for breaking runaway progs code when
that time comes.
2021-11-05 09:56:08 +09:00
Bill Currie
af56e9242b [x11] Clean up duplicate code in software updates
The actual x11 update code was identical between all versions, so it was
moved into the one function.
2021-11-03 22:22:37 +09:00
Bill Currie
16d1232b91 [x11] Connect the X11 input driver to input events
Now nothing works at all ;) However, that's only because the binding
system is incomplete: the X11 input events are getting through to the
binding system, so now it's just a matter of getting that to work.
2021-11-03 22:20:17 +09:00
Bill Currie
825d8b7a49 [input] Make a start on the new binding system
Input Mapping Tables are still at the core as they are a good concept,
however they include both axis and button mappings, and the size is not
hard-coded, but dependent on the known devices. Not much actually works
yet (nq segfaults when a key is pressed).
2021-11-03 19:02:39 +09:00
Bill Currie
14a5ec7b41 [input] Make device add/remove events broadcast
It proved necessary to support broadcasting events to all event
handlers, with device add/remove being the first such events.
2021-11-03 14:08:41 +09:00
Bill Currie
fae9e043df [input] Move button name and description
This puts the name and description into the button itself, making it much
easier to look them up.
2021-11-01 13:54:16 +09:00
Bill Currie
09e3e62a0a [input] Move in_event.h and binding defs
They now live in the include QF/input directory. This cleans up include/QF
a little, and input.h as well.
2021-11-01 13:05:05 +09:00
Bill Currie
665790f562 [video] Remove libQFjs
It is now redundant with the libQFinput, though nothing actually works yet.
2021-11-01 12:30:45 +09:00
Bill Currie
bb1a032564 Update packages in INSTALL
Add packages for Vulkan, and update libpng
2021-11-01 12:14:40 +09:00
Bill Currie
4406be8de3 [input] Move last button declarations
This puts all the client button declarations in the right place (for now:
eventually there will be just the one client input header).
2021-11-01 12:13:28 +09:00
Bill Currie
abe77523ae [qwaq] Disable xterm mouse handling on shutdown
Getting mouse escape codes on the command line is not very pleasant
(even if display-only).
2021-10-29 10:16:42 +09:00
Bill Currie
36f6dcc65e [input] Add logical axes
Like logical buttons, logical axes are engine-defined destinations to
which input ("physical") axes can be bound.
2021-10-01 15:38:48 +09:00