feat(console): redraw when children loaded
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
const Model = struct {
|
||||
crash: bool = false,
|
||||
redraw: bool = false,
|
||||
allocator: std.mem.Allocator,
|
||||
current_items_view: *vxfw.ListView,
|
||||
parent_items_view: *vxfw.ListView,
|
||||
@@ -20,7 +21,10 @@ const Model = struct {
|
||||
fn typeErasedEventHandler(ptr: *anyopaque, ctx: *vxfw.EventContext, event: vxfw.Event) anyerror!void {
|
||||
const vm: *Model = @ptrCast(@alignCast(ptr));
|
||||
switch (event) {
|
||||
.init => return ctx.requestFocus(vm.current_items_view.widget()),
|
||||
.init => {
|
||||
try ctx.tick(8, vm.widget());
|
||||
return ctx.requestFocus(vm.current_items_view.widget());
|
||||
},
|
||||
.key_press => |key| {
|
||||
if (key.matches('c', .{ .ctrl = true })) {
|
||||
ctx.quit = true;
|
||||
@@ -33,6 +37,13 @@ const Model = struct {
|
||||
}
|
||||
},
|
||||
.focus_in => return ctx.requestFocus(vm.current_items_view.widget()),
|
||||
.tick => {
|
||||
if (vm.redraw) {
|
||||
ctx.redraw = true;
|
||||
}
|
||||
try ctx.tick(8, vm.widget());
|
||||
return;
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
@@ -56,6 +67,8 @@ const Model = struct {
|
||||
|
||||
fn typeErasedDrawFn(ptr: *anyopaque, ctx: vxfw.DrawContext) std.mem.Allocator.Error!vxfw.Surface {
|
||||
const vm: *Model = @ptrCast(@alignCast(ptr));
|
||||
vm.redraw = false;
|
||||
|
||||
const rootWidgets = try ctx.arena.create(std.ArrayList(vxfw.SubSurface));
|
||||
rootWidgets.* = std.ArrayList(vxfw.SubSurface).init(ctx.arena);
|
||||
|
||||
@@ -387,18 +400,32 @@ pub fn main() !void {
|
||||
.children = .{ .slice = items },
|
||||
};
|
||||
|
||||
const model = try allocator.create(Model);
|
||||
defer allocator.destroy(model);
|
||||
|
||||
const childrenLoadedObserver = try allocator.create(Observer(*Tab));
|
||||
childrenLoadedObserver.* = Observer(*Tab){
|
||||
.ctx = @ptrCast(@alignCast(model)),
|
||||
.update = (struct {
|
||||
fn update(ctx: *anyopaque, _: *Tab) void {
|
||||
const ctx_model: *Model = @ptrCast(@alignCast(ctx));
|
||||
ctx_model.redraw = true;
|
||||
}
|
||||
}).update,
|
||||
};
|
||||
|
||||
var app_common_model: AppCommonModel = undefined;
|
||||
{
|
||||
var appState: AppState = AppState.init(allocator);
|
||||
try appState.addTab(tab1);
|
||||
try appState.setCurrentTab(tab1);
|
||||
|
||||
const model = try allocator.create(Model);
|
||||
defer allocator.destroy(model);
|
||||
try appState.tabChildrenLoaded.attach(childrenLoadedObserver);
|
||||
|
||||
var app_common_model: AppCommonModel = undefined;
|
||||
try AppCommonModel.init(&app_common_model, allocator, appState);
|
||||
}
|
||||
defer app_common_model.deinit();
|
||||
|
||||
|
||||
model.* = .{
|
||||
.allocator = allocator,
|
||||
.app_common_model = &app_common_model,
|
||||
@@ -413,17 +440,6 @@ pub fn main() !void {
|
||||
var app = try vxfw.App.init(allocator);
|
||||
defer app.deinit();
|
||||
|
||||
const childrenLoadedObserver = try allocator.create(Observer(*Tab));
|
||||
childrenLoadedObserver.* = Observer(*Tab){
|
||||
.ctx = @ptrCast(@alignCast(&app)),
|
||||
.update = (struct{fn update(ctx: *anyopaque, _: *Tab)void {
|
||||
const app1: *vxfw.App = @ptrCast(@alignCast(ctx));
|
||||
_ = app1;
|
||||
}}).update,
|
||||
};
|
||||
|
||||
try app_common_model.appState.tabChildrenLoaded.attach(childrenLoadedObserver);
|
||||
|
||||
try app.run(model.widget(), .{});
|
||||
|
||||
model.app_common_model.usage_number.data -= 1;
|
||||
|
||||
Reference in New Issue
Block a user