summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 07:11:01 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:16 -0300
commitdd586f1d8937f67e95504da167216d5413f05262 (patch)
treed9e9ee58ae81017741a6bfcc5e164cb89f28e8f3
parentc1dbb16d069a54f52533f346655b0fc49026c9a4 (diff)
downloadpardes-dd586f1d8937f67e95504da167216d5413f05262.tar.gz
pardes-dd586f1d8937f67e95504da167216d5413f05262.zip
G8: a notice leaves quicker than it arrives
The notice chip's motion was mostly there (a drop easing out on the Motion flavour, a dissolve easing in, Lift's shadow in tier 4 at its fade). Its dissolve took 300 ms against a 180 ms fall, the wrong way round for §8.1 (leaving quicker than arriving, 100 to 160 ms): MessageDissolve now defaults to 150. The field comments had the two easings swapped; the stack test pins a longer dissolve for the case it checks. docs/config.md and docs/effects.md say so. Tests: both timings in their bands, leaving quicker. Gates as G7 (no golden moved). Feel review: .scratch/render/notices/.
-rw-r--r--docs/config.md2
-rw-r--r--docs/effects.md8
-rw-r--r--src/Messages.zig9
-rw-r--r--src/config.zig8
4 files changed, 23 insertions, 4 deletions
diff --git a/docs/config.md b/docs/config.md
index b3cff3a4..db15289b 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -137,7 +137,7 @@ colour whole by half way (graphical frontends slide it out from under the
tagline as it fades up; a terminal only fades it in), stays until the next key or click as it
always has, then lingers for `MessageLinger` milliseconds (default 800) before
it dissolves into the page. `MessageFall` (default 180) and `MessageDissolve`
-(default 300) set how long the fall and the dissolve take, also in
+(default 150: leaving is quicker than arriving) set how long the fall and the dissolve take, also in
milliseconds; each timing is at most 60000, and `Config` reports all three. `MessageLinger 0` with
`MessageAnimation off` restores the old behaviour, a message cleared by the
very input that follows it. An updated line on a row already showing one swaps
diff --git a/docs/effects.md b/docs/effects.md
index 58c0098e..2fc68c81 100644
--- a/docs/effects.md
+++ b/docs/effects.md
@@ -41,6 +41,7 @@ why. The verdict is the user's.
| G5 lapis | `Theme lapis` (its `decor`) | a native theme with ornament: tag plaques with hard shadows inside their bands (the focused one striped), dots, rail checker, title shadow | .scratch/render/lapis/ (whole window at 1x and 2x, crops, a slide mp4) | pending |
| G6 smooth scroll | follows `Motion` (on through the default smooth; `Motion off` lands at once) | a mouse wheel's notch glides, a touchpad follows the finger | .scratch/render/scroll/ (glide-<flavour>.mp4, quarter speed, strips) | pending |
| G7 panel transitions | `PanelSlide`, `PanelZoom`, `PanelVertical`, `PanelDissolve` (off) with `Motion` | a moving pane casts a shadow; a retargeted move keeps its speed; the GUI's dissolve is a crossfade | .scratch/render/transitions/ (slide smooth, bouncy, retargeted; dissolve) | pending |
+| G8 notice chips | follows `Motion` and `Lift` | a notice floats in tier 4 on a lift (shadow) while Lift is on, drops in easing out and dissolves easing in, quicker than it came (150 ms against 180) | .scratch/render/notices/ (acme, forge) | pending |
## Motion flavours
@@ -176,3 +177,10 @@ its old one over it at 1 - progress; the blend is in sRGB, not linear
light (a two-colour mix in linear light needs both in one shader; open
point 3). The tty keeps its per-cell swap. GUI golden 18-mid-transition
changes (the slide's shadow at frame 6).
+
+Notes on G8: most of it was there: the drop eases out on the Motion
+flavour's spring (sxrrwplk), the dissolve eases in, and a notice floats in
+tier 4 with Lift's shadow at its fade while Lift is on, on the bodies
+alone. What G8 changed: leaving was slower than arriving (a 300 ms
+dissolve against a 180 ms fall); §8.1 wants leaving the quicker, in 100 to
+160 ms, so MessageDissolve now defaults to 150 (a test holds both bands).
diff --git a/src/Messages.zig b/src/Messages.zig
index 7d284e6b..36cd44da 100644
--- a/src/Messages.zig
+++ b/src/Messages.zig
@@ -768,6 +768,8 @@ test "messages stack, oldest on top, each on its own timing" {
const pane = p.panes[p.active].?;
try std.testing.expect(p.executeBuiltinLine(p.active, "Verbose off"));
try std.testing.expect(p.executeBuiltinLine(p.active, "MessageLinger 160"));
+ // A dissolve longer than a fall, so the second is caught mid-way.
+ try std.testing.expect(p.executeBuiltinLine(p.active, "MessageDissolve 300"));
// `Verbose off` announced itself before it took effect.
pane.msg_len = 0;
pane.msg_life = .{};
@@ -968,3 +970,10 @@ test "an idle core wants no wake and a lingering message sleeps to its linger's
p.advance(long_due);
try std.testing.expectEqual(Pane.MessagePhase.leaving, pane.msg_life.phase);
}
+
+test "a notice leaves quicker than it arrives, each within its §8.1 band" {
+ const settings: config.Runtime = .{};
+ try std.testing.expect(settings.message_dissolve_ms < settings.message_fall_ms);
+ try std.testing.expect(settings.message_fall_ms >= 150 and settings.message_fall_ms <= 220);
+ try std.testing.expect(settings.message_dissolve_ms >= 100 and settings.message_dissolve_ms <= 160);
+}
diff --git a/src/config.zig b/src/config.zig
index 43d2cfda..5734cd0c 100644
--- a/src/config.zig
+++ b/src/config.zig
@@ -658,10 +658,12 @@ pub const Runtime = struct {
cursor_blink: bool = true,
/// How long a message stays after the key or click that dismisses it.
message_linger_ms: u16 = 800,
- /// How long its ease-in fall into the row takes.
+ /// How long its fall into the row takes, easing out (§8.1: arriving,
+ /// 150 to 220 ms).
message_fall_ms: u16 = 180,
- /// How long its ease-out dissolve takes.
- message_dissolve_ms: u16 = 300,
+ /// How long its dissolve takes, easing in: leaving is quicker than
+ /// arriving (§8.1: 100 to 160 ms).
+ message_dissolve_ms: u16 = 150,
/// Where Dump writes and a relative Restore looks; empty is the default
/// ($XDG_DATA_HOME/pardes, else ~/.local/share/pardes).
dump_dir: Text(limits.host_path_cap) = .{},