lib/ui/src/fact/records.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2 const abi = @import("../abi/root.zig");
3 const style = @import("../style/root.zig");
4
5 pub const Paint = style.Paint;
6 pub const ImagePaint = style.ImagePaint;
7 pub const TextStyle = style.TextStyle;
8
9 pub const Fact = extern struct {
10 id: u64 = 0,
11 revision: u64 = 0,
12 rect: abi.Rect = .{},
13 clip: u32 = 0,
14 paint: u32 = 0,
15 text: u32 = 0,
16 state: u32 = 0,
17 role: u16 = 0,
18 kind: u16 = 0,
19 flags: u16 = 0,
20 focus_index: u16 = 0xffff,
21 name: u32 = 0,
22 action: u32 = 0,
23 };
24
25 pub const Clip = extern struct {
26 rect: abi.Rect = .{},
27 origin_x: f32 = 0,
28 origin_y: f32 = 0,
29 scroll_x: f32 = 0,
30 scroll_y: f32 = 0,
31 parent: u32 = 0,
32 flags: u32 = 0,
33 };
34
35 pub const TextLayout = extern struct {
36 line_first: u32 = 0,
37 line_count: u32 = 0,
38 width: f32 = 0,
39 height: f32 = 0,
40 };
41
42 pub const TextLine = extern struct {
43 span_first: u32 = 0,
44 span_count: u32 = 0,
45 origin_x: f32 = 0,
46 baseline_y: f32 = 0,
47 width: f32 = 0,
48 height: f32 = 0,
49 };
50
51 pub const TextSpan = extern struct {
52 cluster_first: u32 = 0,
53 cluster_count: u32 = 0,
54 origin_x: f32 = 0,
55 width: f32 = 0,
56 paint: u32 = 0,
57 text_style: u32 = 0,
58 };
59
60 pub const Cluster = extern struct {
61 byte_start: u32 = 0,
62 byte_end: u32 = 0,
63 advance: f32 = 0,
64 glyph: u32 = 0,
65 face: u32 = 0,
66 columns: u8 = 0,
67 flags: u8 = 0,
68 _pad: u16 = 0,
69 };
70
71 pub const TextTables = struct {
72 layouts: []const TextLayout,
73 lines: []const TextLine,
74 spans: []const TextSpan,
75 clusters: []const Cluster,
76 };
77
78 pub const UnitMetrics = extern struct {
79 device_per_unit_x: f32 = 1,
80 device_per_unit_y: f32 = 1,
81 snap_x: f32 = 1,
82 snap_y: f32 = 1,
83 root_font_size: f32 = 16,
84 cell_advance: f32 = 1,
85 cell_height: f32 = 1,
86 flags: u32 = 0,
87 };
88
89 comptime {
90 std.debug.assert(@sizeOf(Fact) == 64);
91 std.debug.assert(@alignOf(Fact) == 8);
92 std.debug.assert(@offsetOf(Fact, "rect") == 16);
93 std.debug.assert(@offsetOf(Fact, "clip") == 32);
94 std.debug.assert(@offsetOf(Fact, "paint") == 36);
95 std.debug.assert(@offsetOf(Fact, "text") == 40);
96 std.debug.assert(@offsetOf(Fact, "state") == 44);
97 std.debug.assert(@offsetOf(Fact, "role") == 48);
98 std.debug.assert(@offsetOf(Fact, "kind") == 50);
99 std.debug.assert(@offsetOf(Fact, "flags") == 52);
100 std.debug.assert(@offsetOf(Fact, "focus_index") == 54);
101 std.debug.assert(@offsetOf(Fact, "name") == 56);
102 std.debug.assert(@offsetOf(Fact, "action") == 60);
103 std.debug.assert(@sizeOf(Clip) == 40);
104 std.debug.assert(@alignOf(Clip) == 4);
105 std.debug.assert(@offsetOf(Clip, "origin_x") == 16);
106 std.debug.assert(@offsetOf(Clip, "scroll_x") == 24);
107 std.debug.assert(@offsetOf(Clip, "parent") == 32);
108 std.debug.assert(@sizeOf(TextLayout) == 16);
109 std.debug.assert(@alignOf(TextLayout) == 4);
110 std.debug.assert(@sizeOf(TextLine) == 24);
111 std.debug.assert(@alignOf(TextLine) == 4);
112 std.debug.assert(@sizeOf(TextSpan) == 24);
113 std.debug.assert(@alignOf(TextSpan) == 4);
114 std.debug.assert(@offsetOf(TextSpan, "paint") == 16);
115 std.debug.assert(@offsetOf(TextSpan, "text_style") == 20);
116 std.debug.assert(@sizeOf(Cluster) == 24);
117 std.debug.assert(@alignOf(Cluster) == 4);
118 std.debug.assert(@offsetOf(Cluster, "face") == 16);
119 std.debug.assert(@offsetOf(Cluster, "_pad") == 22);
120 std.debug.assert(@sizeOf(UnitMetrics) == 32);
121 std.debug.assert(@alignOf(UnitMetrics) == 4);
122 std.debug.assert(@offsetOf(UnitMetrics, "flags") == 28);
123 }