mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 21:41:35 +02:00
Gtk2,Qt: make ETO_OPAQUE work from TCanvas.TextOut(). issue #22719
git-svn-id: trunk@38373 -
This commit is contained in:
parent
1ffcfe06cd
commit
dbe9056692
@ -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,8 +3871,8 @@ 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,
|
||||
|
@ -2181,6 +2181,7 @@ var
|
||||
WideStr: WideString;
|
||||
QtDC: TQtDeviceContext absolute DC;
|
||||
B: Boolean;
|
||||
R, R1: TRect;
|
||||
begin
|
||||
{$ifdef VerboseQtWinAPI}
|
||||
WriteLn('[WinAPI ExtTextOut]');
|
||||
@ -2188,12 +2189,20 @@ 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
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user