Skip to content

Borderless preview mode + hover highlight - #29

Open
Amryu wants to merge 3 commits into
isomerc:masterfrom
Amryu:feature/no-border
Open

Amryu wants to merge 3 commits into
isomerc:masterfrom
Amryu:feature/no-border

Conversation

@Amryu

@Amryu Amryu commented Jun 22, 2026

Copy link
Copy Markdown
  • Add a Borderless previews setting (default off, live-toggleable): drops the title strip + colored border and renders the thumbnail edge-to-edge.
  • Character name stays readable on a translucent backdrop; the active client's name is drawn in Nicotine red (the colour the active border uses in bordered mode).
  • Hover highlight: hovering a preview turns its border red (bordered) or its name red (borderless), keyed on is_active || hovered. Naturally inert under click-through (no pointer events reach the windows).
  • Implemented for X11 and Windows, plus a config-panel checkbox; takes effect live without a daemon restart.
  • Windows note: DWM thumbnails composite above the host window, so the name sits in a slim translucent name bar rather than floating over the mirror.

Amryu added 3 commits June 22, 2026 16:52
New "borderless" setting (default off, live-toggleable) drops the preview
chrome — title strip + colored border — and renders the thumbnail edge to
edge. The character name stays readable on a translucent backdrop; since
there's no border to signal focus, the *active* client's name is drawn in
Nicotine red (the color the active border uses in bordered mode).

- config: `borderless` field + serde default + LiveSettings mirror so the
  panel toggle takes effect without a daemon restart; round-trip test.
- X11: `thumbnail_rect()` layout helper (full-window vs. inset), red name
  pixmap baked alongside the cream one, reordered paint (thumbnail first,
  then backdrop + name) in borderless mode, `apply_live_borderless()`.
- Windows: DWM thumbnails composite on top of the host window, so the name
  can't float over the mirror — borderless drops the frame and keeps a slim
  translucent name bar (red when active) instead. `apply_live_borderless()`.
- config panel: "Borderless previews" checkbox.
Hovering a preview now highlights it the same way the active client is
highlighted — red border in bordered mode, red name in borderless mode —
by keying the highlight on `is_active || hovered`.

- X11: select ENTER_WINDOW | LEAVE_WINDOW, `set_hover()` on NORMAL-mode
  crossings (grab-synthesized crossings are filtered so drags don't flicker
  the highlight), repaint on change.
- Windows: WM_MOUSEMOVE arms WM_MOUSELEAVE via TrackMouseEvent and flips
  `hovered`; both repaint.

Hover relies on real pointer-crossing/mouse messages, which are NOT
delivered under click-through (empty X11 input region / WS_EX_TRANSPARENT),
so the highlight is automatically inert when click-through is enabled — as
required.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant