phase f done
This commit is contained in:
parent
1273962a95
commit
a737831ea8
|
|
@ -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** |
|
||||
|
|
|
|||
|
|
@ -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.**
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue