mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-09 01:28:19 +02:00
Gtk3: avoid pango asserts with invalid utf8 strings in TGtk3WidgetSet.GetTextExtentPoint()
This commit is contained in:
parent
d11d9793b2
commit
c0b1b7c5bc
@ -2780,19 +2780,26 @@ end;
|
||||
|
||||
function TGtk3WidgetSet.GetTextExtentPoint(DC: HDC; Str: PChar; Count: Integer;
|
||||
var Size: TSize): Boolean;
|
||||
var
|
||||
Utf8Str: String;
|
||||
begin
|
||||
Result := False;
|
||||
if not IsValidDC(DC) then
|
||||
exit;
|
||||
if (Count <= 0) or (Str = nil) or (StrPas(Str) = '') then
|
||||
Exit;
|
||||
|
||||
if (Count <= 0) or (Str = nil) or (Str^ = #0) then
|
||||
begin
|
||||
FillChar(Size, SizeOf(Size), 0);
|
||||
Exit;
|
||||
end;
|
||||
TGtk3DeviceContext(DC).CurrentFont.Layout^.set_text(Str, Count);
|
||||
|
||||
if not g_utf8_validate(Str, Count, nil) then
|
||||
Utf8Str := UTF8Copy(Utf8Encode(Str), 1, Count)
|
||||
else
|
||||
Utf8Str := UTF8Copy(Str, 1, Count);
|
||||
TGtk3DeviceContext(DC).CurrentFont.Layout^.set_text(PChar(Utf8Str), -1);
|
||||
TGtk3DeviceContext(DC).CurrentFont.Layout^.get_pixel_size(@Size.Cx, @Size.CY);
|
||||
// DebugLn('TGtk3WidgetSet.GetTextExtentPoint pixel size is ',dbgs(Size),
|
||||
// ' avgcharwidth ',dbgs(ACharWidth div PANGO_SCALE),' avgdigitwidth ',dbgs(ADigitWidth div PANGO_SCALE));
|
||||
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user