feat: add tui top layer rendering support
This commit is contained in:
parent
6cc45d76cf
commit
9dbb15c796
1 changed files with 32 additions and 0 deletions
|
|
@ -31,6 +31,7 @@ const Allocator = std.mem.Allocator;
|
||||||
|
|
||||||
allocator: Allocator,
|
allocator: Allocator,
|
||||||
rdr_: renderer,
|
rdr_: renderer,
|
||||||
|
top_layer_: ?*renderer.Layer = null,
|
||||||
config_: @import("config"),
|
config_: @import("config"),
|
||||||
config_bufs: [][]const u8,
|
config_bufs: [][]const u8,
|
||||||
session_tab_width: ?usize = null,
|
session_tab_width: ?usize = null,
|
||||||
|
|
@ -507,12 +508,25 @@ fn render(self: *Self) void {
|
||||||
break :ret if (self.mainview_) |mv| mv.render(self.current_theme()) else false;
|
break :ret if (self.mainview_) |mv| mv.render(self.current_theme()) else false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (self.top_layer_) |top_layer_| {
|
||||||
|
const frame = tracy.initZone(@src(), .{ .name = "tui blit top layer" });
|
||||||
|
defer frame.deinit();
|
||||||
|
self.logger.print("top_layer: {}:{}:{}:{}", .{
|
||||||
|
top_layer_.y_off,
|
||||||
|
top_layer_.x_off,
|
||||||
|
top_layer_.view.screen.height,
|
||||||
|
top_layer_.view.screen.width,
|
||||||
|
});
|
||||||
|
top_layer_.draw(self.rdr_.stdplane());
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const frame = tracy.initZone(@src(), .{ .name = renderer.log_name ++ " render" });
|
const frame = tracy.initZone(@src(), .{ .name = renderer.log_name ++ " render" });
|
||||||
defer frame.deinit();
|
defer frame.deinit();
|
||||||
self.rdr_.render() catch |e| self.logger.err("render", e);
|
self.rdr_.render() catch |e| self.logger.err("render", e);
|
||||||
tracy.frameMark();
|
tracy.frameMark();
|
||||||
}
|
}
|
||||||
|
self.top_layer_reset();
|
||||||
|
|
||||||
self.idle_frame_count = if (self.unrendered_input_events_count > 0)
|
self.idle_frame_count = if (self.unrendered_input_events_count > 0)
|
||||||
0
|
0
|
||||||
|
|
@ -1427,6 +1441,24 @@ fn stdplane(self: *Self) renderer.Plane {
|
||||||
return self.rdr_.stdplane();
|
return self.rdr_.stdplane();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn top_layer(opts: renderer.Layer.Options) ?*renderer.Plane {
|
||||||
|
const self = current();
|
||||||
|
if (self.top_layer_) |_| return null;
|
||||||
|
self.top_layer_ = renderer.Layer.init(
|
||||||
|
self.allocator,
|
||||||
|
self.rdr_.stdplane().window.unicode,
|
||||||
|
opts,
|
||||||
|
) catch @panic("OOM toplayer");
|
||||||
|
return self.top_layer_.?.plane();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn top_layer_reset(self: *Self) void {
|
||||||
|
if (self.top_layer_) |top_layer_| {
|
||||||
|
top_layer_.deinit();
|
||||||
|
self.top_layer_ = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn egc_chunk_width(chunk: []const u8, abs_col: usize, tab_width: usize) usize {
|
pub fn egc_chunk_width(chunk: []const u8, abs_col: usize, tab_width: usize) usize {
|
||||||
return plane().egc_chunk_width(chunk, abs_col, tab_width);
|
return plane().egc_chunk_width(chunk, abs_col, tab_width);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue