summaryrefslogtreecommitdiff
path: root/src/surface.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/surface.zig')
-rw-r--r--src/surface.zig30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/surface.zig b/src/surface.zig
index b6f41853..15de128f 100644
--- a/src/surface.zig
+++ b/src/surface.zig
@@ -356,6 +356,8 @@ pub const Region = struct {
rect: layout.Rect,
/// The pane or column has the keyboard's focus.
active: bool = false,
+ /// A grip's pane has changes it has not saved.
+ dirty: bool = false,
/// A rail's thumb: rows from the rail's top, and how many. Zero rows is
/// a rail with no thumb (an image). A native PDF's thumb is measured in
/// document pixels and filled in by Pdf.draw while it paints, so read
@@ -364,6 +366,10 @@ pub const Region = struct {
thumb_h: u16 = 0,
/// A notice's index in its pane's `notices`.
notice: u8 = 0,
+ /// How far it stands off the page, 0 to 1: a pane's while it has the
+ /// focus (Lift, on a spring), a notice's while Lift is on. A pixel shell
+ /// casts a soft shadow from it; the tier it is drawn in never changes.
+ lift: f32 = 0,
/// Cells the column-move rail takes off the right edge while it runs
/// there: layers and pixel shells stop short of them, the grid does not.
clip: u16 = 0,
@@ -392,12 +398,34 @@ pub const Chrome = struct {
tag_fg: [3]u8 = .{ 0, 0, 0 },
scroll_track: [3]u8 = .{ 0, 0, 0 },
scroll_thumb: [3]u8 = .{ 0, 0, 0 },
+ /// The theme's accent (a glow's tint).
+ accent: [3]u8 = .{ 0, 0, 0 },
+ /// A selection's text and ground: a lift keeps their contrast too.
+ sel_fg: [3]u8 = .{ 0, 0, 0 },
+ sel_bg: [3]u8 = .{ 0, 0, 0 },
+ /// How a lifted part stands off the page (config.Runtime.LiftStyle).
+ lift_style: u8 = 0,
+ /// Rule width in pixels (colors.Theme.rule_px).
+ rule_px: u8 = 2,
+ /// The ring round a grip, acme's button: unfocused, and focused.
+ grip_border: [3]u8 = .{ 0, 0, 0 },
+ grip_focus_ring: [3]u8 = .{ 0, 0, 0 },
+ /// A dirty pane's button fill.
+ grip_dirty: [3]u8 = .{ 0, 0, 0 },
+ /// The rule between a pane's tag and its body; null is halfway between
+ /// the tag's ground and the page the shell actually draws.
+ tag_rule: ?[3]u8 = null,
+ /// The scroll column's width, button and scrollbar alike, in pixels at
+ /// a 17px tagline (acme's 12 at its font); a pixel shell scales it.
+ rail_px: u8 = 12,
};
/// The canonical interface: what a frame of pardes IS. The tty shell writes
/// these cells to vaxis one-to-one; the SDL shells rasterize them.
pub const Surface = struct {
- pub const PointerShape = enum(u8) { arrow, link, target };
+ /// `box` is acme's boxcursor, shown while a pane or a column is carried
+ /// by its grip (cols.c:485, rows.c:151).
+ pub const PointerShape = enum(u8) { arrow, link, target, box };
pointer_shape: PointerShape = .arrow,
body_layers: [MAX_PANES]Layer = @splat(.{}),
tag_layers: [MAX_TAG_LAYERS]Layer = @splat(.{}),