diff --git a/lcl/include/canvas.inc b/lcl/include/canvas.inc index 04adda5163..7497de9e74 100644 --- a/lcl/include/canvas.inc +++ b/lcl/include/canvas.inc @@ -840,19 +840,11 @@ end; procedure TCanvas.PolyBezier(const Points: array of TPoint; Filled: boolean = False; Continuous: boolean = True); -var NPoints, i: integer; - PointArray: ^TPoint; +var NPoints: integer; begin NPoints:=High(Points)-Low(Points)+1; if NPoints<4 then exit; // Curve must have at least 4 points - 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; + PolyBezier(@Points[0], NPoints, Filled, Continuous); end; procedure TCanvas.PolyBezier(Points: PPoint; NumPts: Integer; diff --git a/lcl/interfaces/win32/win32winapi.inc b/lcl/interfaces/win32/win32winapi.inc index a5d8b2305a..da900a0c9e 100644 --- a/lcl/interfaces/win32/win32winapi.inc +++ b/lcl/interfaces/win32/win32winapi.inc @@ -2852,7 +2852,12 @@ 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; {------------------------------------------------------------------------------