úÎ!Q,/äÿŽ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ        ! " # $ % &'( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ SafeQVHŽ Rasterific8Traversal type, matched to the one of the lens package. Rasterific"Try to match the Lens' type alias. Rasterific8Does it look familiar? yes it's the official Lens type.‘ Rasterific+Create a full lens out of setter and getter’“Ž‘”•–—˜™š›•8—4˜4™4š4NoneK2/ Rasterific,Free and sparse inner product/metric spaces. RasterificMCompute the inner product of two vectors or (equivalently) convert a vector f a into a covector f a -> a.V2 1 2 `dot` V2 3 411 RasterificgCompute the squared norm. The name quadrance arises from Norman J. Wildberger's rational trigonometry. Rasterific'Compute the quadrance of the difference Rasterific:Compute the distance between two vectors in a metric space Rasterific.Compute the norm of a vector in a metric space  Rasterific)Convert a non-zero vector to unit vector.  RasterificDProvides a fairly subjective test to see if a quantity is near zero.nearZero (1e-11 :: Double)FalsenearZero (1e-17 :: Double)TruenearZero (1e-5 :: Float)FalsenearZero (1e-7 :: Float)True  Rasterific%Determine if a quantity is near zero.  Rasterific8A vector is an additive group with additional structure.  RasterificThe zero vector RasterificCompute the sum of two vectorsV2 1 2 ^+^ V2 3 4V2 4 6 Rasterific*Compute the difference between two vectorsV2 4 5 - V2 3 1V2 1 4 Rasterific)Linearly interpolate between two vectors. RasterificA 1-dimensional vector RasterificA 4-dimensional vector RasterificA 3-dimensional vector RasterificA 2-dimensional vectorpure 1 :: V2 IntV2 1 1V2 1 2 + V2 3 4V2 4 6V2 1 2 * V2 3 4V2 3 8 sum (V2 1 2)3 Rasterific Compute the right scalar product V2 3 4 ^* 2V2 6 8 Rasterific*Compute division by a scalar on the right. Rasterific Normalize a  functor to have unit 4. This function does not change the functor if its  is 0 or 1.? Rasterific œ a  1e-12@ Rasterific œ a  1e-6    6677 NoneG®P RasterificRepresent a pointž RasterificPairwise boolean and operatorŸ RasterificPairwise boolean or operator  Rasterific$Pairwise vector/point equal operator¡ Rasterific2Pairwise vector/point lower than or equal operator¢ Rasterific)Pairwise vector/point lower than operator£ Rasterific%Component/scalar lower than operator.¤ Rasterific*Pairwise vector/point difference operator.¥ RasterificLMin function between two vector/points. Work on every component separately.¦ RasterificIMax function between to vector/point. Work on every component separatly.§ Rasterific5Abs function for every component of the vector/point.¨ Rasterific7Floor function for every component of the vector/point.© Rasterific6ceil function for every component of the vector/point.ª RasterificLGiven a point, clamp every coordinates between a given minimum and maximum.« Rasterific8Given two points, return a point in the middle of them.¬ RasterificfGiven a boolean choice vector, return elements of the first one if true, of the second one otherwise.­ RasterificCalculate a normal vector® Rasterific7Return the second operand if the vector is nearly null¯ RasterificmTell if two points are nearly indistinguishable. If indistinguishable, we can treat them as the same point.° Rasterificsimply `not (a ¯ b)`PžŸ ¡¢£¤¥¦§¨©ª«±¬­®¯°ž3Ÿ2 4¡4¢4£4¤4SafeOâ² Rasterific/Represent an equation `a * x^2 + b * x + c = 0`³ Rasterific%Coefficient for the square part (x^2)´ RasterificCoefficient the linear part (x)µ RasterificConstant¶ Rasterific(Discriminant equation, if the result is:3Below 0, then the formula doesn't have any solution0Equal to 0, then the formula has an unique root.&Above 0, the formula has two solutions· RasterificOExtract all the roots of the formula ie. where the unknown gives a result of 0²¸³´µ¶·None &';<=FTÁXCQ RasterificActions to create a pathR Rasterific3Draw a line from the current point to another pointS RasterificaDraw a quadratic bezier curve from the current point through the control point to the end point.T Rasterific1Draw a cubic bezier curve using 2 control points.U Rasterific¾Describe a path in a way similar to many graphical packages, using a "pen" position in memory and reusing it for the next "move" For example the example from Primitive could be rewritten: xfill $ Path (V2 50 20) True [ PathCubicBezierCurveTo (V2 90 60) (V2 5 100) (V2 50 140) , PathLineTo (V2 120 80) ] docimages/path_example.pngW Rasterific=Origin of the point, equivalent to the first "move" command.X RasterificTell if we must close the path.Y RasterificList of commands in the pathZ RasterificðAll the rasterization works on lists of primitives, in order to ease the use of the library, the Geometry type class provides conversion facility, which help generalising the geometry definition and avoid applying Primitive constructor.$Also streamline the Path conversion.[ Rasterific;Convert an element to a list of primitives to be rendered.\ RasterificLHelper method to avoid overlaping instances. You shouldn't use it directly.] Rasterific!Generalizing constructors of the _ type to work generically._ RasterificÅThis datatype gather all the renderable primitives, they are kept separated otherwise to allow specialization on some specific algorithms. You can mix the different primitives in a single call : Àfill [ toPrim $ CubicBezier (V2 50 20) (V2 90 60) (V2 5 100) (V2 50 140) , toPrim $ Line (V2 50 140) (V2 120 80) , toPrim $ Line (V2 120 80) (V2 50 20) ] docimages/primitive_mixed.png` RasterificPrimitive used for linesa Rasterific+Primitive used for quadratic beziers curvesb Rasterific%Primitive used for cubic bezier curvec Rasterific:Describe a cubic bezier spline, described using 4 points. jstroke 4 JoinRound (CapRound, CapRound) $ CubicBezier (V2 0 10) (V2 205 250) (V2 (-10) 250) (V2 160 35) docimages/cubic_bezier.pnge Rasterific.Origin point, the spline will pass through it.f Rasterific.First control point of the cubic bezier curve.g Rasterific/Second control point of the cubic bezier curve.h Rasterific#End point of the cubic bezier curvei Rasterific>Describe a quadratic bezier spline, described using 3 points. –fill [Bezier (V2 10 10) (V2 200 50) (V2 200 100) ,Bezier (V2 200 100) (V2 150 200) (V2 120 175) ,Bezier (V2 120 175) (V2 30 100) (V2 10 10)] docimages/quadratic_bezier.pngk Rasterific/Origin points, the spline will pass through it.l Rasterific+Control point, the spline won't pass on it.m Rasterific+End point, the spline will pass through it.n Rasterific-Describe a simple 2D line between two points. jfill [ Line (V2 10 10) (V2 190 10) , Line (V2 190 10) (V2 95 170) , Line (V2 95 170) (V2 10 10)] docimages/simple_line.pngp Rasterific Origin pointq Rasterific End pointr Rasterific?Typeclass helper gathering all the points of a given geometry.s Rasterific8Fold an accumulator on all the points of the primitive.t Rasterific}This typeclass is there to help transform the geometry, by applying a transformation on every point of a geometric element.u RasterificAApply a transformation function for every point in the element.v RasterificTransform but monadic¹ RasterificRepresent a raster lineº RasterificHorizontal position» RasterificVertical position¼ RasterificAlpha½ RasterificHeightw RasterifickDescribe the behaviour of samplers and texturers when they are out of the bounds of image and/or gradient.x Rasterific;Will clamp (ie. repeat the last pixel) when out of bound docimages/sampler_pad.pngy Rasterific%Will loop on it's definition domain docimages/sampler_repeat.pngz RasterificWill loop inverting axises docimages/sampler_reflect.png{ RasterificyTell how to fill complex shapes when there is self intersections. If the filling mode is not specified, then it's the | method which is used.<The examples used are produced with the following function: ÿvfillingSample :: FillMethod -> Drawing px () fillingSample fillMethod = fillWithMethod fillMethod geometry where geometry = transform (applyTransformation $ scale 0.35 0.4 <> translate (V2 (-80) (-180))) [ Path (V2 484 499) True [ PathCubicBezierCurveTo (V2 681 452) (V2 639 312) (V2 541 314) , PathCubicBezierCurveTo (V2 327 337) (V2 224 562) (V2 484 499) ] , Path (V2 136 377) True [ PathCubicBezierCurveTo (V2 244 253) (V2 424 420) (V2 357 489) , PathCubicBezierCurveTo (V2 302 582) (V2 47 481) (V2 136 377) ] , Path (V2 340 265) True [ PathCubicBezierCurveTo (V2 64 371) (V2 128 748) (V2 343 536) , PathCubicBezierCurveTo (V2 668 216) (V2 17 273) (V2 367 575) , PathCubicBezierCurveTo (V2 589 727) (V2 615 159) (V2 340 265) ] ]| Rasterificÿ>Also known as nonzero rule. To determine if a point falls inside the curve, you draw an imaginary line through that point. Next you will count how many times that line crosses the curve before it reaches that point. For every clockwise rotation, you subtract 1 and for every counter-clockwise rotation you add 1. docimages/fill_winding.png} RasterificÿThis rule determines the insideness of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses. If this number is odd, the point is inside; if even, the point is outside. docimages/fill_evenodd.png~ RasterificADescribe how to display the join of broken lines while stroking. RasterificMake a curved join. docimages/join_round.png€ RasterificVMake a mitter join. Value must be positive or null. Seems to make sense in [0;1] onlyMiter join with 0 : docimages/join_miter.pngMiter join with 5 : docimages/join_miter_5.png Rasterific<Describe how we will "finish" the stroking that don't loop.‚ Rasterific‰Create a straight caping on the stroke. Cap value should be positive and represent the distance from the end of curve to the actual capcap straight with param 0 : docimages/cap_straight.pngcap straight with param 1 : docimages/cap_straight_1.pngƒ Rasterific(Create a rounded caping on the stroke. docimages/cap_round.png„ RasterificDash pattern to use… Rasterific7Type alias just to get more meaningful type signatures† RasterificRepresent a vector‡ RasterificCTransform a path description into a list of renderable primitives.ˆ Rasterific=Gives the orientation vector for the start of the primitive.‰ Rasterific:Gives the orientation vector at the end of the primitive.Š Rasterific)Extract the first point of the primitive.‹ Rasterific+Return the last point of a given primitive.¾ RasterificJust to get faster sorting¿ RasterificJust apply the functionÀ RasterificJust apply the functionÁ Rasterific toPrim = CubicBezierPrim Rasterific toPrim = BezierPrimà Rasterific toPrim = LinePrimÄ Rasterific  toPrim = idÅ Rasterific^Generalize the geometry to any foldable container, so you can throw any container to the the fill or stroke function.JPQRSTUVWXYÆÇZ[\]^_`abcdefghijklmnopqrstuv¹Èº»¼½wyxz{|}~€‚ƒÉÊ„…†ËÌ͇ˆ‰Š‹ÎNoneÞ/ Œ Rasterific2Represent a 3*3 matrix for homogenous coordinates. | A C E | | B D F | | 0 0 1 | Rasterific X translation“ Rasterific Y translation” Rasterific5Effectively transform a point given a transformation.• Rasterific^Effectively transform a vector given a transformation. The translation part won't be applied.– Rasterific>Create a transformation representing a rotation on the plane. Wfill . transform (applyTransformation $ rotate 0.2) $ rectangle (V2 40 40) 120 120 docimages/transform_rotate.png— RasterifichCreate a transformation representing a rotation on the plane. The rotation center is given in parameter jfill . transform (applyTransformation $ rotateCenter 0.2 (V2 200 200)) $ rectangle (V2 40 40) 120 120 %docimages/transform_rotate_center.png˜ Rasterific*Perform a scaling of the given primitives. Tfill . transform (applyTransformation $ scale 2 2) $ rectangle (V2 40 40) 40 40 docimages/transform_scale.png™ Rasterific.Perform a translation of the given primitives. afill . transform (applyTransformation $ translate (V2 100 100)) $ rectangle (V2 40 40) 40 40 !docimages/transform_translate.pngš Rasterific&Skew transformation along the X axis. Tfill . transform (applyTransformation $ skewX 0.3) $ rectangle (V2 50 50) 80 80 docimages/transform_skewx.png› Rasterific%Skew transformation along the Y axis. Tfill . transform (applyTransformation $ skewY 0.3) $ rectangle (V2 50 50) 80 80 docimages/transform_skewy.pngœ Rasterific~Given a new X-acis vector, create a rotation matrix to get into this new base, assuming an Y basis orthonormal to the X one. Rasterific&Inverse a transformation (if possible)– RasterificRotation angle in radian.— RasterificRotation angle in radian RasterificRotation centerŒŽ‘’“”•–—˜™š›œŒŽ‘’“”•™˜–—š›œNone;=V묢 Rasterific4Create a list of bezier patch from a list of points, ×bezierFromPath [a, b, c, d, e] == [Bezier a b c, Bezier c d e] bezierFromPath [a, b, c, d, e, f] == [Bezier a b c, Bezier c d e] bezierFromPath [a, b, c, d, e, f, g] == [Bezier a b c, Bezier c d e, Bezier e f g]Ï Rasterific7Only work if the quadratic bezier curve is nearly flatÐ Rasterific>Create a quadratic bezier curve representing a straight line.Ñ Rasterific>Clamp the bezier curve inside a rectangle given in parameter.Ò Rasterific3Rewrite the bezier curve to avoid degenerate cases.Ó Rasterific1Move the bezier to a new position with an offset.Ñ Rasterific2Point representing the "minimal" point for cliping Rasterific2Point representing the "maximal" point for cliping Rasterific(The quadratic bezier curve to be clamped ¢ÔÏÕÐÑÒÖ×ÓNoneõ/£ Rasterific+Transform a list a point to a list of lines :lineFromPath [a, b, c, d] = [Line a b, Line b c, Line c d]Ø Rasterific>Clamp the bezier curve inside a rectangle given in parameter.Ù Rasterific`Extend a line by two coefficient, giving a line that's a linear extension of the original line.law: extendLine 0 1 = idØ Rasterific2Point representing the "minimal" point for cliping Rasterific2Point representing the "maximal" point for cliping RasterificThe lineÙ RasterificBegin extension coefficient RasterificEnd extension coefficient RasterificLine to transform £ÚÛÜÝÞߨàÙNoneQV|¥ Rasterific8Traversal type, matched to the one of the lens package.¦ Rasterific"Try to match the Lens' type alias.§ Rasterific8Does it look familiar? yes it's the official Lens type.á Rasterific+Create a full lens out of setter and getter¨ Rasterific"Traverse all the points of a line.© RasterificLine origin point.ª RasterificLine end point.« Rasterific Quadratic bezier starting point.¬ Rasterificbezier control point.­ Rasterificbezier end point.® Rasterific%Traversal of all the bezier's points.¯ RasterificCubic bezier first point° Rasterific!Cubic bezier first control point.± Rasterific"Cubic bezier second control point.² RasterificCubic bezier last point.³ Rasterific0Traversal of all the points of the cubic bezier.´ Rasterific1Traverse all the points defined in the primitive.µ Rasterific%Traversal of all the points of a path¶ Rasterific&Traversal of all the points in a path.¤¥¦§¨©ª«¬­®¯°±²³´µ¶©ª¨«¬­®¯°±²³´µ¶§¦¥¤None&';=ôâ RasterificMRepresent the cubic bezier curve as a vector ready for matrix multiplication· Rasterific:Create a list of cubic bezier patch from a list of points. •cubicBezierFromPath [a, b, c, d, e] = [CubicBezier a b c d] cubicBezierFromPath [a, b, c, d, e, f, g] = [CubicBezier a b c d, CubicBezier d e f g]ã RasterificFRepresent a circle of radius 1 centered on 0 of a cubic bezier curve.ä Rasterific+Find the coefficient of the extremum pointså RasterificDClamp the cubic bezier curve inside a rectangle given in parameter.æ Rasterific8Will subdivide the bezier from 0 to coeff and coeff to 1ç Rasterific Toleranceå Rasterific2Point representing the "minimal" point for cliping Rasterific2Point representing the "maximal" point for cliping Rasterific$The cubic bezier curve to be clamped ·èãéêëåìæíîïðNone ñ RasterificCreate a "rounded" join or capò RasterificMPut a cap at the end of a bezier curve, depending on the kind of cap wanted.ó RasterificDDon't make them completly flat, but suficiently to assume they are.¸ Rasterific€Return an approximation of the length of a given path. It's results is not precise but should be enough for rough calculations¹ Rasterific]Create a list of outlines corresponding to all the dashed elements. They can be then stroked åmapM_ (stroke 3 (JoinMiter 0) (CapStraight 0, CapStraight 0)) $ dashedStrokize 0 [10, 5] 40 JoinRound (CapStraight 0, CapStraight 0) $ CubicBezier (V2 40 160) (V2 40 40) (V2 160 40) (V2 160 160) "docimages/strokize_dashed_path.png¹ RasterificStarting offset Rasterific#Dashing pattern to use for stroking Rasterific Stroke width RasterificWhich kind of join will be used RasterificStart and end capping. RasterificElements to transformôõö÷¸ø¹None'òº Rasterific`This function will create the outline of a given geometry given a path. You can then stroke it. Ästroke 3 (JoinMiter 0) (CapStraight 0, CapStraight 0) $ strokize 40 JoinRound (CapRound, CapRound) $ CubicBezier (V2 40 160) (V2 40 40) (V2 160 40) (V2 160 160) docimages/strokize_path.pngº Rasterific Stroke width RasterificWhich kind of join will be used RasterificStart and end capping. RasterificList of elements to strokize…¸¹º…º¹¸None+» Rasterific!Clip the geometry to a rectangle.» Rasterific!Minimum point (corner upper left) Rasterific#Maximum point (corner bottom right) RasterificPrimitive to be clipped ùúûüýþÿ»None;=6̼ RasterificœClass used to calculate bounds of various geometrical primitives. The calculated is precise, the bounding should be minimal with respect with drawn curve.½ Rasterific2Given a graphical elements, calculate it's bounds.¾ RasterificœRepresent the minimal axis aligned rectangle in which some primitives can be drawn. Should fit to bezier curve and not use directly their control points.À RasterificDCorner upper left of the bounding box of the considered primitives.Á RasterificECorner lower right of the bounding box of the considered primitives. RasterificExtract the width of the boundsà RasterificExtract the height of the boundÄ Rasterific=Extract the position of the lower left corner of the bounds. ¼½¾¿ÀÁÂÃÄNone+<FTH6 Å RasterificGTypeclass intented at pixel value modulation. May be throwed out soon. Rasterific?Empty value representing total transparency for the given type. Rasterific7Full value representing total opacity for a given type. RasterificqGiven a Float in [0; 1], return the coverage in [emptyValue; fullValue] The second value is the inverse coverage RasterificDModulate two elements, staying in the [emptyValue; fullValue] range. Rasterific*Implement a division between two elements. Rasterific3Like modulate but also return the inverse coverage.Æ RasterificšThis constraint tells us that pixel component must also be pixel and be the "bottom" of component, we cannot go further than a PixelBaseComponent level.*Tested pixel types are PixelRGBA8 & Pixel8Ç RasterificpThis constraint ensure that a type is a pixel and we're allowed to modulate it's color components generically.È RasterificUsed for Coon patch rendering Rasterific*Really need a "builder" function for pixel Rasterificcoverage Rasterificinverse coverage Rasterific background Rasterific foregroundÅ ÆÇÈ    None"#03;<=>?FQTV„F  RasterificTType storing the information to be able to interpolate part of an image in a patch.É Rasterific5Store information for cubic interpolation in a patch. Rasterific/Define a rectangle in the U,V parametric space. Rasterific=Represent a point in the paramaetric U,V space from [0, 1]^2Ì Rasterific)Store the inner points of a tensor patch.Ò Rasterific0Store the two bezier control points of a bezier.Ö Rasterific‡Define a mesh patch grid, the grid is conceptually a regular grid of _meshPatchWidth * _meshPatchHeight patches but with shared edgesØ RasterificCount of horizontal of *patch*Ù RasterificCount of vertical of *patch*Ú RasterificWMain points defining the patch, of size (_meshPatchWidth + 1) * (_meshPatchHeight + 1)Û Rasterific•For each line, store the points in between each vertex. There is two points between each vertex, so _meshPatchWidth * (_meshPatchHeight + 1) pointsÜ Rasterific†For each colun, store the points in between each vertex. Two points between each vertex, so _meshPatchHeight * (_meshPatchWidth + 1)Ý RasterificColors for each vertex pointsÞ RasterificƒPoints used to define tensor patch, if not define, the rest of the data structure describes a Coon patch. size must be equal to "`_meshPatchWidth*_meshPatchHeight`ß Rasterific<Define the boundary and interpolated values of a coon patch. k -----> North _____----------------+ ^ +------------/ / . | /" / | | /" / | | /" ÿ4/ east | | west | / | | | v \ \ . \ __-------------+ +----------------/ South <----- á Rasterific'North border, from left to right at topâ RasterificEast obrder, from top to bottomã RasterificSouth border from right to leftä RasterificWest border from bottom to topå RasterificThe patch valuesæ RasterificDescribe a tensor patch RasterificMStore the derivative necessary for cubic interpolation in the gradient mesh.í Rasterific*Values associated to the corner of a patch Ï North East +--------------+ |0 1| | | | | | | |3 2| +--------------+ West South ó RasterificFHow do we want to perform color/image interpolation within the patch.ô RasterificBilinear interpolation ÿrimport qualified Data.Vector as V let colorCycle = cycle [ PixelRGBA8 0 0x86 0xc1 255 , PixelRGBA8 0xff 0xf4 0xc1 255 , PixelRGBA8 0xFF 0x53 0x73 255 , PixelRGBA8 0xff 0xf4 0xc1 255 , PixelRGBA8 0 0x86 0xc1 255] colors = V.fromListN (4 * 4) colorCycle renderMeshPatch PatchBilinear $ generateLinearGrid 3 3 (V2 10 10) (V2 60 60) colors  (docimages/mesh_patch_interp_bilinear.pngõ RasterificBicubic interpolation ÿqimport qualified Data.Vector as V let colorCycle = cycle [ PixelRGBA8 0 0x86 0xc1 255 , PixelRGBA8 0xff 0xf4 0xc1 255 , PixelRGBA8 0xFF 0x53 0x73 255 , PixelRGBA8 0xff 0xf4 0xc1 255 , PixelRGBA8 0 0x86 0xc1 255] colors = V.fromListN (4 * 4) colorCycle renderMeshPatch PatchBicubic $ generateLinearGrid 3 3 (V2 10 10) (V2 60 60) colors  'docimages/mesh_patch_interp_bicubic.pngö Rasterific Type of coordinate interpolation Rasterific Helping lens Rasterific Help lens Rasterific=Transpose (switch vertical/horizontal orientation) of values. Rasterific.Return a postion of a point in the coon patch. RasterificConvert a coon patch inAÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëì !"íîïðñòóôõö#$None "#3<FQTV­ã÷ RasterificMutable version of a MeshPatchø Rasterific„Prepare a gradient mesh to use cubic color interpolation, see renderCubicMesh documentation to see the global use of this function.ù RasterificNormal mesh to mutable meshú RasterificMutable mesh to freezed mesh.û Rasterific&Retrieve a mesh primary vertice purelyü RasterificZGiven an original MeshPatch, provide context to mutate it through modification functions.ý Rasterific/Set the vertice of a mesh at a given coordinateþ RasterificGet the position of verticeÿ Rasterific.Set the two control bezier points horizontally Rasterific,Set the two control bezier points vertically Rasterific$Set the value associated to a vertex RasterificSGenerate a meshpatch at the size given by the image and a number of cell in a mesh RasterificfGenerate a valid gradient with the shape of a simple grid using some simple information. You can use ù and ú to mutate it. Rasterific)Extract a coon patch at a given position. Rasterific*Extract a tensor patch at a given position Rasterific9Extract an image patch out of a mesh at a given position. Rasterific@Extract a tensor image patch out of a mesh at a given position. RasterificFExtract a coon patch for cubic interpolation at a given position see ø  RasterificHExtract a tensor patch for cubic interpolation at a given position see ø  Rasterific3Extract a list of all the coon patches of the mesh.  Rasterific5Extract a list of all the tensor patches of the mesh.  RasterificBExtract all the coon patch of a mesh using an image interpolation.  RasterificDExtract all the tensor patch of a mesh using an image interpolation. Rasterific?Extract all the coon patch of a mesh using cubic interpolation. RasterificAExtract all the tensor patch of a mesh using cubic interpolation. û Rasterific,Between 0 and _meshPatchWidth + 1 (excluded) Rasterific-Between 0 and _meshPatchHeight + 1 (excluded)ý Rasterificx coordinate in [0, w] Rasterificy coordinate in [0, h] Rasterificnew point value RasterificHorizontal cell count RasterificVertical cell count Rasterific!Position of the corner upper left Rasterific!Image to transform through a mesh RasterificWidth in patch RasterificHeight in patch Rasterific!Position of the upper left corner RasterificSize of each patch in x adn y Rasterific9Vector of values, size must be (width + 1) * (height + 1) Rasterificx Rasterificy Rasterificx Rasterificy Rasterificx Rasterificy Rasterificx Rasterificy Rasterificx Rasterificy  Rasterificx Rasterificy/ÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞ÷øùúûüýþÿ     /ÒÓÔÕÌÍÎÏÐÑÖרÙÚÛÜÝÞÉÊËøû     ÷ùúüýþÿNone¾0 Rasterific3Generate a list of primitive representing a circle. fill $ circle (V2 100 100) 75 docimages/fill_circle.png Rasterific5Generate a list of primitive representing an ellipse. !fill $ ellipse (V2 100 100) 75 30 docimages/fill_ellipse.png Rasterific6Generate a list of primitive representing a rectangle #fill $ rectangle (V2 30 30) 150 100 docimages/fill_rect.png RasterificKGenerate a list of primitive representing a rectangle with rounded corner. 0fill $ roundedRectangle (V2 10 10) 150 150 20 10 #docimages/fill_roundedRectangle.png RasterificCircle center in pixels RasterificCircle radius in pixels RasterificCorner upper left RasterificWidth in pixel RasterificHeight in pixel RasterificCorner upper left RasterificWidth in pixel RasterificHeight in pixel. Rasterific8Radius along the x axis of the rounded corner. In pixel. Rasterific8Radius along the y axis of the rounded corner. In pixel.None ;<=FQTVËÅ  RasterificReification of texture type RasterificŽA gradient definition is just a list of stop and pixel values. For instance for a simple gradient of black to white, the finition would be : <[(0, PixelRGBA8 0 0 0 255), (1, PixelRGBA8 255 255 255 255)]4the first stop value must be zero and the last, one. Rasterific-Structure defining how to render a text range RasterificFont used during the rendering RasterificSize of the text (in pixels) Rasterific^Text to draw | Texture to use for drawing, if Nothing, the currently active texture is used. Rasterific+Monad used to describe the drawing context. Rasterific)Monad used to record the drawing actions. RasterificDThis function will spit out drawing instructions to help debugging.XThe outputted code looks like Haskell, but there is no guarantee that it is compilable.(%&'()*+,-./0123456789:;<=>?@A None"#;<=>?AFTVÒ« Rasterific&Interpolate a 2D point in a given type  RasterificThe interpolation function! Rasterific=Use another image as a texture for the filling. Contrary to  imageTexture=, this function perform a bilinear filtering on the texture.# Rasterific"Bilinear interpolation of an image$ RasterificBicubic interpolator% RasterificBasic bilinear interpolator !" "!None +<FTVè@B RasterificeRight now, we must stick to ST, due to the fact that we can't specialize with parameterized monad :(C Rasterific+Plot a single pixel on the resulting image.D RasterificdPlot a single pixel on the resulting image, no bounds check are performed, ensure index is correct!E Rasterific©The intent of shader texture is to provide ease of implementation If possible providing a custom filler will be more efficient, like already done for the solid colors.F RasterifichThis function will interpret the texture description, helping prepare and optimize the real calculationG RasterifictUse another image as a texture for the filling. This texture use the "nearest" filtering, AKA no filtering at all.H RasterificxPerform a multiplication operation between a full color texture and a greyscale one, used for clip-path implementation.I RasterificxPerform a multiplication operation between a full color texture and a greyscale one, used for clip-path implementation.J RasterificGradient description. RasterificLinear gradient start point. RasterificLinear gradient end point.K RasterificGradient description RasterificRadial gradient center RasterificRadial gradient radiusL RasterificGradient description RasterificRadial gradient center RasterificRadial gradient radius RasterificRadial gradient focus point!CDFNone"#<ð?M Rasterific…Given a cubic curve, return the initial step size and the coefficient for the forward difference. Initial step is assumed to be "1"N RasterificKRasterize a cubic bezier curve using the Fast Forward Diffrence algorithm.& RasterificqRasterize a coon patch using the Fast Forward Diffrence algorithm, likely to be faster than the subdivision one.' RasterificsRasterize a tensor patch using the Fast Forward Diffrence algorithm, likely to be faster than the subdivision one. OPQRSMTN&' None +<FQTVÑ ( RasterificSReify a filling function call, to be able to manipulate them in a simpler fashion.* RasterificPrimitives to be filled.+ Rasterific"Texture for the filled primitives., RasterificHow to fill the primitives.- Rasterific Optional mask used for clipping.. Rasterific"Function to perform direct drawing0 RasterificFTransform back a low level drawing order to a more high level Drawing1 Rasterific(Render the drawing orders on the canvas.2 RasterificStart an image rendering. See 3< for an usage example. This function can work with either U or V.3 RasterificFill some geometry. ÿbimmediateDrawExample :: Image PixelRGBA8 immediateDrawExample = runST $ runDrawContext 200 200 (PixelRGBA8 0 0 0 0) $ fillWithTexture FillWinding texture geometry where circlePrimitives = circle (V2 100 100) 50 geometry = strokize 4 JoinRound (CapRound, CapRound) circlePrimitives texture = uniformTexture (PixelRGBA8 255 255 255 255) docimages/immediate_fill.png4 RasterificFunction identical to 35 but with anti-aliasing (and transparency) disabled.5 Rasterific;Fill some geometry using a composition mask for visibility. ÿQimmediateDrawMaskExample :: Image PixelRGBA8 immediateDrawMaskExample = runST $ runDrawContext 200 200 (PixelRGBA8 0 0 0 255) $ forM_ [1 .. 10] $ \ix -> fillWithTextureAndMask FillWinding texture mask $ rectangle (V2 10 (ix * 18 - 5)) 180 13 where texture = uniformTexture $ PixelRGBA8 0 0x86 0xc1 255 mask = sampledImageTexture $ runST $ runDrawContext 200 200 0 $ fillWithTexture FillWinding (uniformTexture 255) maskGeometry maskGeometry = strokize 15 JoinRound (CapRound, CapRound) $ circle (V2 100 100) 80 docimages/immediate_mask.png6 Rasterific6Helper function transforming text range to draw order.2 RasterificRendering width RasterificRendering height RasterificBackground color RasterificActual drawing computation3 Rasterific"Color/Texture used for the filling RasterificPrimitives to fill4 Rasterific"Color/Texture used for the filling RasterificPrimitives to fill5 Rasterific2Color/Texture used for the filling of the geometry RasterificTexture used for the mask. RasterificPrimitives to fill6 Rasterific Current output device resolution Rasterific4Texture to use if no texture is defined in the range RasterificBaseline position RasterificText description.()*+,-./01234567()*+,-.0253416/7 NoneK(` : RasterificiCallback function in charge to transform the DrawOrder given the transformation to place it on the path.W RasterificšState of the path walker, just a bunch of primitives with continuity guarantee. The continuity is guaranteed by the Path used to derive this primitives.; Rasterific4Simpler alias if monad transformers are not needed.< RasterificThe walking transformer monad.= Rasterific&Create a path walker from a given path> Rasterific2Advance by the given amount of pixels on the path.? RasterificQObtain the current position if we are still on the path, if not, return Nothing.@ RasterificXObtain the current tangeant of the path if we're still on it. Return Nothing otherwise.A Rasterific†This function is the workhorse of the placement, it will walk the path and calculate the appropriate transformation for every order.A Rasterific-Function handling the placement of the order. RasterificStarting offset Rasterific)Baseline vertical position in the orders. Rasterific"Path on which to place the orders. RasterificOrders to place on a path.:;<=>?@A<;:=>?@ANone"#%3;<=>?FTV[€F Rasterific9Used to describe how to debug print a coon/tensort patch.Q RasterificFStore the new generated information after subdivision in 4 quadrants.S Rasterific Upper leftT Rasterific Upper rightU Rasterific Lower leftV Rasterific Lower rightX Rasterific)Horizontally divides the parametric plane È N midNorthEast E +-------+------+ |0 : 1| | : | | Left :Right | | : | |3 : 2| +-------+------+ W midSouthWest S Y Rasterific0Create UVPatch information for each new quadrantW Rasterific6Swap vertical/horizontal orientation of a tensor patchX RasterificPerform an operation like: ÿn o--------o--------o--------o | | | | | | | | | | | | o--------o--------o--------o | | | | | | | | | | | | o--------o--------o--------o | | | | | | | | | | | | o--------o--------o--------o | | | | | | | | | | | | o--------o--------o--------o to (more or less) o----*---o----*----o----*---o | | | | | | | | | | | | | | | | | | | | | o----*---o----*----o----*---o | | | | | | | | | | | | | | | | | | | | | o----*---o----*----o----*---o | | | | | | | | | | | | | | | | | | | | | o----*---o----*----o----*---o | | | | | | | | | | | | | | | | | | | | | o----*---o----*----o----*---o  ------------ ------------- Left Right Y RasterificmSubdivide a tensor patch into 4 new quadrant. Perform twice the horizontal subdivision with a transposition.Z Rasterific*Split a coon patch into four new quadrantsZ RasterificBWe must reinverse some bezier curve to match the global direction[ Rasterific&Calculate the new cubic bezier using S\ Rasterific*The curves in the coon patch are inversed![ RasterificCDraw the 4 bezier spline representing the boundary of a coon patch.\ Rasterific*Default options drawing nearly everything.] Rasterific<Helper function drawing many information about a coon patch.^ Rasterific>Helper function drawing many information about a tensor patch._ Rasterific"Define the unit square in [0, 1]^2` Rasterific;Render a simple coon mesh, with only color on the vertices.a Rasterific?Render a coon mesh but using cubic interpolation for the color.b Rasterific7Render an mesh patch by interpolating accross an image.c RasterificpRender a coon patch using the subdivision algorithm (potentially slower and less precise in case of image mesh.d RasterificRender a coon patch using the subdivision algorithm (potentially slower and less precise in case of image mesh). You can provide a max deepnessf RasterificrRender a tensor patch using the subdivision algorithm (potentially slower and less precise in case of image mesh.d RasterificMaximum subdivision deepness<Èßàáâãäåæçèéêëìíîïðñòóôõö&'FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef<ßàáâãäåæçèéêëìíîïðñòóôõöQRSTUVÈ'&b`acdefFGHIJKLMNOP\[]^_ZYXWNone +;<=FNQTV]þ]^_Noneb\g RasterificDirection of the arcj RasterificfTranslate an arc with a definition similar to the one given in Cairo to a list of bezier path commandj Rasterificcenter RasterificRadius Rasterific Tolerance Rasterific Angle minimum Rasterific Angle maximumghijNone +;<=FQTVô³k Rasterific;Define the texture applyied to all the children draw call. ãwithTexture (uniformTexture $ PixelRGBA8 0 0x86 0xc1 255) $ do fill $ circle (V2 50 50) 20 fill $ circle (V2 100 100) 20 withTexture (uniformTexture $ PixelRGBA8 0xFF 0x53 0x73 255) $ circle (V2 150 150) 20 docimages/with_texture.pngl RasterificÏWill render the whole subaction with a given group opacity, after each element has been rendered. That means that completly opaque overlapping shapes will be rendered transparently, not one after another. ÿtwithTexture (uniformTexture $ PixelRGBA8 0xFF 0x53 0x73 255) $ stroke 3 JoinRound (CapRound, CapRound) $ line (V2 0 100) (V2 200 100) withGroupOpacity 128 $ do withTexture (uniformTexture $ PixelRGBA8 0 0x86 0xc1 255) . fill $ circle (V2 70 100) 60 withTexture (uniformTexture $ PixelRGBA8 0xff 0xf4 0xc1 255) . fill $ circle (V2 120 100) 60 docimages/group_opacity.png"To be compared to the item opacity ÿMwithTexture (uniformTexture $ PixelRGBA8 0xFF 0x53 0x73 255) $ stroke 3 JoinRound (CapRound, CapRound) $ line (V2 0 100) (V2 200 100) withTexture (uniformTexture $ PixelRGBA8 0 0x86 0xc1 128) . fill $ circle (V2 70 100) 60 withTexture (uniformTexture $ PixelRGBA8 0xff 0xf4 0xc1 128) . fill $ circle (V2 120 100) 60 docimages/item_opacity.pngm Rasterific9Draw all the sub drawing commands using a transformation.n RasterifichThis command allows you to draw primitives on a given curve, for example, you can draw text on a curve: ÿ:let path = Path (V2 100 180) False [PathCubicBezierCurveTo (V2 20 20) (V2 170 20) (V2 300 200)] in stroke 3 JoinRound (CapStraight 0, CapStraight 0) path withTexture (uniformTexture $ PixelRGBA8 0 0 0 255) $ withPathOrientation path 0 $ printTextAt font (PointSize 24) (V2 0 0) "Text on path" docimages/text_on_path.pngQYou can note that the position of the baseline match the size of the characters.~You are not limited to text drawing while using this function, you can draw arbitrary geometry like in the following example: ÿËlet path = Path (V2 100 180) False [PathCubicBezierCurveTo (V2 20 20) (V2 170 20) (V2 300 200)] withTexture (uniformTexture $ PixelRGBA8 0 0 0 255) $ stroke 3 JoinRound (CapStraight 0, CapStraight 0) path withPathOrientation path 0 $ do printTextAt font (PointSize 24) (V2 0 0) "TX" fill $ rectangle (V2 (-10) (-10)) 30 20 fill $ rectangle (V2 45 0) 10 20 fill $ rectangle (V2 60 (-10)) 20 20 fill $ rectangle (V2 100 (-15)) 20 50 docimages/geometry_on_path.pngo Rasterific›Fill some geometry. The geometry should be "looping", ie. the last point of the last primitive should be equal to the first point of the first primitive."The primitive should be connected. fill $ circle (V2 100 100) 75 docimages/fill_circle.pngp Rasterific[This function let you choose how to fill the primitives in case of self intersection. See {% documentation for more information.q Rasterific)Draw some geometry using a clipping path. îwithClipping (fill $ circle (V2 100 100) 75) $ mapM_ (stroke 7 JoinRound (CapRound, CapRound)) [line (V2 0 yf) (V2 200 (yf + 10)) | y <- [5 :: Int, 17 .. 200] , let yf = fromIntegral y ] docimages/with_clipping.pngr RasterificQWill stroke geometry with a given stroke width. The elements should be connected @stroke 5 JoinRound (CapRound, CapRound) $ circle (V2 100 100) 75 docimages/stroke_circle.pngs Rasterific¹Draw a string at a given position. Text printing imply loading a font, there is no default font (yet). Below an example of font rendering using a font installed on Microsoft Windows. ÿFimport Graphics.Text.TrueType( loadFontFile ) import Codec.Picture( PixelRGBA8( .. ), writePng ) import Graphics.Rasterific import Graphics.Rasterific.Texture main :: IO () main = do fontErr <- loadFontFile "test_fonts/DejaVuSans.ttf" case fontErr of Left err -> putStrLn err Right font -> writePng "text_example.png" . renderDrawing 300 70 (PixelRGBA8 255 255 255 255) . withTexture (uniformTexture $ PixelRGBA8 0 0 0 255) $ printTextAt font (PointSize 12) (V2 20 40) "A simple text test!" docimages/text_example.png>You can use any texture, like a gradient while rendering text.t Rasterific[Render a mesh patch as an object. Warning, there is no antialiasing on mesh patch objects!u RasterificaPrint complex text, using different texture font and point size for different parts of the text. ÿ let blackTexture = Just . uniformTexture $ PixelRGBA8 0 0 0 255 redTexture = Just . uniformTexture $ PixelRGBA8 255 0 0 255 in printTextRanges (V2 20 40) [ TextRange font1 (PointSize 12) "A complex " blackTexture , TextRange font2 (PointSize 8) "text test" redTexture] "docimages/text_complex_example.pngv Rasterific¾Function to call in order to start the image creation. Tested pixels type are PixelRGBA8 and Pixel8, pixel types in other colorspace will probably produce weird results. Default DPI is 96z Rasterific«Function to call in order to start the image creation. Tested pixels type are PixelRGBA8 and Pixel8, pixel types in other colorspace will probably produce weird results.{ RasterificÏThis function perform an optimisation, it will render a drawing to an image interanlly and create a new order to render this image instead of the geometry, effectively cuting the geometry generation part.IIt can save execution time when drawing complex elements multiple times.| Rasterific=Transform a drawing into a serie of low-level drawing orders.} RasterificFWith stroke geometry with a given stroke width, using a dash pattern. `dashedStroke [5, 10, 5] 3 JoinRound (CapRound, CapStraight 0) $ line (V2 0 100) (V2 200 100) docimages/dashed_stroke.png~ Rasterific¦With stroke geometry with a given stroke width, using a dash pattern. The offset is there to specify the starting point into the pattern, the value can be negative. ldashedStrokeWithOffset 3 [5, 10, 5] 3 JoinRound (CapRound, CapStraight 0) $ line (V2 0 100) (V2 200 100) 'docimages/dashed_stroke_with_offset.png RasterificEGenerate a strokable line out of points list. Just an helper around £. Wstroke 4 JoinRound (CapRound, CapRound) $ polyline [V2 10 10, V2 100 70, V2 190 190] docimages/stroke_polyline.png€ Rasterific@Generate a fillable polygon out of points list. Similar to the  function, but close the path. /fill $ polygon [V2 30 30, V2 100 70, V2 80 170] docimages/fill_polygon.png RasterificoSimply draw an image into the canvas. Take into account any previous transformation performed on the geometry. #drawImage textureImage 0 (V2 30 30) docimages/image_simple.png‚ Rasterific#Draw an image with the desired size 1drawImageAtSize textureImage 2 (V2 30 30) 128 128 docimages/image_resize.pngƒ Rasterific)Return a simple line ready to be stroked. Kstroke 17 JoinRound (CapRound, CapRound) $ line (V2 10 10) (V2 180 170) docimages/stroke_line.pngn RasterificPath directing the orientation. Rasterific5Basline Y axis position, used to align text properly. RasterificThe sub drawings.q RasterificThe clipping path RasterificThe actual geometry to clipr Rasterific Stroke width RasterificWhich kind of join will be used RasterificStart and end capping. RasterificList of elements to renders Rasterific Drawing font Rasterificfont Point size Rasterific"Drawing starting point (base line) RasterificString to printu RasterificStarting point of the base line Rasterific Ranges description to be printedv RasterificRendering width RasterificRendering height RasterificBackground color RasterificRendering actionw RasterificRendering width RasterificRendering height Rasterific$Current DPI used for text rendering. RasterificDrawing Ordersx RasterificRendering width RasterificRendering height Rasterific$Current DPI used for text rendering. RasterificRendering actiony RasterificRendering width RasterificRendering height Rasterific$Current DPI used for text rendering. RasterificRendering actionsz RasterificRendering width RasterificRendering height Rasterific$Current DPI used for text rendering. RasterificBackground color RasterificRendering action{ RasterificMax rendering width RasterificMax rendering height| RasterificRendering width RasterificRendering height RasterificCurrent assumed DPI RasterificBackground color RasterificRendering action} Rasterific#Dashing pattern to use for stroking Rasterific Stroke width RasterificWhich kind of join will be used RasterificStart and end capping. RasterificList of elements to render~ RasterificStarting offset Rasterific#Dashing pattern to use for stroking Rasterific Stroke width RasterificWhich kind of join will be used RasterificStart and end capping. RasterificList of elements to render RasterificImage to be drawn Rasterific(Border size, drawn with current texture. Rasterific/Position of the corner upper left of the image.‚ RasterificImage to be drawn Rasterific(Border size, drawn with current texture. Rasterific/Position of the corner upper left of the image. RasterificWidth of the drawn image RasterificHeight of the drawn image}PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwyxz{|}~€‚ƒ„†‡ˆ‰Š‹¢£·»¼½¾¿ÀÁÂÃÄÅÆÇóôõghijklmnopqrstuvwxyz{|}~€‚ƒ}optr}~sukqlmnÇÆvzxyw‡ÅP†cdefghnopqijklm_`abUVWXYQRST]^Z[\tuvrs¼½¾¿ÀÁÂÃ。{»¢£·ˆ‰Š‹ghij~€‚ƒwyxz{|}óôõ„|None+<FTV/€ „ Rasterific>Set the repeat pattern of the texture (if any). With padding: TwithTexture (sampledImageTexture textureImage) $ fill $ rectangle (V2 0 0) 200 200 !docimages/sampled_texture_pad.png With repeat: ‚withTexture (withSampler SamplerRepeat $ sampledImageTexture textureImage) $ fill $ rectangle (V2 0 0) 200 200 $docimages/sampled_texture_repeat.png With reflect: ƒwithTexture (withSampler SamplerReflect $ sampledImageTexture textureImage) $ fill $ rectangle (V2 0 0) 200 200 %docimages/sampled_texture_reflect.png… RasterificbTransform the coordinates used for texture before applying it, allow interesting transformations. èwithTexture (withSampler SamplerRepeat $ transformTexture (rotateCenter 1 (V2 0 0) <> scale 0.5 0.25) $ sampledImageTexture textureImage) $ fill $ rectangle (V2 0 0) 200 200 $docimages/sampled_texture_scaled.png† RasterificFThe uniform texture is the simplest texture of all: an uniform color.‡ Rasterific(Texture using a mesh patch as definitionˆ RasterificLinear gradient texture. ÿ"let gradDef = [(0, PixelRGBA8 0 0x86 0xc1 255) ,(0.5, PixelRGBA8 0xff 0xf4 0xc1 255) ,(1, PixelRGBA8 0xFF 0x53 0x73 255)] in withTexture (linearGradientTexture SamplerPad gradDef (V2 40 40) (V2 130 130)) $ fill $ circle (V2 100 100) 100 docimages/linear_gradient.png‰ Rasterific=Use another image as a texture for the filling. Contrary to  imageTexture=, this function perform a bilinear filtering on the texture.Š RasterificRadial gradient texture ÿ let gradDef = [(0, PixelRGBA8 0 0x86 0xc1 255) ,(0.5, PixelRGBA8 0xff 0xf4 0xc1 255) ,(1, PixelRGBA8 0xFF 0x53 0x73 255)] in withTexture (radialGradientTexture gradDef (V2 100 100) 75) $ fill $ circle (V2 100 100) 100 docimages/radial_gradient.png‹ Rasterific+Radial gradient texture with a focus point. ÿ let gradDef = [(0, PixelRGBA8 0 0x86 0xc1 255) ,(0.5, PixelRGBA8 0xff 0xf4 0xc1 255) ,(1, PixelRGBA8 0xFF 0x53 0x73 255)] in withTexture (radialGradientWithFocusTexture gradDef (V2 100 100) 75 (V2 70 70) ) $ fill $ circle (V2 100 100) 100 #docimages/radial_gradient_focus.pngŒ RasterificxPerform a multiplication operation between a full color texture and a greyscale one, used for clip-path implementation. Rasterific0Use a drawing as a repeating background pattern. ÿlet pattern = patternTexture 40 40 96 (PixelRGBA8 0xFF 0x53 0x73 255) . withTexture (uniformTexture $ PixelRGBA8 0 0x86 0xc1 255) $ fill $ circle (V2 20 20) 13 in withTexture pattern $ fill $ roundedRectangle (V2 20 20) 160 160 20 20 docimages/pattern_texture.png† Rasterific#The color used for all the texture.ˆ RasterificGradient description. RasterificLinear gradient start point. RasterificLinear gradient end point.Š RasterificGradient description RasterificRadial gradient center RasterificRadial gradient radius‹ RasterificGradient description RasterificRadial gradient center RasterificRadial gradient radius RasterificRadial gradient focus pointŒ RasterificThe full blown texture. RasterificA greyscale modulation texture. RasterificThe resulting texture. RasterificWidth RasterificHeight Rasterific!Dpi if text is present in pattern RasterificPattern background color RasterificDrawing defining the pattern „…†‡ˆ‰Š‹Œ „†ˆŠ‹‰‡Œ…` !!"#$%&'()*+,-./00123455667789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij klmnoppqrstuvwxyz{|}}~€‚‚ƒ„…††‡ˆ‰Š‹ŒŽŽ‘’“”•–—˜™š›œžŸ ¡¢¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÓÔÕÖרÙÚÛÜÝÝÞßßàáâãääåæççèéêëìíîïïðñòóôõõö÷øùúûûüýþÿ      !"##$%&'()* + , - . / 0 123 4 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O PQQRSTUVWXYZ[[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•– º » ¼ —˜™š ¹ › œ  ž Ÿ   ¡ ¢˜£¤¥¦§ ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º »¼½¾¿ÀÁ¼ÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÂÑÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæç—èéêëìíîïðñòóôõö÷øùúÏûüýþþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI•JKLMNOPPQRST¥UV˜WX YZ[\]^_`ab&Rasterific-0.7.4-wko7Jzn96ZL70kpSV1YuHGraphics.RasterificGraphics.Rasterific.LinearGraphics.Rasterific.Outline#Graphics.Rasterific.TransformationsGraphics.Rasterific.LensesGraphics.Rasterific.PatchGraphics.Rasterific.MeshPatchGraphics.Rasterific.TextureGraphics.Rasterific.Immediate Graphics.Rasterific.BiSampleableGraphics.Rasterific.PathWalkerGraphics.Rasterific.MiniLensGraphics.Rasterific.Operators$Graphics.Rasterific.QuadraticFormulaGraphics.Rasterific.Types#Graphics.Rasterific.QuadraticBezierGraphics.Rasterific.LineGraphics.Rasterific.CubicBezier"Graphics.Rasterific.StrokeInternalGraphics.Rasterific.Rasterize"Graphics.Rasterific.PlaneBoundableGraphics.Rasterific.CompositorGraphics.Rasterific.PatchTypes$Graphics.Rasterific.ComplexPrimitiveGraphics.Rasterific.CommandGraphics.Rasterific.Shading5Graphics.Rasterific.CubicBezier.FastForwardDifferenceGraphics.Rasterific.MicroPdfGraphics.Rasterific.Arc)FontyFruity-0.5.3.3-KBpVfYLuCsD0PoVgESsgZGraphics.Text.TrueType getPointSize PointSizeMetricdot quadranceqddistancenormsignormEpsilonnearZeroAdditivezero^+^^-^lerpV1R2_yR1_xV4V3V2^*^/ normalize$fApplicativeV2$fNumV2$fTraversableV2 $fFoldableV2 $fFunctorV2$fApplicativeV3$fNumV3$fTraversableV3 $fFoldableV3 $fFunctorV3$fApplicativeV4$fNumV4$fTraversableV4 $fFoldableV4 $fFunctorV4$fR1V4$fR1V3$fR1V2$fR2V4$fR2V3$fR2V2$fApplicativeV1$fTraversableV1 $fFoldableV1 $fFunctorV1$fR1V1 $fAdditiveV1 $fAdditiveV2 $fAdditiveV3 $fAdditiveV4 $fEpsilonV1$fEpsilonDouble$fEpsilonFloat $fMetricV2 $fMetricV3 $fMetricV4 $fEpsilonV2 $fEpsilonV3 $fEpsilonV4$fEqV2$fShowV2$fEqV3$fShowV3$fEqV4$fShowV4$fEqV1$fShowV1$fNumV1Point PathCommand PathLineToPathQuadraticBezierCurveToPathCubicBezierCurveToPath_pathOriginPoint _pathClose _pathCommandGeometry toPrimitives listToPrims PrimitivabletoPrim PrimitiveLinePrim BezierPrimCubicBezierPrim CubicBezier _cBezierX0 _cBezierX1 _cBezierX2 _cBezierX3Bezier _bezierX0 _bezierX1 _bezierX2Line_lineX0_lineX1 PointFoldable foldPoints Transformable transform transformM SamplerRepeat SamplerPadSamplerReflect FillMethod FillWinding FillEvenOddJoin JoinRound JoinMiterCap CapStraightCapRound DashPattern StrokeWidthVectorpathToPrimitivesfirstTangeantOflastTangeantOf firstPointOf lastPointOfTransformation _transformA _transformC _transformE _transformB _transformD _transformFapplyTransformationapplyVectorTransformationrotate rotateCenterscale translateskewXskewY toNewXBaseinverseTransformation$fMonoidTransformation$fSemigroupTransformation$fEqTransformation$fShowTransformationbezierFromPath lineFromPath Traversal' TraversalLens'Lens linePointslineX0lineX1bezX0bezX1bezX2 bezierPointscbezX0cbezX1cbezX2cbezX3cubicBezierPointsprimitivePointspathCommandPoints pathPointscubicBezierFromPathapproximatePathLengthdashedStrokizestrokizeclipPlaneBoundable planeBounds PlaneBound_planeMinBound_planeMaxBound boundWidth boundHeightboundLowerLeftCorner ModulableRenderablePixelModulablePixelInterpolablePixelCubicCoefficientgetCubicCoefficients Derivatives_interNorthWest_interNorthEast_interSouthWest_interSouthEast InterBezier_inter0_inter1 MeshPatch_meshPatchWidth_meshPatchHeight_meshPrimaryVertices_meshHorizontalSecondary_meshVerticalSecondary _meshColors_meshTensorDerivatives CoonPatch_north_east_south_west _coonValues TensorPatch_curve0_curve1_curve2_curve3 _tensorValuesParametricValues _northValue _eastValue _southValue _westValuePatchInterpolation PatchBilinear PatchBicubicCoonColorWeight MutableMeshcalculateMeshColorDerivativethawMesh freezeMesh verticeAtwithMesh setVertice getVerticesetHorizPoints setVertPointssetColorgenerateImageMeshgenerateLinearGrid coonPatchAt tensorPatchAtcoonImagePatchAttensorImagePatchAtcoonPatchAtWithDerivativetensorPatchAtWithDerivative coonPatchesOftensorPatchesOfimagePatchesOftensorImagePatchesOfcubicCoonPatchesOfcubicTensorPatchesOfcircleellipse rectangleroundedRectangleTextureGradient TextRange _textFont _textSize_text _textTexture DrawContextDrawing dumpDrawing BiSampleable interpolatesampledImageShaderbilinearInterpolation!$fBiSampleableImageMeshPixelRGBA8 $fBiSampleableCubicCoefficientpx $fBiSampleableParametricValuespxrasterizeCoonPatchrasterizeTensorPatch DrawOrder_orderPrimitives _orderTexture_orderFillMethod _orderMask _orderDirecttransformOrderorderToDrawing fillOrderrunDrawContextfillWithTexturefillWithTextureNoAAfillWithTextureAndMasktextToDrawOrders meshToImage$fTransformableDrawOrder$fPlaneBoundableDrawOrder PathDrawer PathWalker PathWalkerTrunPathWalking advanceBycurrentPositioncurrentTangeantdrawOrdersOnPath$fMonadPathWalkerT$fApplicativePathWalkerT$fFunctorPathWalkerT$fMonadTransPathWalkerT DebugOption_drawControlMesh_drawBaseVertices_drawControVertices_colorVertices _drawOutline _outlineColor_controlMeshColor _vertexColor _controlColor Subdivided _northWest _northEast _southWest _southEasttransposePatchhorizontalTensorSubdividesubdivideTensorPatchsubdividePatchdrawCoonPatchOutline defaultDebugdebugDrawCoonPatchdebugDrawTensorPatchparametricBaserenderCoonMeshrenderCoonMeshBicubicrenderImageMeshrenderCoonPatchrenderCoonPatchAtDeepnessrenderTensorPatchrenderTensorPatchAtDeepness DirectionForwardBackwardarcInDirection withTexturewithGroupOpacitywithTransformationwithPathOrientationfillfillWithMethod withClippingstroke printTextAtrenderMeshPatchprintTextRanges renderDrawingrenderOrdersAtDpiToPdfrenderDrawingAtDpiToPDFrenderDrawingsAtDpiToPDFrenderDrawingAtDpi cacheDrawingdrawOrdersOfDrawing dashedStrokedashedStrokeWithOffsetpolylinepolygon drawImagedrawImageAtSizeline withSamplertransformTextureuniformTexturemeshPatchTexturelinearGradientTexturesampledImageTextureradialGradientTextureradialGradientWithFocusTexturemodulateTexturepatternTexturelensbase Data.Function&view.^set.~.=%=+=useGHC.Numabsghc-prim GHC.Classes<=^&&^^||^^==^^<=^^<^^<^/=^vminvmaxvabsvfloorvceil clampPointmidPoint vpartitionnormalifZeroisNearbyisDistingableFrommiddleQuadraticFormula_coeffA_coeffB_coeffC discriminant formulaRoots EdgeSample_sampleX_sampleY _sampleAlpha_sampleH$fStorableEdgeSample$fTransformableV2$fPointFoldableV2$fPrimitivableCubicBezier$fPrimitivableBezier$fPrimitivableLine$fPrimitivablePrimitive $fGeometryf ContainerProducerProxycontainerOfFunctioncontainerOfListlistOfContainerresplitbezierLengthApproximation straightLine clipBeziersanitizeBezier offsetBezier isBezierPointdecomposeBeziers bezierBreakAt flattenBezierclipLine extendLine isLinePoint lineLength sanitizeLine lineBreakAt flattenLine offsetLine decomposeLine CachedBeziercubicBezierCircle extremumsclipCubicBeziercubicBezierBreakAtisSufficientlyFlatcubicBezierLengthApproximationflattenCubicBeziercubicBezierBoundsoffsetCubicBezierdivideCubicBezierdecomposeCubicBeziersisCubicBezierPointsanitizeCubicBeziercubicFromQuadraticBezier roundJoincaplinearizePrimitivesisPrimitivePointflattensplitPrimitiveUntildashize CoverageSpan _coverageX _coverageY _coverageVal_coverageLengthtoOpaqueCoverage rasterize emptyValue fullValue clampCoveragemodulatemodivcoverageModulateemptyPx alphaOver alphaComposeHolder toFloatPixelfromFloatPixelmaxRepresentable Compositor maxDistancecompositionDestinationcompositionAlpha ImageMeshUVPatchUV Derivative xDerivative yDerivativetransposeParametricValues coonPointAt toTensorPatch _meshImage_meshTransform _derivValues _xDerivative _yDerivative _xyDerivativeisVerticalOrientationfoldMeshPoints DrawCommandFill CustomRenderMeshPatchRenderStroke DashedStrokeTextFill SetTextureWithGlobalOpacityWithImageEffect WithCliping WithTransformWithPathOrientation SolidTextureLinearGradientTextureRadialGradientTextureRadialGradientWithFocusTexture WithSamplerWithTextureTransformSampledTexture RawTexture ShaderTextureModulateTextureAlphaModulateTexturePatternTextureMeshPatchTextureImageTransformerShaderFunction dumpTexture solidColorplotOpaquePixelunsafePlotOpaquePixelshaderOfTexturetransformTextureToFiller imageShaderalphaModulateTexturelinearGradientShaderradialGradientShaderradialGradientWithFocusShaderbezierToForwardDifferenceCoeffrasterizerCubicBezierForwardDifferenceCoefficient_fdA_fdB_fdCestimateFDStepCount GHC.TypesIOGHC.STST WalkerStatesubdivideHorizontalsubdivideWeights inverseBeziercombinemidCurverenderDrawingToPdfrenderDrawingsToPdfrenderOrdersToPdf