mirror of
https://github.com/ziglang/zig.git
synced 2025-12-29 01:23:17 +00:00
Handle some weird edge cases of Win32 API
Sometimes the viewport srWindow may report an invalid rectangle where the top row is below the bottom one.
This commit is contained in:
parent
b5a50a26eb
commit
b0724a350f
@ -210,13 +210,15 @@ fn refreshWithHeldLock(self: *Progress) void {
|
||||
|
||||
saved_cursor_pos = info.dwCursorPosition;
|
||||
|
||||
const window_height = @intCast(windows.DWORD, info.srWindow.Bottom - info.srWindow.Top) + 1;
|
||||
const window_width = @intCast(windows.DWORD, info.srWindow.Right - info.srWindow.Left) + 1;
|
||||
const window_height = @intCast(windows.DWORD, info.srWindow.Bottom - info.srWindow.Top + 1);
|
||||
const window_width = @intCast(windows.DWORD, info.srWindow.Right - info.srWindow.Left + 1);
|
||||
// Number of terminal cells to clear, starting from the cursor position
|
||||
// and ending at the window bottom right corner.
|
||||
const fill_chars = window_width * (window_height -
|
||||
@intCast(windows.DWORD, info.dwCursorPosition.Y - info.srWindow.Top)) -
|
||||
@intCast(windows.DWORD, info.dwCursorPosition.X - info.srWindow.Left);
|
||||
const fill_chars = if (window_width == 0 or window_height == 0) 0 else chars: {
|
||||
break :chars window_width * (window_height -
|
||||
@intCast(windows.DWORD, info.dwCursorPosition.Y - info.srWindow.Top)) -
|
||||
@intCast(windows.DWORD, info.dwCursorPosition.X - info.srWindow.Left);
|
||||
};
|
||||
|
||||
var written: windows.DWORD = undefined;
|
||||
if (windows.kernel32.FillConsoleOutputAttribute(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user