diff options
| author | Berke Güzel <wenekar1@gmail.com> | 2026-10-13 15:41:39 +0300 |
|---|---|---|
| committer | Berke Güzel <wenekar1@gmail.com> | 2026-10-13 15:41:39 +0300 |
| commit | 537b2d768b31deb0f95c5122e0d562e4406ae9a0 (patch) | |
| tree | cc3e85cb2990672c11b4e35c6dbcfaac733d09f5 /docs/migrating.md | |
| parent | 98f0d51157fa2a2b8ccaae54ed4850a88d223d01 (diff) | |
Unify core and runner events into struct yasl_event
The core input queue and the yasl_run() runner each had their own event
type, and the runner translated one into the other. Both now share
struct yasl_event in <yasl/yasl.h>: yasl_surface_poll_event() returns the
same events the app event callback receives, so the runner forwards them
unchanged.
Pointer input becomes POINTER_DOWN/UP/MOTION/SCROLL/LEAVE with a named
yasl_pointer_button and a motion delta computed in the input queue. TEXT,
PASTE and DROP share one text payload, scale changes fold into
WINDOW_RESIZE, and every event carries a monotonic time_ns.
yasl_surface_set_mouse_mode() is replaced by
yasl_surface_set_pointer_mode(); no backend implements relative mode yet.
The export check now only counts YASL_API declarations, so function
pointer fields returning enum yasl_app_result are not mistaken for
exports.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'docs/migrating.md')
| -rw-r--r-- | docs/migrating.md | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/docs/migrating.md b/docs/migrating.md index 395072e..e1f5442 100644 --- a/docs/migrating.md +++ b/docs/migrating.md @@ -12,10 +12,34 @@ Replace manual dispatch/poll/flush loops with the runner and request redraws wit `yasl_surface_request_frame()`. Present the frame context with `yasl_frame_present_cpu()`; the runner destroys remaining surfaces on exit. -Unified pointer button and motion events retain `device` and tablet axes. -Handle `YASL_EVENT_INPUT_RESET` by clearing held input and active strokes, just -as for the core API's `YASL_INPUT_RESET`. Window state remains a `YASL_STATE_*` -bitmask; `YASL_STATE_TILED` is reported for tiled Wayland toplevels. +Window state remains a `YASL_STATE_*` bitmask; `YASL_STATE_TILED` is reported +for tiled Wayland toplevels. + +## Events + +The core API and the runner now share one `struct yasl_event`, declared in +`<yasl/yasl.h>`. `yasl_surface_poll_event()` returns the same events that +`yasl_app_desc.event` receives, so input handling code works under both. + +| Previous use | Replacement | +| --- | --- | +| `yasl_surface_input_poll()`, `struct yasl_input_event` | `yasl_surface_poll_event()`, `struct yasl_event` | +| `event.kind`, `YASL_INPUT_*` | `event.type`, `YASL_EVENT_*` | +| `YASL_INPUT_MOUSE` with `mouse.kind` | `YASL_EVENT_POINTER_DOWN`, `_UP`, `_MOTION`, `_SCROLL`, `_LEAVE` with `event.pointer` | +| Runner `YASL_EVENT_MOUSE_BUTTON` with `pressed` | `YASL_EVENT_POINTER_DOWN` / `_UP` | +| Integer `button` 0/1/2 | `YASL_BUTTON_PRIMARY`, `_MIDDLE`, `_SECONDARY`, `_BACK`, `_FORWARD` | +| `paste.text`, `drop_files.files`, `text.text` | `text.data` for `PASTE`, `DROP`, and `TEXT` | +| `YASL_INPUT_DROP_FILES` / `YASL_EVENT_DROP_FILES` | `YASL_EVENT_DROP` | +| `YASL_EVENT_WINDOW_FOCUS` | `YASL_EVENT_FOCUS` | +| `YASL_EVENT_WINDOW_SCALE_CHANGED` | `YASL_EVENT_WINDOW_RESIZE` with `resize.scale_changed` | +| `YASL_EVENT_WINDOW_CLOSE_REQUEST` | `YASL_EVENT_WINDOW_CLOSE` | +| `user.type` | `user.code` | +| `key.repeat` | `key.action == YASL_KEY_REPEAT` | +| `yasl_surface_set_mouse_mode()` | `yasl_surface_set_pointer_mode()` | + +Every event carries a monotonic `time_ns`. Pointer motion carries `delta` on +both paths. Handle `YASL_EVENT_INPUT_RESET` by clearing held input and active +strokes. ## Window creation @@ -40,7 +64,7 @@ provide application notifications through `yasl_app_desc.event` and `.frame`. | Linux keysym or Cocoa virtual keycode in `key.key` | Portable physical `YASL_KEY_*` identity | | `key.base` | `key.native_code`, with explicit backend-specific encoding | | `key.keypad` | Distinct `YASL_KEY_KP_*` identities | -| Advisory `key.text` character | `YASL_INPUT_TEXT` UTF-8 payload for insertion | +| Advisory `key.text` character | `YASL_EVENT_TEXT` UTF-8 payload for insertion | | Layout label from a keysym | Optional `key.codepoint` and `key.shifted` Unicode scalars | Replace magic numbers and X11 symbols with named keys. For example, a quit @@ -49,7 +73,7 @@ US A position on every layout; use layout labels when a command should follow the printed letter instead. Do not cast key identities to characters. Keypad Enter and ordinary Enter now have distinct identities without a separate flag. -Text comes only from `YASL_INPUT_TEXT`. Handle its byte length, copy it when +Text comes only from `YASL_EVENT_TEXT`. Handle its byte length, copy it when retaining it after the next successful poll, and allow multiple characters per commit. Cocoa sends key events through its text input manager; Wayland emits ordinary XKB text and locale compose results in addition to IME commits. @@ -57,7 +81,7 @@ ordinary XKB text and locale compose results in addition to IME commits. ## Scroll events Replace `scroll_lines`, `scroll_delta`, and scroll button numbers with -`mouse.scroll.x` and `.y` when `mouse.kind == YASL_PTR_SCROLL`. These double +`pointer.scroll.x` and `.y` for `YASL_EVENT_POINTER_SCROLL`. These double values are fractional line offsets, positive right/down on every backend. Do not infer scroll direction from `button`. One event may include both axes. Remove backend-specific sign inversions and whole-line casts; multiply the |
