Do something useful with the resize callback
This commit is contained in:
parent
48cf77be08
commit
68e1402260
24
src/main.zig
24
src/main.zig
@ -5,6 +5,7 @@ const max = std.math.max;
|
|||||||
|
|
||||||
const Width = 800;
|
const Width = 800;
|
||||||
const Height = 600;
|
const Height = 600;
|
||||||
|
const AspectRatio = @intToFloat(comptime_float, Width) / @intToFloat(comptime_float, Height);
|
||||||
|
|
||||||
fn grey(value: u8) mfb.Rgb {
|
fn grey(value: u8) mfb.Rgb {
|
||||||
return mfb.Rgb{ .r = value, .g = value, .b = value };
|
return mfb.Rgb{ .r = value, .g = value, .b = value };
|
||||||
@ -107,12 +108,25 @@ fn handleActive(win: mfb.Window(State), isActive: bool) callconv(.C) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn handleResize(win: mfb.Window(State), width: i32, height: i32) callconv(.C) void {
|
fn handleResize(win: mfb.Window(State), width: i32, height: i32) callconv(.C) void {
|
||||||
|
const win_aspect_ratio = @intToFloat(f32, width) / @intToFloat(f32, height);
|
||||||
|
var vp_height: i32 = height;
|
||||||
|
var vp_width: i32 = width;
|
||||||
|
var vp_offset_x: i32 = 0;
|
||||||
|
var vp_offset_y: i32 = 0;
|
||||||
|
if (win_aspect_ratio > AspectRatio) {
|
||||||
|
vp_width = @floatToInt(i32, @intToFloat(f32, height) * AspectRatio);
|
||||||
|
vp_offset_x = @divTrunc(width - vp_width, 2);
|
||||||
|
} else {
|
||||||
|
vp_height = @floatToInt(i32, @intToFloat(f32, width) / AspectRatio);
|
||||||
|
vp_offset_y = @divTrunc(height - vp_height, 2);
|
||||||
|
}
|
||||||
const did_set = win.setViewport(
|
const did_set = win.setViewport(
|
||||||
@intCast(u32, width) / 4,
|
@intCast(u32, vp_offset_x),
|
||||||
@intCast(u32, height) / 4,
|
@intCast(u32, vp_offset_y),
|
||||||
@intCast(u32, width) / 2,
|
@intCast(u32, vp_width),
|
||||||
@intCast(u32, height) / 2,
|
@intCast(u32, vp_height),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!did_set) {
|
if (!did_set) {
|
||||||
std.log.warn("did not set viewport!", .{});
|
std.log.warn("did not set viewport!", .{});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user