mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-25 05:06:24 +03:00
Merge pull request #2458 from rockorager/cell-size
fix: report correct screen pixel size
This commit is contained in:
@ -500,6 +500,7 @@ pub fn init(
|
||||
|
||||
try termio.Termio.init(&self.io, alloc, .{
|
||||
.grid_size = grid_size,
|
||||
.cell_size = cell_size,
|
||||
.screen_size = screen_size,
|
||||
.padding = padding,
|
||||
.full_config = config,
|
||||
@ -1331,6 +1332,7 @@ fn setCellSize(self: *Surface, size: renderer.CellSize) !void {
|
||||
self.io.queueMessage(.{
|
||||
.resize = .{
|
||||
.grid_size = self.grid_size,
|
||||
.cell_size = self.cell_size,
|
||||
.screen_size = self.screen_size,
|
||||
.padding = self.padding,
|
||||
},
|
||||
@ -1435,6 +1437,7 @@ fn resize(self: *Surface, size: renderer.ScreenSize) !void {
|
||||
self.io.queueMessage(.{
|
||||
.resize = .{
|
||||
.grid_size = self.grid_size,
|
||||
.cell_size = self.cell_size,
|
||||
.screen_size = self.screen_size,
|
||||
.padding = self.padding,
|
||||
},
|
||||
|
@ -11,6 +11,9 @@ const termio = @import("../termio.zig");
|
||||
/// The size of the terminal grid.
|
||||
grid_size: renderer.GridSize,
|
||||
|
||||
/// The size of a single cell, in pixels.
|
||||
cell_size: renderer.CellSize,
|
||||
|
||||
/// The size of the viewport in pixels.
|
||||
screen_size: renderer.ScreenSize,
|
||||
|
||||
|
@ -60,6 +60,9 @@ surface_mailbox: apprt.surface.Mailbox,
|
||||
/// The cached grid size whenever a resize is called.
|
||||
grid_size: renderer.GridSize,
|
||||
|
||||
/// The size of a single cell. Used for size reports.
|
||||
cell_size: renderer.CellSize,
|
||||
|
||||
/// The mailbox implementation to use.
|
||||
mailbox: termio.Mailbox,
|
||||
|
||||
@ -171,9 +174,8 @@ pub fn init(self: *Termio, alloc: Allocator, opts: termio.Options) !void {
|
||||
backend.initTerminal(&term);
|
||||
|
||||
// Setup our terminal size in pixels for certain requests.
|
||||
const screen_size = opts.screen_size.subPadding(opts.padding);
|
||||
term.width_px = screen_size.width;
|
||||
term.height_px = screen_size.height;
|
||||
term.width_px = opts.grid_size.columns * opts.cell_size.width;
|
||||
term.height_px = opts.grid_size.rows * opts.cell_size.height;
|
||||
|
||||
// Create our stream handler. This points to memory in self so it
|
||||
// isn't safe to use until self.* is set.
|
||||
@ -214,6 +216,7 @@ pub fn init(self: *Termio, alloc: Allocator, opts: termio.Options) !void {
|
||||
.renderer_mailbox = opts.renderer_mailbox,
|
||||
.surface_mailbox = opts.surface_mailbox,
|
||||
.grid_size = opts.grid_size,
|
||||
.cell_size = opts.cell_size,
|
||||
.backend = opts.backend,
|
||||
.mailbox = opts.mailbox,
|
||||
.terminal_stream = .{
|
||||
@ -348,6 +351,7 @@ pub fn resize(
|
||||
self: *Termio,
|
||||
td: *ThreadData,
|
||||
grid_size: renderer.GridSize,
|
||||
cell_size: renderer.CellSize,
|
||||
screen_size: renderer.ScreenSize,
|
||||
padding: renderer.Padding,
|
||||
) !void {
|
||||
@ -357,6 +361,7 @@ pub fn resize(
|
||||
|
||||
// Update our cached grid size
|
||||
self.grid_size = grid_size;
|
||||
self.cell_size = cell_size;
|
||||
|
||||
// Enter the critical area that we want to keep small
|
||||
{
|
||||
@ -371,8 +376,8 @@ pub fn resize(
|
||||
);
|
||||
|
||||
// Update our pixel sizes
|
||||
self.terminal.width_px = padded_size.width;
|
||||
self.terminal.height_px = padded_size.height;
|
||||
self.terminal.width_px = self.grid_size.columns * self.cell_size.width;
|
||||
self.terminal.height_px = self.grid_size.rows * self.cell_size.height;
|
||||
|
||||
// Disable synchronized output mode so that we show changes
|
||||
// immediately for a resize. This is allowed by the spec.
|
||||
@ -412,24 +417,24 @@ fn sizeReportLocked(self: *Termio, td: *ThreadData, style: termio.Message.SizeRe
|
||||
.{
|
||||
self.grid_size.rows,
|
||||
self.grid_size.columns,
|
||||
self.terminal.height_px,
|
||||
self.terminal.width_px,
|
||||
self.grid_size.rows * self.cell_size.height,
|
||||
self.grid_size.columns * self.cell_size.width,
|
||||
},
|
||||
),
|
||||
.csi_14_t => try std.fmt.bufPrint(
|
||||
&buf,
|
||||
"\x1b[4;{};{}t",
|
||||
.{
|
||||
self.terminal.height_px,
|
||||
self.terminal.width_px,
|
||||
self.grid_size.rows * self.cell_size.height,
|
||||
self.grid_size.columns * self.cell_size.width,
|
||||
},
|
||||
),
|
||||
.csi_16_t => try std.fmt.bufPrint(
|
||||
&buf,
|
||||
"\x1b[6;{};{}t",
|
||||
.{
|
||||
self.terminal.height_px / self.grid_size.rows,
|
||||
self.terminal.width_px / self.grid_size.columns,
|
||||
self.cell_size.height,
|
||||
self.cell_size.width,
|
||||
},
|
||||
),
|
||||
.csi_18_t => try std.fmt.bufPrint(
|
||||
|
@ -383,6 +383,7 @@ fn coalesceCallback(
|
||||
cb.io.resize(
|
||||
&cb.data,
|
||||
v.grid_size,
|
||||
v.cell_size,
|
||||
v.screen_size,
|
||||
v.padding,
|
||||
) catch |err| {
|
||||
|
@ -20,6 +20,9 @@ pub const Message = union(enum) {
|
||||
/// The grid size for the given screen size with padding applied.
|
||||
grid_size: renderer.GridSize,
|
||||
|
||||
/// The updated cell size.
|
||||
cell_size: renderer.CellSize,
|
||||
|
||||
/// The full screen (drawable) size. This does NOT include padding.
|
||||
/// This should be sent on to the renderer.
|
||||
screen_size: renderer.ScreenSize,
|
||||
|
Reference in New Issue
Block a user