Skip to content

Commit

Permalink
Applied @lamdalili fix.
Browse files Browse the repository at this point in the history
Eliminated Closed parameter from RenderPolyPolygon and EndPolygon; The final polygons are always closed.
Added debug output. Will be disabled before merge.
Refs #185
  • Loading branch information
Anders Melander committed Apr 6, 2024
1 parent a517ef0 commit 2b27cbd
Showing 1 changed file with 25 additions and 12 deletions.
37 changes: 25 additions & 12 deletions Source/GR32_Brushes.pas
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ interface

{$I GR32.inc}

{$define GR32_DEBUG_BRUSH}

uses
Classes, GR32, GR32_Polygons, GR32_Transforms;

Expand Down Expand Up @@ -90,11 +92,11 @@ TCustomBrush = class(TNotifiablePersistent)
const ClipRect: TFloatRect; Transformation: TTransformation; Closed: Boolean): TArrayOfArrayOfFloatPoint; virtual;

procedure RenderPolyPolygon(Renderer: TCustomPolygonRenderer; const Points: TArrayOfArrayOfFloatPoint;
const ClipRect: TFloatRect; Transformation: TTransformation; Closed: Boolean); virtual;
const ClipRect: TFloatRect; Transformation: TTransformation); virtual;

procedure BeginPolygon; virtual;
procedure EndPolygon(Renderer: TCustomPolygonRenderer; const Points: TArrayOfArrayOfFloatPoint;
const ClipRect: TFloatRect; Transformation: TTransformation; Closed: Boolean); virtual;
const ClipRect: TFloatRect; Transformation: TTransformation); virtual;
public
constructor Create(ABrushCollection: TBrushCollection); virtual;
destructor Destroy; override;
Expand Down Expand Up @@ -346,11 +348,11 @@ procedure TCustomBrush.BeginPolygon;
end;

procedure TCustomBrush.EndPolygon(Renderer: TCustomPolygonRenderer; const Points: TArrayOfArrayOfFloatPoint;
const ClipRect: TFloatRect; Transformation: TTransformation; Closed: Boolean);
const ClipRect: TFloatRect; Transformation: TTransformation);
begin
Assert(FBatchCount = 1);
Dec(FBatchCount);
RenderPolyPolygon(Renderer, Points, ClipRect, Transformation, Closed);
RenderPolyPolygon(Renderer, Points, ClipRect, Transformation);
end;

procedure TCustomBrush.Changed;
Expand All @@ -376,10 +378,13 @@ function TCustomBrush.ProcessPolyPolygon(Renderer: TCustomPolygonRenderer; const
end;

procedure TCustomBrush.RenderPolyPolygon(Renderer: TCustomPolygonRenderer; const Points: TArrayOfArrayOfFloatPoint;
const ClipRect: TFloatRect; Transformation: TTransformation; Closed: Boolean);
const ClipRect: TFloatRect; Transformation: TTransformation);
begin
UpdateRenderer(Renderer);
Renderer.PolyPolygonFS(Points, ClipRect, Transformation);
{$ifdef GR32_DEBUG_BRUSH}
PolyPolylineFS(TPolygonRenderer32(Renderer).Bitmap, Points, clBlue32, True);
{$endif GR32_DEBUG_BRUSH}
end;

procedure TCustomBrush.PolygonFS(Renderer: TCustomPolygonRenderer; const Points: TArrayOfFloatPoint; const ClipRect: TFloatRect;
Expand All @@ -395,7 +400,7 @@ procedure TCustomBrush.PolyPolygonFS(Renderer: TCustomPolygonRenderer; const Poi
begin
BeginPolygon;
Buffer := ProcessPolyPolygon(Renderer, Points, ClipRect, Transformation, Closed);
EndPolygon(Renderer, Buffer, ClipRect, Transformation, Closed);
EndPolygon(Renderer, Buffer, ClipRect, Transformation);
end;

procedure TCustomBrush.PolyPolygonMixedFS(Renderer: TCustomPolygonRenderer; const Points: TArrayOfArrayOfFloatPoint;
Expand Down Expand Up @@ -438,7 +443,7 @@ procedure TCustomBrush.PolyPolygonMixedFS(Renderer: TCustomPolygonRenderer; cons
Buffer := Buffer + ProcessPolyPolygon(Renderer, RunBuffer, ClipRect, Transformation, RunClosed);
end;
end;
EndPolygon(Renderer, Buffer, ClipRect, Transformation, True);
EndPolygon(Renderer, Buffer, ClipRect, Transformation);
end;

procedure TCustomBrush.SetBrushCollection(const Value: TBrushCollection);
Expand Down Expand Up @@ -611,7 +616,11 @@ function TStrokeBrush.ProcessPolyPolygon(Renderer: TCustomPolygonRenderer; const
const ClipRect: TFloatRect; Transformation: TTransformation; Closed: Boolean): TArrayOfArrayOfFloatPoint;
begin
Result := BuildPolyPolyLine(Points, Closed, StrokeWidth, JoinStyle, EndStyle, MiterLimit);
Result := inherited ProcessPolyPolygon(Renderer, Result, ClipRect, Transformation, Closed);
Result := inherited ProcessPolyPolygon(Renderer, Result, ClipRect, Transformation, True);

{$ifdef GR32_DEBUG_BRUSH}
PolyPolylineFS(TPolygonRenderer32(Renderer).Bitmap, Points, clRed32, True);
{$endif GR32_DEBUG_BRUSH}
end;

procedure TStrokeBrush.SetEndStyle(const Value: TEndStyle);
Expand Down Expand Up @@ -664,11 +673,15 @@ function TDashedBrush.ProcessPolyPolygon(Renderer: TCustomPolygonRenderer; const
var
I: Integer;
begin
Result := nil;
for I := 0 to High(Points) do
Result := Result + BuildDashedLine(Points[I], FDashArray, FDashOffset, Closed);
if (Length(FDashArray) > 0) then
begin
Result := nil;
for I := 0 to High(Points) do
Result := Result + BuildDashedLine(Points[I], FDashArray, FDashOffset, Closed);

Result := inherited ProcessPolyPolygon(Renderer, Result, ClipRect, Transformation, Closed);
Result := inherited ProcessPolyPolygon(Renderer, Result, ClipRect, Transformation, False);
end else
Result := inherited ProcessPolyPolygon(Renderer, Points, ClipRect, Transformation, Closed);
end;

procedure TDashedBrush.SetDashArray(const ADashArray: TArrayOfFloat);
Expand Down

0 comments on commit 2b27cbd

Please sign in to comment.