Commit dbe90566 authored by Željan Rikalo's avatar Željan Rikalo 🏊🏼
Browse files

Gtk2,Qt: make ETO_OPAQUE work from TCanvas.TextOut(). issue #22719

git-svn-id: trunk@38373 -
parent 1ffcfe06
......@@ -3823,6 +3823,7 @@ var
Foreground, BackgroundColor: PGDKColor;
CurDx: PInteger;
CurStr: PChar;
R: TRect;
procedure DoTextOut(X,Y : Integer; Str: Pchar; CurCount: Integer);
var
......@@ -3854,12 +3855,14 @@ begin
if DevCtx.GC <> nil then; // create GC
if ((Options and (ETO_OPAQUE+ETO_CLIPPED)) <> 0)
and (Rect=nil)
then begin
DebugLn('WARNING: [TGtk2WidgetSet.ExtTextOut] Rect=nil');
Result := False;
exit;
if ((Options and (ETO_OPAQUE+ETO_CLIPPED)) <> 0) and
(Rect=nil) then
begin
R := RectFromGdkRect(DevCtx.ClipRect);
OffsetRect(R, -R.Left, -R.Top);
OffsetRect(R, X, Y);
DrawText(DC, Str, Count, R, DT_SINGLELINE or DT_CALCRECT);
Rect := @R;
end;
BackgroundColor := nil;
......@@ -3868,12 +3871,12 @@ begin
DCOrigin := DevCtx.Offset;
if (Options and ETO_CLIPPED) <> 0
then begin
if (Options and ETO_CLIPPED) <> 0 then
begin
X := Rect^.Left;
Y := Rect^.Top;
IntersectClipRect(DC, Rect^.Left, Rect^.Top,
Rect^.Right, Rect^.Bottom);
Rect^.Right, Rect^.Bottom);
end;
if DevCtx.HasTransf then
......
......@@ -2181,6 +2181,7 @@ var
WideStr: WideString;
QtDC: TQtDeviceContext absolute DC;
B: Boolean;
R, R1: TRect;
begin
{$ifdef VerboseQtWinAPI}
WriteLn('[WinAPI ExtTextOut]');
......@@ -2188,13 +2189,21 @@ begin
Result := False;
if ((Options and (ETO_OPAQUE + ETO_CLIPPED)) <> 0) and (Rect = nil) then
exit;
if not IsValidDC(DC) then Exit;
if ((Options and ETO_OPAQUE) <> 0) then
QtDC.fillRect(Rect^.Left, Rect^.Top, Rect^.Right - Rect^.Left, Rect^.Bottom - Rect^.Top);
if ((Options and (ETO_OPAQUE + ETO_CLIPPED)) <> 0) and (Rect = nil) then
begin
if Count >= 0 then
WideStr := GetUtf8String(Copy(Str, 1, Count))
else
WideStr := GetUtf8String(Str);
R := QtDC.getClipRegion.getBoundingRect;
QtDC.font.Metrics.boundingRect(@R1, @R, 0, @WideStr);
Rect := @R1;
end else
if ((Options and ETO_OPAQUE) <> 0) and (Rect <> nil) then
QtDC.fillRect(Rect^.Left, Rect^.Top, Rect^.Right - Rect^.Left, Rect^.Bottom - Rect^.Top);
if Str <> nil then
begin
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment