lib/ui/src/asset/model.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2 const abi = @import("../abi/root.zig");
3
4 pub const AssetHandle = abi.AssetHandle;
5
6 pub const FontDescriptor = extern struct {
7 family_offset: u32 = 0,
8 family_len: u32 = 0,
9 units_per_em: u16 = 1000,
10 weight: u16 = 400,
11 width: u8 = 5,
12 slant: u8 = 0,
13 monospace: u8 = 0,
14 color: u8 = 0,
15 ascent: f32 = 0,
16 descent: f32 = 0,
17 line_gap: f32 = 0,
18 coverage: [8]u32 = @splat(0),
19 face_index: u32 = 0,
20 };
21
22 pub const ImageDescriptor = extern struct {
23 width: u32 = 0,
24 height: u32 = 0,
25 format: u16 = 0,
26 flags: u16 = 0,
27 stride: u32 = 0,
28 reserved: u32 = 0,
29 };
30
31 pub const Bytes = union(enum) {
32 borrowed: []const u8,
33 owned: []const u8,
34
35 pub fn slice(self: Bytes) []const u8 {
36 return switch (self) {
37 .borrowed => |value| value,
38 .owned => |value| value,
39 };
40 }
41 };
42
43 pub const Kind = enum { font, image };
44
45 pub const Error = error{
46 FontCapacityExceeded,
47 ImageCapacityExceeded,
48 OwnedBytesExceeded,
49 FamilyTooLong,
50 StaleAsset,
51 GenerationExhausted,
52 };
53
54 pub const Font = struct {
55 descriptor: FontDescriptor,
56 family: []const u8,
57 bytes: []const u8,
58 };
59
60 pub const Image = struct {
61 descriptor: ImageDescriptor,
62 bytes: []const u8,
63 };
64
65 comptime {
66 std.debug.assert(@sizeOf(FontDescriptor) == 64);
67 std.debug.assert(@offsetOf(FontDescriptor, "family_offset") == 0);
68 std.debug.assert(@offsetOf(FontDescriptor, "family_len") == 4);
69 std.debug.assert(@offsetOf(FontDescriptor, "units_per_em") == 8);
70 std.debug.assert(@offsetOf(FontDescriptor, "weight") == 10);
71 std.debug.assert(@offsetOf(FontDescriptor, "width") == 12);
72 std.debug.assert(@offsetOf(FontDescriptor, "slant") == 13);
73 std.debug.assert(@offsetOf(FontDescriptor, "monospace") == 14);
74 std.debug.assert(@offsetOf(FontDescriptor, "color") == 15);
75 std.debug.assert(@offsetOf(FontDescriptor, "ascent") == 16);
76 std.debug.assert(@offsetOf(FontDescriptor, "descent") == 20);
77 std.debug.assert(@offsetOf(FontDescriptor, "line_gap") == 24);
78 std.debug.assert(@offsetOf(FontDescriptor, "coverage") == 28);
79 std.debug.assert(@offsetOf(FontDescriptor, "face_index") == 60);
80 std.debug.assert(@sizeOf(ImageDescriptor) == 20);
81 std.debug.assert(@sizeOf(Bytes) == 24);
82 }