Qt,Qt5,Qt6: Fixed drawing line with pattern pen. issue #40165

This commit is contained in:
Željan Rikalo 2023-03-14 17:50:05 +01:00
parent 8ea105ce5d
commit 77f502b2c3
3 changed files with 16 additions and 0 deletions

View File

@ -5100,6 +5100,7 @@ end;
function TQtWidgetSet.LineTo(DC: HDC; X, Y: Integer): Boolean;
var
PenPos, LastPos: TPoint;
OldBkMode: Integer;
begin
{$ifdef VerboseQtWinAPI}
WriteLn('[WinAPI LineTo]');
@ -5111,12 +5112,16 @@ begin
TQtDeviceContext(DC).getPenPos(@PenPos);
LastPos := Point(X, Y);
if TQtDeviceContext(DC).pen.getStyle = QtCustomDashLine then
OldBkMode := SetBkMode(DC, TRANSPARENT);
if TQtDeviceContext(DC).pen.getCosmetic then
LastPos := TQtDeviceContext(DC).GetLineLastPixelPos(PenPos, LastPos);
if QPainter_testRenderHint(TQtDeviceContext(DC).Widget, QPainterAntialiasing) then
TQtDeviceContext(DC).drawLineF(PenPos.X, PenPos.Y, LastPos.X, LastPos.Y)
else
TQtDeviceContext(DC).drawLine(PenPos.X, PenPos.Y, LastPos.X, LastPos.Y);
if TQtDeviceContext(DC).pen.getStyle = QtCustomDashLine then
SetBkMode(DC, OldBkMode);
MoveToEx(DC, X, Y, nil);
Result := True;

View File

@ -5034,6 +5034,7 @@ end;
function TQtWidgetSet.LineTo(DC: HDC; X, Y: Integer): Boolean;
var
PenPos, LastPos: TPoint;
OldBkMode: Integer;
begin
{$ifdef VerboseQtWinAPI}
WriteLn('[WinAPI LineTo]');
@ -5045,12 +5046,17 @@ begin
TQtDeviceContext(DC).getPenPos(@PenPos);
LastPos := Point(X, Y);
if TQtDeviceContext(DC).pen.getStyle = QtCustomDashLine then
OldBkMode := SetBkMode(DC, TRANSPARENT);
if TQtDeviceContext(DC).pen.getCosmetic then
LastPos := TQtDeviceContext(DC).GetLineLastPixelPos(PenPos, LastPos);
if QPainter_testRenderHint(TQtDeviceContext(DC).Widget, QPainterAntialiasing) then
TQtDeviceContext(DC).drawLineF(PenPos.X, PenPos.Y, LastPos.X, LastPos.Y)
else
TQtDeviceContext(DC).drawLine(PenPos.X, PenPos.Y, LastPos.X, LastPos.Y);
if TQtDeviceContext(DC).pen.getStyle = QtCustomDashLine then
SetBkMode(DC, OldBkMode);
MoveToEx(DC, X, Y, nil);
Result := True;

View File

@ -5036,6 +5036,7 @@ end;
function TQtWidgetSet.LineTo(DC: HDC; X, Y: Integer): Boolean;
var
PenPos, LastPos: TPoint;
OldBkMode: Integer;
begin
{$ifdef VerboseQtWinAPI}
WriteLn('[WinAPI LineTo]');
@ -5047,12 +5048,16 @@ begin
TQtDeviceContext(DC).getPenPos(@PenPos);
LastPos := Point(X, Y);
if TQtDeviceContext(DC).pen.getStyle = QtCustomDashLine then
OldBkMode := SetBkMode(DC, TRANSPARENT);
if TQtDeviceContext(DC).pen.getCosmetic then
LastPos := TQtDeviceContext(DC).GetLineLastPixelPos(PenPos, LastPos);
if QPainter_testRenderHint(TQtDeviceContext(DC).Widget, QPainterAntialiasing) then
TQtDeviceContext(DC).drawLineF(PenPos.X, PenPos.Y, LastPos.X, LastPos.Y)
else
TQtDeviceContext(DC).drawLine(PenPos.X, PenPos.Y, LastPos.X, LastPos.Y);
if TQtDeviceContext(DC).pen.getStyle = QtCustomDashLine then
SetBkMode(DC, OldBkMode);
MoveToEx(DC, X, Y, nil);
Result := True;