-
Notifications
You must be signed in to change notification settings - Fork 9
/
inject.zig
66 lines (59 loc) · 1.82 KB
/
inject.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const std = @import("std");
const raylib = @import("raylib");
const raygui = @cImport({
@cInclude("raygui.h");
@cInclude("raygui_marshal.h");
});
pub const Rectangle = raylib.Rectangle;
pub const Vector2 = raylib.Vector2;
pub const Color = raylib.Color;
pub const RICON_SIZE = 32;
pub const RICON_DATA_ELEMENTS = 255;
pub fn textAlignPixelOffset(h: i32) i32 {
return h % 2;
}
fn bitCheck(a: u32, b: u32) bool {
const r = @shlWithOverflow(1, @as(u5, @truncate(b)));
return (a & (r[0])) != 0;
}
/// Draw selected icon using rectangles pixel-by-pixel
pub fn GuiDrawIcon(
icon: raygui.GuiIconName,
posX: i32,
posY: i32,
pixelSize: i32,
color: raylib.Color,
) void {
const iconId = @intFromEnum(icon);
var i: i32 = 0;
var y: i32 = 0;
while (i < RICON_SIZE * RICON_SIZE / 32) : (i += 1) {
var k: u32 = 0;
while (k < 32) : (k += 1) {
if (bitCheck(raygui.guiIcons[@as(usize, @intCast(iconId * RICON_DATA_ELEMENTS + i))], k)) {
_ = raylib.DrawRectangle(
posX + @as(i32, @intCast(k % RICON_SIZE)) * pixelSize,
posY + y * pixelSize,
pixelSize,
pixelSize,
color,
);
}
if ((k == 15) or (k == 31)) {
y += 1;
}
}
}
}
/// Draw button with icon centered
pub fn GuiDrawIconButton(bounds: raylib.Rectangle, icon: GuiIconName, iconTint: raylib.Color) bool {
const pressed = GuiButton(bounds, "");
GuiDrawIcon(
icon,
@as(i32, @intFromFloat(bounds.x + bounds.width / 2 - @as(f32, @floatFromInt(RICON_SIZE)) / 2)),
@as(i32, @intFromFloat(bounds.y + (bounds.height / 2) - @as(f32, @floatFromInt(RICON_SIZE)) / 2)),
1,
iconTint,
);
return pressed;
}