sdl2-compositor-1.2.0.3: image compositing with sdl2 - declarative style

Safe HaskellNone
LanguageHaskell2010

SDL.Compositor

Contents

Description

This module provides the means for declarative image generation using sdl2 primitives as a basis. Atomical operations for image composition are rotation, translation, mirroring, color modulation, changing blend modes and primitive drawing.

This packages aims to provide a basic interface via type classes. This means that you could write your own implementation but still use eventual utility functions provided by this package. The authors decided to split the functionality into several typeclasses to allow partial implementations while preserving type safety.

Synopsis

Interface

class Compositor c where Source

A Compositor is a thing that can overlap, rotate and mirror objects.

Methods

overC :: c -> c -> c infixr 5 Source

overC x y positions x over y. The meaning of this depends on the context. For Textures and drawings this means that x should be drawn after y was drawn.

rotateC :: Double -> c -> c Source

flipC :: V2 Bool -> c -> c Source

This function takes a 'V2 Bool' that represents mirroring action. The first component of the vector represents mirroring along the y-axis (horizontally) and the second component represents mirroring along the x-axis (vertically).

class Blender b where Source

This class modells a graphics object that supports switching of BlendMode.

Methods

blendMode :: BlendMode -> b -> b Source

This method sets the BlendMode of an object. If the object has children, their BlendMode property will be preserved.

class Manipulator m where Source

This class models a graphics object that supports color modulation.

Methods

modulateAlphaM :: Int -> m -> m Source

Modulate the alpha channel of picture. This behavior stacks multiplicatively.

modulateRedM :: Int -> m -> m Source

Modulate the red channel of picture. This behavior stacks multiplicatively.

modulateGreenM :: Int -> m -> m Source

Modulate the green channel of picture. This behavior stacks multiplicatively.

modulateBlueM :: Int -> m -> m Source

Modulate the blue channel of picture. This behavior stacks multiplicatively.

class Drawer d where Source

class AbsoluteSize c where Source

Methods

translateA :: V2 Int -> c a -> c a Source

sizedA :: V2 Int -> a -> c a Source

class Renderer rend where Source

Methods

rendererDrawColor :: rend -> StateVar (V4 Word8) Source

clear :: rend -> IO () Source

present :: rend -> IO () Source

drawRect :: rend -> Maybe (Rectangle Int) -> IO () Source

drawLine :: rend -> Point V2 Int -> Point V2 Int -> IO () Source

class Renderable rend tex where Source

This class modells that something can be rendered to another thing.

Methods

copyEx Source

Arguments

:: rend

rendering context

-> tex

texture

-> Maybe (Rectangle Int)

source rectangle

-> Maybe (Rectangle Int)

destination rectangle

-> Double

rotation

-> Maybe (Point V2 Int)

rotation center

-> V2 Bool

flipping

-> IO () 

createTexture :: rend -> PixelFormat -> TextureAccess -> V2 Int -> IO tex Source

rendererRenderTarget :: rend -> StateVar (Maybe tex) Source

Utility

withZIndex :: (Compositor c, Monoid c) => [(Int, c)] -> c Source

Arrange all given compositions in one composition.

This function takes a list of pairs where the first element of the pair is the z-index and the second element is the composition. Elements of with a higher z-index will be rendered "in front of" elements with lower indices. If elements have the same index then the element that comes first in the list will be drawn over all the later ones.

This method can only arrange compositions that are in the "the same list of arguments". That means that

withZIndex [(1,a),(2,b)] `overC` withZIndex [(3,c)]

will always result in b being rendered "in front of" a and c, no matter how large the z-index of c is.

Implementation

data CompositingNode a Source

A compositing node represents a compound graphical resource.

runRenderer :: forall tex rend. (Texture tex, Renderer rend, Renderable rend tex) => rend -> CompositingNode tex -> IO () Source

Render a composed image.

Colors

data Color Source

Represents the value of color.

rgba :: Word8 -> Word8 -> Word8 -> Word8 -> Color Source

construct a color value from red green blue and alpha values.