lib/ui/src/style/paint.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

  1 const std = @import("std");
  2 const abi = @import("../abi/root.zig");
  3 
  4 pub const Paint = extern struct {
  5     background: abi.Color = .{},
  6     foreground: abi.Color = .{},
  7     border_color: [4]abi.Color = @splat(.{}),
  8     outline_color: abi.Color = .{},
  9     border_width: [4]f32 = @splat(0),
 10     radius: [4]f32 = @splat(0),
 11     outline_width: f32 = 0,
 12     outline_offset: f32 = 0,
 13     outset: f32 = 0,
 14     image: u32 = 0,
 15     border_style: [4]u8 = @splat(0),
 16     outline_style: u8 = 0,
 17     opacity: u8 = 255,
 18     flags: u16 = 0,
 19 };
 20 
 21 pub const ImagePaint = extern struct {
 22     asset: abi.AssetHandle = .{},
 23     source: abi.Rect = .{},
 24     tint: abi.Color = .{},
 25     fit: u8 = 0,
 26     repeat: u8 = 0,
 27     origin_box: u8 = 0,
 28     clip_box: u8 = 0,
 29 };
 30 
 31 pub const TextStyle = extern struct {
 32     face: abi.AssetHandle = .{},
 33     fallback_first: u32 = 0,
 34     fallback_count: u32 = 0,
 35     size: f32 = 0,
 36     line_height: f32 = 0,
 37     letter_spacing: f32 = 0,
 38     word_spacing: f32 = 0,
 39     indent: f32 = 0,
 40     underline_offset: f32 = 0,
 41     decoration_thickness: f32 = 0,
 42     decoration_color: abi.Color = .{},
 43     weight: u16 = 400,
 44     flags: u16 = 0,
 45     text_align: u8 = 0,
 46     transform: u8 = 0,
 47     decoration_line: u8 = 0,
 48     decoration_style: u8 = 0,
 49 };
 50 
 51 pub const TextFlags = struct {
 52     pub const white_space_shift: u4 = 0;
 53     pub const word_break_shift: u4 = 3;
 54     pub const overflow_wrap_shift: u4 = 5;
 55     pub const direction_shift: u4 = 7;
 56     pub const user_select_shift: u4 = 8;
 57     pub const slant_shift: u4 = 10;
 58 };
 59 
 60 comptime {
 61     std.debug.assert(@sizeOf(Paint) == 84);
 62     std.debug.assert(@alignOf(Paint) == 4);
 63     std.debug.assert(@offsetOf(Paint, "background") == 0);
 64     std.debug.assert(@offsetOf(Paint, "foreground") == 4);
 65     std.debug.assert(@offsetOf(Paint, "border_color") == 8);
 66     std.debug.assert(@offsetOf(Paint, "outline_color") == 24);
 67     std.debug.assert(@offsetOf(Paint, "border_width") == 28);
 68     std.debug.assert(@offsetOf(Paint, "radius") == 44);
 69     std.debug.assert(@offsetOf(Paint, "outline_width") == 60);
 70     std.debug.assert(@offsetOf(Paint, "outline_offset") == 64);
 71     std.debug.assert(@offsetOf(Paint, "outset") == 68);
 72     std.debug.assert(@offsetOf(Paint, "image") == 72);
 73     std.debug.assert(@offsetOf(Paint, "border_style") == 76);
 74     std.debug.assert(@offsetOf(Paint, "outline_style") == 80);
 75     std.debug.assert(@offsetOf(Paint, "opacity") == 81);
 76     std.debug.assert(@offsetOf(Paint, "flags") == 82);
 77     std.debug.assert(@sizeOf(ImagePaint) == 32);
 78     std.debug.assert(@alignOf(ImagePaint) == 4);
 79     std.debug.assert(@offsetOf(ImagePaint, "asset") == 0);
 80     std.debug.assert(@offsetOf(ImagePaint, "source") == 8);
 81     std.debug.assert(@offsetOf(ImagePaint, "tint") == 24);
 82     std.debug.assert(@offsetOf(ImagePaint, "fit") == 28);
 83     std.debug.assert(@offsetOf(ImagePaint, "repeat") == 29);
 84     std.debug.assert(@offsetOf(ImagePaint, "origin_box") == 30);
 85     std.debug.assert(@offsetOf(ImagePaint, "clip_box") == 31);
 86     std.debug.assert(@sizeOf(TextStyle) == 56);
 87     std.debug.assert(@alignOf(TextStyle) == 4);
 88     std.debug.assert(@offsetOf(TextStyle, "face") == 0);
 89     std.debug.assert(@offsetOf(TextStyle, "fallback_first") == 8);
 90     std.debug.assert(@offsetOf(TextStyle, "fallback_count") == 12);
 91     std.debug.assert(@offsetOf(TextStyle, "size") == 16);
 92     std.debug.assert(@offsetOf(TextStyle, "line_height") == 20);
 93     std.debug.assert(@offsetOf(TextStyle, "letter_spacing") == 24);
 94     std.debug.assert(@offsetOf(TextStyle, "word_spacing") == 28);
 95     std.debug.assert(@offsetOf(TextStyle, "indent") == 32);
 96     std.debug.assert(@offsetOf(TextStyle, "underline_offset") == 36);
 97     std.debug.assert(@offsetOf(TextStyle, "decoration_thickness") == 40);
 98     std.debug.assert(@offsetOf(TextStyle, "decoration_color") == 44);
 99     std.debug.assert(@offsetOf(TextStyle, "weight") == 48);
100     std.debug.assert(@offsetOf(TextStyle, "flags") == 50);
101     std.debug.assert(@offsetOf(TextStyle, "text_align") == 52);
102     std.debug.assert(@offsetOf(TextStyle, "transform") == 53);
103     std.debug.assert(@offsetOf(TextStyle, "decoration_line") == 54);
104     std.debug.assert(@offsetOf(TextStyle, "decoration_style") == 55);
105 }