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 }