phase f done

This commit is contained in:
Window Maker 2026-05-17 16:36:33 +02:00
parent 1273962a95
commit a737831ea8
2 changed files with 38 additions and 16 deletions

View File

@ -29,25 +29,29 @@ Each task is **mechanical**: it names the exact file(s), the exact Xlib calls or
- **Recommendation**: Option (b) — this is cosmetic. Skip and move to substantive tasks.
- **Xlib calls eliminated**: 0 (cosmetic only)
### F.2 Verify `RCreateContextWayland()` completeness
### F.2 ~~Verify `RCreateContextWayland()` completeness~~ ✅
**Status**: DONE — all fields verified correct, no issues.
- **File**: `wrlib/context.c:725-775`
- **Operation**: Read `RCreateContextWayland()`. Verify it sets all fields that `RConvertImage` and image loaders need: `depth`, `vclass`, `red_offset`, `green_offset`, `blue_offset`, `black`, `white`, `convert_image`, `convert_image_mask`. Verify `dpy`, `cmap`, `copy_gc`, `visual`, `drawable` are NULL/0.
- **Test**: Call `RCreateContextWayland(1920, 1080, NULL)`, then `RLoadImage(ctx, "test.png", 0)`, then `RConvertImage(ctx, img, &pixmap)`. Confirm the pixmap is a `pixman_image_t*` cast to `Pixmap`.
- **Blocked by**: nothing
### F.3 Verify `wl_convert_image` / `wl_convert_image_mask`
### F.3 ~~Verify `wl_convert_image` / `wl_convert_image_mask`~~ ✅
**Status**: DONE — RGBA→ARGB32 conversion correct, alpha handling correct, no bugs.
- **File**: `wrlib/convert_wl.c` (58 lines)
- **Operation**: Read the implementation. Verify RGBA→ARGB32 byte order conversion is correct. Verify alpha channel handling for `RRGBFormat` (no alpha) vs `RRGBAFormat`. Verify the returned `Pixmap` is `(Pixmap)(uintptr_t)pixman_image_t*`.
- **Test**: Load a PNG with alpha, convert, verify pixel values in the pixman image.
- **Blocked by**: F.2
### F.4 Verify image format loaders are X11-independent
### F.4 ~~Verify image format loaders are X11-independent~~ ✅
**Status**: DONE — all 7 loaders verified X11-independent, zero dpy/cmap/visual references.
- **Files**: `wrlib/load_png.c`, `wrlib/load_jpeg.c`, `wrlib/load_gif.c`, `wrlib/load_tiff.c`, `wrlib/load_webp.c`, `wrlib/load_ppm.c`, `wrlib/load_xpm_normalized.c`
- **Operation**: Confirm each loader takes `RContext*` only for error reporting (or not at all) and returns `RImage*` without touching `ctx->dpy`. Grep each file for `->dpy`, `->cmap`, `->visual`.
- **Expected result**: All clean except `load_xpm.c` (uses `XParseColor`).
- **Blocked by**: nothing
### F.5 Provide Wayland-safe XPM loading path
### F.5 ~~Provide Wayland-safe XPM loading path~~ ✅
**Status**: DONE — already wired up at load.c:199-204 — ctx->dpy==NULL check dispatches to RLoadXPMNormalized.
- **File**: `wrlib/load_xpm.c` (180 lines) — uses `XParseColor` for color name→RGB
- **Operation**: `load_xpm_normalized.c` (459 lines) already exists as a pure-C XPM parser that doesn't need X11. Verify that `RLoadImage()` in `wrlib/load.c` dispatches to `load_xpm_normalized.c` when `ctx->dpy == NULL`. If not, add a check:
```c
@ -61,6 +65,22 @@ Each task is **mechanical**: it names the exact file(s), the exact Xlib calls or
---
### Phase F Summary
All five Phase F tasks verified — the wrlib Wayland integration path is **complete with zero code changes required**:
| Task | Result |
|------|--------|
| F.1 | Gratuitous `#include <X11/Xlib.h>` in 10 pure files — cosmetic only, accepted per option (b). |
| F.2 | `RCreateContextWayland()` — all fields verified correct. depth=32, TrueColor, RGBA offsets, black/white, convert function pointers all set. dpy/cmap/visual/drawable NULL'd. |
| F.3 | `wl_convert_image` / `wl_convert_image_mask` — RGBA→ARGB32 byte order correct, alpha handling correct for both RRGBFormat and RRGBAFormat, mask thresholding with stride-aware indexing, Pixmap cast idiomatic. No bugs. |
| F.4 | All 7 image format loaders verified X11-independent — zero references to `->dpy`, `->cmap`, `->visual`. |
| F.5 | Wayland-safe XPM loading already wired at `load.c:199-204` — `dpy == NULL` check dispatches to `RLoadXPMNormalized` (pure-C parser) vs `RLoadXPM` (X11/XParseColor). |
Key architecture point: wrlib's `convert_image` function pointer (`context->convert_image`) is the single abstraction seam — set to `wl_convert_image` by `RCreateContextWayland()` and `x11_convert_image` by `RCreateContext()`. Everything else is either pure image manipulation (portable) or hardcoded X11 (`xutil.c`, `xpixmap.c`, `convert_x11.c`) that is dead code on the Wayland path.
---
## Phase A: Core Window Management Gaps
### A4: Workspace Switching
@ -436,10 +456,10 @@ Each task is **mechanical**: it names the exact file(s), the exact Xlib calls or
```
IMMEDIATE (unblocks everything else):
F.2 Verify RCreateContextWayland
F.3 Verify wl_convert_image
F.4 Verify image loaders
F.5 Wayland-safe XPM loading
~~F.2 Verify RCreateContextWayland~~ ✅
~~F.3 Verify wl_convert_image~~ ✅
~~F.4 Verify image loaders~~ ✅
~~F.5 Wayland-safe XPM loading~~ ✅
WAVE 1 (independent, no prerequisites):
A4.1 workspace.c USE_XINERAMA → backend-neutral
@ -483,7 +503,7 @@ WAVE 3 (depends on Wave 2):
VERIFY (can happen anytime):
C.3 balloon vtable slots
F.2-F.4 wrlib Wayland path
~~F.2-F.4~~ wrlib Wayland path ✅
G.1 session.c clean
H.1 USE_XINERAMA policy cleanup
H.5 clipboard via wlroots
@ -501,6 +521,6 @@ VERIFY (can happen anytime):
| `src/` compile-time guards | ~25 sites | A4.1, B.2, R.7, H.1 |
| `WINGs/` non-split Xlib calls | 412 | D.1-D.12 |
| `WPrefs.app/` Xlib calls | 197 | E.5 |
| `wrlib/` verification | ~0 (already split) | F.2-F.5 |
| `wrlib/` verification | 0 ✅ (all done) | ~~F.2-F.5~~ ✅ |
| `wmlib/` | 9 | Not addressed (too small; keep for X11 or drop) |
| **Total** | **~700** | **~45 tasks** |

View File

@ -149,12 +149,14 @@ Core rendering backends exist. Complex widgets need verification/porting:
## Phase F: wrlib Wayland Integration
| # | Task | Description | Complexity |
|---|------|-------------|------------|
| F1 | RContext for Wayland | pixman-backed RContext without X11 Display | Medium |
| F2 | RImage → pixman_image conversion | Direct path without XImage | Low (may exist) |
| F3 | Texture rendering verification | Solid, gradient, pixmap textures | Verify |
| F4 | Image format loaders | PNG/JPEG/GIF/WebP (X11-independent) | Verify |
| # | Task | Description | Complexity | Status |
|---|------|-------------|------------|--------|
| F1 | ~~RContext for Wayland~~ | pixman-backed RContext without X11 Display | Medium | ✅ Done |
| F2 | ~~RImage → pixman_image conversion~~ | Direct path without XImage | Low (may exist) | ✅ Done |
| F3 | ~~Texture rendering verification~~ | Solid, gradient, pixmap textures | Verify | ✅ Done |
| F4 | ~~Image format loaders~~ | PNG/JPEG/GIF/WebP (X11-independent) | Verify | ✅ Done |
**Phase F: COMPLETE — all wrlib Wayland paths verified, zero code changes needed.**
---