Prowl.Quill exposes four public enumerations that control how paths are filled and stroked. All four —Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ProwlEngine/Prowl.Quill/llms.txt
Use this file to discover all available pages before exploring further.
BrushType, WindingMode, JointStyle, and EndCapStyle — are defined in the Prowl.Quill namespace. Understanding each value is essential for producing correct anti-aliased output from the canvas.
BrushType
BrushType selects the fill algorithm the shader uses when a DrawCall is
processed. The Brush.Type field carries this value and determines how
Point1, Point2, CornerRadii, and Feather are interpreted.
Solid vertex colour. The fragment colour comes entirely from the
interpolated vertex colour. No gradient computation is performed. This is the
fastest mode and the default when no brush is active.
Linear gradient. Colour transitions smoothly along a line from
Point1
(Color1) to Point2 (Color2). Pixels outside the gradient line are
clamped to the nearest endpoint colour.Radial gradient. Colour radiates outward from
Point1 (centre), using
Color1 at the inner radius (Point2.X) and transitioning to Color2 at
the outer radius (Point2.Y).Box gradient. Fills a rounded rectangle with
Color1 inside and Color2
outside, with soft feathered edges. Point1 is the box centre, Point2
stores the half-extents, CornerRadii rounds the corners, and Feather
controls edge softness.WindingMode
WindingMode controls which regions of a complex or self-intersecting path are
considered “inside” when filling. It is set via Canvas.SetSolidity and affects
both Canvas.Fill and Canvas.FillComplex.
OddEven
Even-odd rule (ISO/CSS default). Cast a ray from any test point. If the
ray crosses an odd number of path edges, the point is inside; an
even count means outside. This rule naturally creates “holes” in
overlapping sub-paths and is the default fill mode of the canvas.
NonZero
Non-zero winding rule. Cast a ray from any test point. Tally +1 for each
left-to-right crossing and −1 for each right-to-left crossing. If the total
is non-zero, the point is inside. Overlapping sub-paths wound in the same
direction accumulate and remain filled; sub-paths wound oppositely punch holes.
JointStyle
JointStyle (from Prowl.Quill) controls how two consecutive stroke segments
connect at a shared corner. Set via Canvas.SetStrokeJoint.
Bevel
Bevel join. The outer corner is cut off with a straight diagonal line,
creating a flat, clipped join. It is the lightest join style in terms of
triangle count and is the default when no joint style is explicitly set.
Miter
Miter join. The outer corner is extended to a sharp point where the two
stroke edges would meet. When the angle between segments is very acute, the
spike can become extremely long; the canvas enforces a
MiterLimit ratio
(default 4) and falls back to a bevel join when the limit is exceeded.Round
Round join. The outer corner is filled with a circular arc, producing a
smooth, continuous curve. Useful for organic or hand-drawn aesthetics but
costs more triangles than bevel or miter.
EndCapStyle
EndCapStyle (from Prowl.Quill) controls how the two open ends of a stroked
path are terminated. Set via Canvas.SetStrokeCap (both ends at once),
Canvas.SetStrokeStartCap, or Canvas.SetStrokeEndCap.
Butt
Butt cap. The stroke ends exactly at the endpoint coordinate with a flat,
perpendicular cut. No geometry extends beyond the endpoint. This is the
default cap style.
Round
Round cap. A semicircle is added at each open end, extending the stroke
by half the stroke width beyond the endpoint. Ideal for smooth, natural-
looking lines.
Square
Square cap. Like
Butt, but the cap extends exactly half the stroke width
beyond the endpoint. The result is a perfectly square termination.Bevel
Bevel cap. The stroke ends with a 45-degree angled cut, as if the tip
were sheared diagonally. Creates a distinctive chisel or calligraphic look
especially visible at thicker stroke widths.