gloss- Painless 2D vector graphics, animations and simulations.

Safe HaskellSafe-Inferred



Represents an integral rectangular area of the 2D plane. Using Ints (instead of Floats) for the bounds means we can safely compare extents for equality.



data Extent Source

A rectangular area of the 2D plane. We keep the type abstract to ensure that invalid extents cannot be constructed.


type Coord = (Int, Int)Source

An integral coordinate.



:: Int

y max (north)

-> Int

y min (south)

-> Int

x max (east)

-> Int

x min (west)

-> Extent 

Construct an extent. The north value must be > south, and east > west, else error.

takeExtent :: Extent -> (Int, Int, Int, Int)Source

Take the NSEW components of an extent.

squareExtent :: Int -> ExtentSource

A square extent of a given size.

sizeOfExtent :: Extent -> (Int, Int)Source

Get the width and height of an extent.

isUnitExtent :: Extent -> BoolSource

Check if an extent is a square with a width and height of 1.

coordInExtent :: Extent -> Coord -> BoolSource

Check whether a coordinate lies inside an extent.

pointInExtent :: Extent -> Point -> BoolSource

Check whether a point lies inside an extent.

centerCoordOfExtent :: Extent -> (Int, Int)Source

Get the coordinate that lies at the center of an extent.

cutQuadOfExtent :: Quad -> Extent -> ExtentSource

Cut one quadrant out of an extent.

quadOfCoord :: Extent -> Coord -> Maybe QuadSource

Get the quadrant that this coordinate lies in, if any.

pathToCoord :: Extent -> Coord -> Maybe [Quad]Source

Constuct a path to a particular coordinate in an extent.

intersectSegExtent :: Point -> Point -> Extent -> Maybe PointSource

If a line segment (P1-P2) intersects the outer edge of an extent then return the intersection point, that is closest to P1, if any. If P1 is inside the extent then Nothing.

            | /  |
            +    |

touchesSegExtent :: Point -> Point -> Extent -> BoolSource

Check whether a line segment's endpoints are inside an extent, or if it intersects with the boundary.