https://github.com/xfnty/tabd
Minimal tablet driver for Windows.
https://github.com/xfnty/tabd
drawing driver mouse-emulation tablet-driver userspace-driver wacom windows-ink
Last synced: about 2 months ago
JSON representation
Minimal tablet driver for Windows.
- Host: GitHub
- URL: https://github.com/xfnty/tabd
- Owner: xfnty
- License: gpl-3.0
- Created: 2025-12-05T11:57:13.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-12-19T09:05:20.000Z (3 months ago)
- Last Synced: 2025-12-22T03:02:09.180Z (3 months ago)
- Topics: drawing, driver, mouse-emulation, tablet-driver, userspace-driver, wacom, windows-ink
- Language: C
- Homepage:
- Size: 289 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
**tabd** – minimal userspace driver for drawing tablets.

### Developing
Compile using MSVC with 64-bit prompt enabled (32-bit evironment is **not** supported):
```bat
rc /nologo /i src /fo icon.res res\icon.rc
cl /nologo src\tabd.c icon.res /link /subsystem:windows /entry:_start
```
Running in the terminal:
```bat
start /b /wait tabd.exe
```
Delete intermediate files:
```bat
del /q /s /f *.exe *.obj *.zip *.ilk *.res *.pdb *.rdi 1> nul
```
### Configuring presets
Preset settings are specified in [`preset.h`](src/preset.h) file:
```c
typedef struct {
Vec2 center;
Vec2 size;
float rotation;
} ActiveArea;
typedef enum {
MODE_MOUSE,
MODE_INK,
} OutputMode;
typedef struct {
PCWSTR name;
ActiveArea area;
OutputMode mode;
} Preset;
const Preset g_presets[] = {
{ L"Drawing", { {108, 67.5}, {216, 135}, 0 }, MODE_INK },
{ L"Osu", { {80.41049, 85}, {100, 56.222546}, -90 }, MODE_MOUSE },
};
```
Currently, preset values can not be changed at runtime.
They use the same values [OpenTabletDriver][otd] does except that the first pair of values
(`{108, 67.5}`) is preset center's **XY** coords and the second pair (`{216, 135}`) is the **size**
of the area. Both pairs of values are in millimeters while rotation is in degrees.
Unlike in OTD, display area to which the tablet area is mapped to can not be configured.
The first preset in the list is used by default but can be changed by right-clicking on the tray
icon and selecting another preset under "Presets" submenu.
[otd]: https://github.com/OpenTabletDriver/OpenTabletDriver
### Tablet Support
tabd uses the same machinery as [HidSharpCore][hidsharp] – one of OpenTabletDriver's dependencies.
To add support for new tablets see [`tablet.h`](src/tablet.h) and, if you want, OpenTabletDriver's
[parsers][wacom-parser] and [configurations][ctl672.json] for tablets it supports.
For now, only Wacom CTL-672 tablet is supported.
[hidsharp]: https://github.com/InfinityGhost/HIDSharpCore
[wacom-parser]: https://github.com/OpenTabletDriver/OpenTabletDriver/blob/master/OpenTabletDriver.Configurations/Parsers/Wacom/PTU/PTUTabletReport.cs
[ctl672.json]: https://github.com/OpenTabletDriver/OpenTabletDriver/blob/master/OpenTabletDriver.Configurations/Configurations/Wacom/CTL-672.json