Something went wrong. Try again.
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677const std = @import("std");const vaxis = @import("vaxis");const vxfw = vaxis.vxfw;
const Model = struct { split: vxfw.SplitView, lhs: vxfw.Text, rhs: vxfw.Text, children: [1]vxfw.SubSurface = undefined,
pub fn widget(self: *Model) vxfw.Widget { return .{ .userdata = self, .eventHandler = Model.typeErasedEventHandler, .drawFn = Model.typeErasedDrawFn, }; }
fn typeErasedEventHandler(ptr: *anyopaque, ctx: *vxfw.EventContext, event: vxfw.Event) anyerror!void { const self: *Model = @ptrCast(@alignCast(ptr)); switch (event) { .init => { self.split.lhs = self.lhs.widget(); self.split.rhs = self.rhs.widget(); }, .key_press => |key| { if (key.matches('c', .{ .ctrl = true })) { ctx.quit = true; return; } }, else => {}, } }
fn typeErasedDrawFn(ptr: *anyopaque, ctx: vxfw.DrawContext) std.mem.Allocator.Error!vxfw.Surface { const self: *Model = @ptrCast(@alignCast(ptr)); const surf = try self.split.widget().draw(ctx); self.children[0] = .{ .surface = surf, .origin = .{ .row = 0, .col = 0 }, }; return .{ .size = ctx.max.size(), .widget = self.widget(), .buffer = &.{}, .children = &self.children, }; }};
pub fn main(init: std.process.Init) !void { const io = init.io; const alloc = init.gpa;
var buffer: [1024]u8 = undefined; var app: vxfw.App = try .init(io, alloc, init.environ_map, &buffer); defer app.deinit();
const model = try alloc.create(Model); defer alloc.destroy(model); model.* = .{ .lhs = .{ .text = "Left hand side" }, .rhs = .{ .text = "right hand side" }, .split = .{ .lhs = undefined, .rhs = undefined, .width = 10 }, };
model.split.lhs = model.lhs.widget(); model.split.rhs = model.rhs.widget();
try app.run(model.widget(), .{});}
test { std.testing.refAllDecls(@This());}