diff --git a/lcl/interfaces/qt/qtwinapi.inc b/lcl/interfaces/qt/qtwinapi.inc index 2abe9c881e..bbbc4c1f32 100644 --- a/lcl/interfaces/qt/qtwinapi.inc +++ b/lcl/interfaces/qt/qtwinapi.inc @@ -5133,6 +5133,8 @@ var QtPoint: TQtPoint; Matrix: QTransformH; QtDC: TQtDeviceContext; + RW, RV: TRect; + AScaleX, AScaleY: double; begin Result := False; @@ -5142,6 +5144,12 @@ begin QtDC := TQtDeviceContext(DC); Matrix := QPainter_transform(QtDC.Widget); + + QPainter_window(QtDC.Widget, @RW); + QPainter_viewport(QtDC.Widget, @RV); + AScaleX := RW.Width / RV.Width; + AScaleY := RW.Height / RV.Height; + P := @Points; while Count > 0 do begin @@ -5149,8 +5157,8 @@ begin QtPoint.X := P^.X; QtPoint.Y := P^.Y; QTransform_map(Matrix, PQtPoint(@QtPoint), PQtPoint(@QtPoint)); - P^.X := QtPoint.X; - P^.Y := QtPoint.Y; + P^.X := Trunc(QtPoint.X / AScaleX) + RV.Left; + P^.Y := Trunc(QtPoint.Y / AScaleY) + RV.Top; Inc(P); end; diff --git a/lcl/interfaces/qt5/qtwinapi.inc b/lcl/interfaces/qt5/qtwinapi.inc index cc0556a350..1e5b1b6938 100644 --- a/lcl/interfaces/qt5/qtwinapi.inc +++ b/lcl/interfaces/qt5/qtwinapi.inc @@ -5079,6 +5079,8 @@ var QtPoint: TQtPoint; Matrix: QTransformH; QtDC: TQtDeviceContext; + RW, RV: TRect; + AScaleX, AScaleY: double; begin Result := False; @@ -5088,6 +5090,12 @@ begin QtDC := TQtDeviceContext(DC); Matrix := QPainter_transform(QtDC.Widget); + + QPainter_window(QtDC.Widget, @RW); + QPainter_viewport(QtDC.Widget, @RV); + AScaleX := RW.Width / RV.Width; + AScaleY := RW.Height / RV.Height; + P := @Points; while Count > 0 do begin @@ -5095,8 +5103,8 @@ begin QtPoint.X := P^.X; QtPoint.Y := P^.Y; QTransform_map(Matrix, PQtPoint(@QtPoint), PQtPoint(@QtPoint)); - P^.X := QtPoint.X; - P^.Y := QtPoint.Y; + P^.X := Trunc(QtPoint.X / AScaleX) + RV.Left; + P^.Y := Trunc(QtPoint.Y / AScaleY) + RV.Top; Inc(P); end; diff --git a/lcl/interfaces/qt6/qtwinapi.inc b/lcl/interfaces/qt6/qtwinapi.inc index 49021909b7..9a19e3fe0a 100644 --- a/lcl/interfaces/qt6/qtwinapi.inc +++ b/lcl/interfaces/qt6/qtwinapi.inc @@ -5094,6 +5094,8 @@ var QtPoint: TQtPoint; Matrix: QTransformH; QtDC: TQtDeviceContext; + RW, RV: TRect; + AScaleX, AScaleY: double; begin Result := False; @@ -5103,6 +5105,12 @@ begin QtDC := TQtDeviceContext(DC); Matrix := QPainter_transform(QtDC.Widget); + + QPainter_window(QtDC.Widget, @RW); + QPainter_viewport(QtDC.Widget, @RV); + AScaleX := RW.Width / RV.Width; + AScaleY := RW.Height / RV.Height; + P := @Points; while Count > 0 do begin @@ -5110,8 +5118,8 @@ begin QtPoint.X := P^.X; QtPoint.Y := P^.Y; QTransform_map(Matrix, PQtPoint(@QtPoint), PQtPoint(@QtPoint)); - P^.X := QtPoint.X; - P^.Y := QtPoint.Y; + P^.X := Trunc(QtPoint.X / AScaleX) + RV.Left; + P^.Y := Trunc(QtPoint.Y / AScaleY) + RV.Top; Inc(P); end;