Re-select OEM font into DC before every render pass
Relying on CS_OWNDC to retain the font between frames is fragile -- Delphi's Canvas infrastructure can deselect it during paint cycles. Without the OEM font, ExtTextOut renders with SYSTEM_FONT (ANSI_CHARSET), causing CP437 box-drawing glyphs to display as accented letters, cell metrics to mismatch (lines clipped), and cursor position to drift. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
78753a65d8
commit
a9e25ec67f
1 changed files with 7 additions and 1 deletions
|
|
@ -1139,8 +1139,12 @@ begin
|
|||
Exit;
|
||||
end;
|
||||
|
||||
{ Render dirty rows directly to screen DC }
|
||||
{ Render dirty rows directly to screen DC. Re-select the OEM font each }
|
||||
{ frame because Delphi's Canvas infrastructure can deselect it from the }
|
||||
{ CS_OWNDC between paint cycles. }
|
||||
DC := GetDC(Handle);
|
||||
SelectObject(DC, FPaintFont);
|
||||
SetBkMode(DC, OPAQUE);
|
||||
for Row := 0 to FRows - 1 do
|
||||
begin
|
||||
if FAllDirty or FDirtyRow[Row] then
|
||||
|
|
@ -1321,6 +1325,8 @@ begin
|
|||
{ Full repaint: render each row directly to screen }
|
||||
FAllDirty := True;
|
||||
DC := Canvas.Handle;
|
||||
SelectObject(DC, FPaintFont);
|
||||
SetBkMode(DC, OPAQUE);
|
||||
|
||||
for Row := 0 to FRows - 1 do
|
||||
begin
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue