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