Revert "LCL/Graphics: Fix win32 WS not drawing incomplete continuous Bezier segments in PolyBezier. Do not copy points in overloaded procedure."

This reverts commit 12799e965a.
This commit is contained in:
wp_xyz 2025-07-09 18:31:49 +02:00
parent 12799e965a
commit b21a3243d5
2 changed files with 10 additions and 7 deletions

View File

@ -840,11 +840,19 @@ end;
procedure TCanvas.PolyBezier(const Points: array of TPoint;
Filled: boolean = False;
Continuous: boolean = True);
var NPoints: integer;
var NPoints, i: integer;
PointArray: ^TPoint;
begin
NPoints:=High(Points)-Low(Points)+1;
if NPoints<4 then exit; // Curve must have at least 4 points
PolyBezier(@Points[0], NPoints, Filled, Continuous);
GetMem(PointArray,SizeOf(TPoint)*NPoints);
try
for i:=0 to NPoints-1 do
PointArray[i]:=Points[i+Low(Points)];
PolyBezier(PointArray, NPoints, Filled, Continuous);
finally
FreeMem(PointArray);
end;
end;
procedure TCanvas.PolyBezier(Points: PPoint; NumPts: Integer;

View File

@ -2852,12 +2852,7 @@ begin
If Filled or (not Continuous) then
Result := Inherited PolyBezier(DC,Points,NumPts, Filled, Continuous)
else
begin
// Make sure that only complete bezier segments are included in this mode.
// Otherwise, Windows will not draw anything at all.
NumPts := (NumPts - 1) div 3 * 3 + 1;
Result := Boolean(Windows.PolyBezier(DC, LPPOINT(Points)^, NumPts));
end;
end;
{------------------------------------------------------------------------------