Rasterific-0.6.1: A pure haskell drawing engine.

Safe HaskellNone
LanguageHaskell2010

Graphics.Rasterific.Texture

Contents

Description

Module describing the various filling method of the geometric primitives.

All points coordinate given in this module are expressed final image pixel coordinates.

Synopsis

Documentation

data Texture px

Reification of texture type

type Gradient px = [(Float, px)]

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)]

the first stop value must be zero and the last, one.

withSampler :: SamplerRepeat -> Texture px -> Texture px

Set the repeat pattern of the texture (if any). With padding:

withTexture (sampledImageTexture textureImage) $
  fill $ rectangle (V2 0 0) 200 200

With repeat:

withTexture (withSampler SamplerRepeat $
                sampledImageTexture textureImage) $
    fill $ rectangle (V2 0 0) 200 200

With reflect:

withTexture (withSampler SamplerReflect $
                sampledImageTexture textureImage) $
    fill $ rectangle (V2 0 0) 200 200

uniformTexture

Arguments

:: px

The color used for all the texture.

-> Texture px 

The uniform texture is the simplest texture of all: an uniform color.

Texture kind

linearGradientTexture

Arguments

:: Gradient px

Gradient description.

-> Point

Linear gradient start point.

-> Point

Linear gradient end point.

-> Texture px 

Linear 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

radialGradientTexture

Arguments

:: Gradient px

Gradient description

-> Point

Radial gradient center

-> Float

Radial gradient radius

-> Texture px 

Radial 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

radialGradientWithFocusTexture

Arguments

:: Gradient px

Gradient description

-> Point

Radial gradient center

-> Float

Radial gradient radius

-> Point

Radial gradient focus point

-> Texture px 

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

sampledImageTexture :: Image px -> Texture px

Use another image as a texture for the filling. Contrary to imageTexture, this function perform a bilinear filtering on the texture.

patternTexture

Arguments

:: RenderablePixel px 
=> Int

Width

-> Int

Height

-> Dpi

Dpi if text is present in pattern

-> px

Pattern background color

-> Drawing px ()

Drawing defining the pattern

-> Texture px 

Use 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

Texture manipulation

modulateTexture

Arguments

:: Pixel px 
=> Texture px

The full blown texture.

-> Texture (PixelBaseComponent px)

A greyscale modulation texture.

-> Texture px

The resulting texture.

Perform a multiplication operation between a full color texture and a greyscale one, used for clip-path implementation.

transformTexture :: Transformation -> Texture px -> Texture px

Transform 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