-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Bindings to SDL2_gfx.
--   
--   Haskell bindings to SDL2_gfx.
@package sdl2-gfx
@version 0.2


-- | Raw bindings to the <tt>SDL2_gfx</tt> library, specifically the
--   framerate management functionality from <tt>SDL2_framerate.h</tt>.
module SDL.Raw.Framerate
data Manager
Manager :: Word32 -> CFloat -> Word32 -> Word32 -> Word32 -> Manager
[frameCount] :: Manager -> Word32
[rateTicks] :: Manager -> CFloat
[baseTicks] :: Manager -> Word32
[lastTicks] :: Manager -> Word32
[rate] :: Manager -> Word32
init :: MonadIO m => Ptr Manager -> m ()
framerateDelay :: MonadIO m => Ptr Manager -> m Word32
setFramerate :: MonadIO m => Ptr Manager -> Word32 -> m CInt
getFramerate :: MonadIO m => Ptr Manager -> m CInt
getFramecount :: MonadIO m => Ptr Manager -> m CInt
instance GHC.Read.Read SDL.Raw.Framerate.Manager
instance GHC.Show.Show SDL.Raw.Framerate.Manager
instance GHC.Classes.Eq SDL.Raw.Framerate.Manager
instance Foreign.Storable.Storable SDL.Raw.Framerate.Manager


-- | Bindings to <tt>SDL2_gfx</tt>'s framerate management functionality.
--   These functions should allow you to set, manage and query a target
--   application framerate.
module SDL.Framerate

-- | A certain number of frames per second.
type Framerate = Int

-- | A framerate manager, counting frames and keeping track of time delays
--   necessary to reach a certain target framerate.
newtype Manager
Manager :: (Ptr Manager) -> Manager

-- | Creates a new framerate <a>Manager</a>, sets a target <a>Framerate</a>
--   and frees the <a>Manager</a> after the inner computation ends.
--   
--   This is the recommended way to create a <a>Manager</a>.
with :: (MonadBaseControl IO m, MonadIO m) => Framerate -> (Manager -> m a) -> m a

-- | Create a new framerate <a>Manager</a> using the default settings.
--   
--   You have to take care to call <a>destroyManager</a> yourself. It's
--   recommended to use <a>with</a> instead.
manager :: MonadIO m => m Manager

-- | Set a target framerate and reset delay interpolation.
--   
--   Note that the given framerate must be within the allowed range --
--   otherwise the minimum or maximum allowed framerate is used instead.
set :: MonadIO m => Manager -> Framerate -> m ()

-- | Generate and apply a delay in order to maintain a constant target
--   framerate.
--   
--   This should be called once per rendering loop.
--   
--   Delay will automatically be set to zero if the computer cannot keep up
--   (if rendering is too slow). Returns the number of milliseconds since
--   the last time <a>delay</a> was called (possibly zero).
delay :: MonadIO m => Manager -> m Int

-- | Same as <a>delay</a>, but doesn't return the time since it was last
--   called.
delay_ :: MonadIO m => Manager -> m ()

-- | The smallest allowed framerate.
minimum :: Framerate

-- | The largest allowed framerate.
maximum :: Framerate

-- | Get the currently set framerate.
get :: MonadIO m => Manager -> m Framerate

-- | Returns the framecount. Each time <a>delay</a> is called, a frame is
--   counted.
count :: MonadIO m => Manager -> m Int

-- | Frees a framerate manager. Make sure not to use it again after this
--   action.
destroyManager :: MonadIO m => Manager -> m ()
instance GHC.Show.Show SDL.Framerate.Manager
instance GHC.Classes.Eq SDL.Framerate.Manager


-- | Raw bindings to the <tt>SDL2_gfx</tt> library, specifically the MMX
--   image filter functionality from <tt>SDL2_imageFilter.h</tt>.
module SDL.Raw.ImageFilter
mmxDetect :: forall m_anQ7. MonadIO m_anQ7 => m_anQ7 CInt
mmxOff :: forall m_anQO. MonadIO m_anQO => m_anQO ()
mmxOn :: forall m_anRv. MonadIO m_anRv => m_anRv ()
add :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
mean :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
sub :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
absDiff :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
mult :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
multNor :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
multDivBy2 :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
multDivBy4 :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
bitAnd :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
bitOr :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
div :: MonadIO m => Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
bitNegation :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> m CInt
addByte :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
addUInt :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUInt -> m CInt
addByteToHalf :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
subByte :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
subUInt :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUInt -> m CInt
shiftRight :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
shiftRightUInt :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
multByByte :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
shiftRightAndMultByByte :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> CUChar -> m CInt
shiftLeftByte :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
shiftLeftUInt :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
shiftLeft :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
binarizeUsingThreshold :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> m CInt
clipToRange :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> CUChar -> m CInt
normalizeLinear :: MonadIO m => Ptr CUChar -> Ptr CUChar -> CUInt -> CInt -> CInt -> CInt -> CInt -> m CInt


-- | Bindings to <tt>SDL2_gfx</tt>'s MMX image filter functionality.
module SDL.ImageFilter

-- | Are we using MMX code?
usingMMX :: MonadIO m => m Bool

-- | Disable MMX, use non-MMX code instead.
disableMMX :: MonadIO m => m ()

-- | Use MMX code if available.
enableMMX :: MonadIO m => m ()
add :: Vector Word8 -> Vector Word8 -> Vector Word8
mean :: Vector Word8 -> Vector Word8 -> Vector Word8
sub :: Vector Word8 -> Vector Word8 -> Vector Word8
absDiff :: Vector Word8 -> Vector Word8 -> Vector Word8
mult :: Vector Word8 -> Vector Word8 -> Vector Word8
multNor :: Vector Word8 -> Vector Word8 -> Vector Word8
multDivBy2 :: Vector Word8 -> Vector Word8 -> Vector Word8
multDivBy4 :: Vector Word8 -> Vector Word8 -> Vector Word8
bitAnd :: Vector Word8 -> Vector Word8 -> Vector Word8
bitOr :: Vector Word8 -> Vector Word8 -> Vector Word8
div :: Vector Word8 -> Vector Word8 -> Vector Word8
bitNegation :: Vector Word8 -> Vector Word8
addByte :: Word8 -> Vector Word8 -> Vector Word8
addUInt :: CUInt -> Vector Word8 -> Vector Word8
addByteToHalf :: Word8 -> Vector Word8 -> Vector Word8
subByte :: Word8 -> Vector Word8 -> Vector Word8
subUInt :: CUInt -> Vector Word8 -> Vector Word8
shiftRight :: Word8 -> Vector Word8 -> Vector Word8
shiftRightUInt :: Word8 -> Vector Word8 -> Vector Word8
multByByte :: Word8 -> Vector Word8 -> Vector Word8
shiftRightAndMultByByte :: Word8 -> Word8 -> Vector Word8 -> Vector Word8
shiftLeftByte :: Word8 -> Vector Word8 -> Vector Word8
shiftLeftUInt :: Word8 -> Vector Word8 -> Vector Word8
shiftLeft :: Word8 -> Vector Word8 -> Vector Word8
binarizeUsingThreshold :: Word8 -> Vector Word8 -> Vector Word8
clipToRange :: Word8 -> Word8 -> Vector Word8 -> Vector Word8
normalizeLinear :: CInt -> CInt -> CInt -> CInt -> Vector Word8 -> Vector Word8


-- | Raw bindings to the <tt>SDL2_gfx</tt> library, specifically the
--   primitives drawing functionality from <tt>SDL2_gfxPrimitives.h</tt>.
module SDL.Raw.Primitive

-- | The position of something on the x-axis.
type X = Int16

-- | Same as <a>X</a>, but for the y-axis.
type Y = Int16

-- | A radius.
type Rad = Int16

-- | The red color component.
type R = Word8

-- | How many of a certain thing, e.g. how many points, or steps.
type N = CInt

-- | The green color component.
type G = Word8

-- | The blue color component.
type B = Word8

-- | The alpha color component.
type A = Word8
pixel :: MonadIO m => Renderer -> X -> Y -> R -> G -> B -> A -> m CInt

-- | A length.
type L = Int16
hline :: MonadIO m => Renderer -> X -> Y -> L -> R -> G -> B -> A -> m CInt
vline :: MonadIO m => Renderer -> X -> Y -> L -> R -> G -> B -> A -> m CInt
line :: MonadIO m => Renderer -> X -> Y -> X -> Y -> R -> G -> B -> A -> m CInt
aaLine :: MonadIO m => Renderer -> X -> Y -> X -> Y -> R -> G -> B -> A -> m CInt

-- | A width.
type W = Int16
thickLine :: MonadIO m => Renderer -> X -> Y -> X -> Y -> W -> R -> G -> B -> A -> m CInt
bezier :: MonadIO m => Renderer -> Ptr X -> Ptr Y -> N -> N -> R -> G -> B -> A -> m CInt
rectangle :: MonadIO m => Renderer -> X -> Y -> X -> Y -> R -> G -> B -> A -> m CInt
roundedRectangle :: MonadIO m => Renderer -> X -> Y -> X -> Y -> Rad -> R -> G -> B -> A -> m CInt
box :: MonadIO m => Renderer -> X -> Y -> X -> Y -> R -> G -> B -> A -> m CInt
roundedBox :: MonadIO m => Renderer -> X -> Y -> X -> Y -> Rad -> R -> G -> B -> A -> m CInt
circle :: MonadIO m => Renderer -> X -> Y -> Rad -> R -> G -> B -> A -> m CInt
aaCircle :: MonadIO m => Renderer -> X -> Y -> Rad -> R -> G -> B -> A -> m CInt
filledCircle :: MonadIO m => Renderer -> X -> Y -> Rad -> R -> G -> B -> A -> m CInt

-- | Degrees.
type Deg = Int16
arc :: MonadIO m => Renderer -> X -> Y -> Rad -> Deg -> Deg -> R -> G -> B -> A -> m CInt
ellipse :: MonadIO m => Renderer -> X -> Y -> Rad -> Rad -> R -> G -> B -> A -> m CInt
aaEllipse :: MonadIO m => Renderer -> X -> Y -> Rad -> Rad -> R -> G -> B -> A -> m CInt
filledEllipse :: MonadIO m => Renderer -> X -> Y -> Rad -> Rad -> R -> G -> B -> A -> m CInt
pie :: MonadIO m => Renderer -> X -> Y -> Rad -> Deg -> Deg -> R -> G -> B -> A -> m CInt
filledPie :: MonadIO m => Renderer -> X -> Y -> Rad -> Deg -> Deg -> R -> G -> B -> A -> m CInt
trigon :: MonadIO m => Renderer -> X -> Y -> X -> Y -> X -> Y -> R -> G -> B -> A -> m CInt
aaTrigon :: MonadIO m => Renderer -> X -> Y -> X -> Y -> X -> Y -> R -> G -> B -> A -> m CInt
filledTrigon :: MonadIO m => Renderer -> X -> Y -> X -> Y -> X -> Y -> R -> G -> B -> A -> m CInt
polygon :: MonadIO m => Renderer -> Ptr X -> Ptr Y -> N -> R -> G -> B -> A -> m CInt
aaPolygon :: MonadIO m => Renderer -> Ptr X -> Ptr Y -> N -> R -> G -> B -> A -> m CInt
filledPolygon :: MonadIO m => Renderer -> Ptr X -> Ptr Y -> N -> R -> G -> B -> A -> m CInt
texturedPolygon :: MonadIO m => Renderer -> Ptr X -> Ptr Y -> N -> Ptr Surface -> X -> Y -> R -> G -> B -> A -> m CInt


-- | Bindings to <tt>SDL2_gfx</tt>'s primitives drawing functionality.
--   These functions should allow you to render various simple shapes such
--   as lines, ellipses or polygons.
--   
--   All of the monadic functions within this module are capable of
--   throwing an <a>SDLException</a> if they encounter an error.
module SDL.Primitive

-- | A position as a two-dimensional vector.
type Pos = V2 CInt

-- | A color as an RGBA byte-vector.
type Color = V4 Word8

-- | Renders a single pixel at a given position.
pixel :: MonadIO m => Renderer -> Pos -> Color -> m ()

-- | Renders a line between two points.
line :: MonadIO m => Renderer -> Pos -> Pos -> Color -> m ()

-- | A length in pixels.
type Length = CInt

-- | Renders a horizontal line of a certain <a>Length</a>, its left and
--   starting point corresponding to a given <a>Pos</a>.
horizontalLine :: MonadIO m => Renderer -> Pos -> Length -> Color -> m ()

-- | Renders a vertical line of a certain <a>Length</a>, its top and
--   starting point corresponding to a given <a>Pos</a>.
verticalLine :: MonadIO m => Renderer -> Pos -> Length -> Color -> m ()

-- | Renders an anti-aliased line between two points.
smoothLine :: MonadIO m => Renderer -> Pos -> Pos -> Color -> m ()

-- | A width in pixels.
type Width = CInt

-- | Same as <a>line</a>, but the rendered line is of a given <a>Width</a>.
thickLine :: MonadIO m => Renderer -> Pos -> Pos -> Width -> Color -> m ()

-- | Render a transparent triangle, its edges being of a given
--   <a>Color</a>.
triangle :: MonadIO m => Renderer -> Pos -> Pos -> Pos -> Color -> m ()

-- | Same as <a>triangle</a>, but the edges are anti-aliased.
smoothTriangle :: MonadIO m => Renderer -> Pos -> Pos -> Pos -> Color -> m ()

-- | Same as <a>triangle</a>, but the triangle is filled with the given
--   <a>Color</a> instead.
fillTriangle :: MonadIO m => Renderer -> Pos -> Pos -> Pos -> Color -> m ()

-- | Renders a transparent rectangle spanning two points, bordered by a
--   line of a given <a>Color</a>.
rectangle :: MonadIO m => Renderer -> Pos -> Pos -> Color -> m ()

-- | A radius in pixels.
type Radius = CInt

-- | Same as <a>rectangle</a>, but the rectangle's corners are rounded.
--   
--   Control the roundness using the <a>Radius</a> argument, defining the
--   radius of the corner arcs.
roundRectangle :: MonadIO m => Renderer -> Pos -> Pos -> Radius -> Color -> m ()

-- | Same as <a>rectangle</a>, but the rectangle is filled by the given
--   <a>Color</a>.
fillRectangle :: MonadIO m => Renderer -> Pos -> Pos -> Color -> m ()

-- | Same as <a>roundRectangle</a>, but the rectangle is filled by the
--   given <a>Color</a>.
fillRoundRectangle :: MonadIO m => Renderer -> Pos -> Pos -> Radius -> Color -> m ()

-- | A starting position in degrees.
type Start = CInt

-- | An ending position in degrees.
type End = CInt

-- | Render an arc, its <a>Pos</a> being its center.
--   
--   The <a>Start</a> and <a>End</a> arguments define the starting and
--   ending points of the arc in degrees, zero degrees being south and
--   increasing counterclockwise.
arc :: MonadIO m => Renderer -> Pos -> Radius -> Start -> End -> Color -> m ()

-- | Renders a transparent circle, bordered by a line of a given
--   <a>Color</a>.
circle :: MonadIO m => Renderer -> Pos -> Radius -> Color -> m ()

-- | Same as <a>circle</a>, but the border is anti-aliased.
smoothCircle :: MonadIO m => Renderer -> Pos -> Radius -> Color -> m ()

-- | Same as <a>circle</a>, but fills it with the given <a>Color</a>
--   instead.
fillCircle :: MonadIO m => Renderer -> Pos -> Radius -> Color -> m ()

-- | Renders a transparent ellipse, bordered by a line of a given
--   <a>Color</a>.
--   
--   The <a>Radius</a> arguments are the horizontal and vertical radius of
--   the ellipse respectively, in pixels.
ellipse :: MonadIO m => Renderer -> Pos -> Radius -> Radius -> Color -> m ()

-- | Same as <a>ellipse</a>, but makes the border anti-aliased.
smoothEllipse :: MonadIO m => Renderer -> Pos -> Radius -> Radius -> Color -> m ()

-- | Same as <a>ellipse</a>, but fills it with the given <a>Color</a>
--   instead.
fillEllipse :: MonadIO m => Renderer -> Pos -> Radius -> Radius -> Color -> m ()

-- | Render a pie outline, its <a>Pos</a> being its center.
--   
--   The <a>Start</a> and <a>End</a> arguments define the starting and
--   ending points of the pie in degrees, zero degrees being east and
--   increasing counterclockwise.
pie :: MonadIO m => Renderer -> Pos -> Radius -> Start -> End -> Color -> m ()

-- | Same as <a>pie</a>, but fills it with the given <a>Color</a> instead.
fillPie :: MonadIO m => Renderer -> Pos -> Radius -> Start -> End -> Color -> m ()

-- | How many interpolation steps when rendering a bezier curve?
--   
--   The higher this is, the smoother the curve and more resource-intensive
--   the render.
type Steps = CInt

-- | Renders a bezier curve of a given <a>Color</a>.
--   
--   The input vectors contain the bezier curve's point locations on the x
--   and y-axis, respectively. The input vectors need to be the same
--   length, and those lengths must be at least 3, otherwise <a>bezier</a>
--   might raise an <a>SDLException</a>. The same applies for the number of
--   interpolation <a>Steps</a>: it must be at least 2.
bezier :: MonadIO m => Renderer -> Vector Int16 -> Vector Int16 -> Steps -> Color -> m ()

-- | Render a transparent polygon, its edges of a given <a>Color</a>.
--   
--   The input vectors contain the points' locations on the x and y-axis,
--   respectively. The input vectors need to be the of the same length, and
--   the lengths must be at least 3, otherwise <a>polygon</a> might raise
--   an <a>SDLException</a>.
polygon :: MonadIO m => Renderer -> Vector Int16 -> Vector Int16 -> Color -> m ()

-- | Same as <a>polygon</a>, but the edges are drawn anti-aliased.
smoothPolygon :: MonadIO m => Renderer -> Vector Int16 -> Vector Int16 -> Color -> m ()

-- | Same as <a>polygon</a>, but the polygon is filled with the given
--   <a>Color</a>.
fillPolygon :: MonadIO m => Renderer -> Vector Int16 -> Vector Int16 -> Color -> m ()


-- | Raw bindings to the <tt>SDL2_gfx</tt> library, specifically the
--   surface rotation and zoom functionality from <tt>SDL2_rotozoom.h</tt>.
module SDL.Raw.Rotozoom
rotozoom :: MonadIO m => Ptr Surface -> CDouble -> CDouble -> CInt -> m Ptr Surface
rotozoomXY :: MonadIO m => Ptr Surface -> CDouble -> CDouble -> CDouble -> CInt -> m Ptr Surface
rotozoomSize :: MonadIO m => CInt -> CInt -> CDouble -> CDouble -> Ptr CInt -> Ptr CInt -> m ()
rotozoomSizeXY :: MonadIO m => CInt -> CInt -> CDouble -> CDouble -> CDouble -> Ptr CInt -> Ptr CInt -> m ()
zoom :: MonadIO m => Ptr Surface -> CDouble -> CDouble -> CInt -> m Ptr Surface
zoomSize :: MonadIO m => CInt -> CInt -> CDouble -> CDouble -> Ptr CInt -> Ptr CInt -> m ()
shrink :: MonadIO m => Ptr Surface -> CInt -> CInt -> m Ptr Surface
rotate90 :: MonadIO m => Ptr Surface -> CInt -> m Ptr Surface


-- | Bindings to <tt>SDL2_gfx</tt>'s surface rotation and zoom
--   functionality.
module SDL.Rotozoom

-- | Desired rotation in degrees.
type Angle = Double

-- | A dimension scaling factor.
type Zoom = Double

-- | Whether resulting <a>Surface</a>s are anti-aliased or not.
data Smooth
Smooth :: Smooth
Rough :: Smooth

-- | Rotates and zooms a 32 or 8-bit <a>Surface</a>.
--   
--   If the <a>Surface</a> isn't 8-bit or 32-bit RGBA/ABGR, it will be
--   converted into 32-bit RGBA.
rotozoom :: MonadIO m => Surface -> Angle -> Zoom -> Smooth -> m Surface

-- | Same as <a>rotozoom</a>, but applies different horizontal and vertical
--   scaling factors.
--   
--   The <a>Zoom</a> arguments are the horizontal and vertical zoom,
--   respectively.
rotozoomXY :: MonadIO m => Surface -> Angle -> Zoom -> Zoom -> Smooth -> m Surface

-- | A surface size, packing width and height.
type Size = V2 CInt

-- | Given the <a>Size</a> of an input <a>Surface</a>, returns the
--   <a>Size</a> of a <a>Surface</a> resulting from a <a>rotozoom</a> call.
rotozoomSize :: MonadIO m => Size -> Angle -> Zoom -> m Size

-- | Same as <a>rotozoomSize</a>, but for different horizontal and vertical
--   scaling factors.
rotozoomSizeXY :: MonadIO m => Size -> Angle -> Zoom -> Zoom -> m Size

-- | Same as <a>rotozoom</a>, but only performs the zoom.
--   
--   If a <a>Zoom</a> factor is negative, it flips the image on both axes.
zoom :: MonadIO m => Surface -> Zoom -> Smooth -> m Surface

-- | Same as <a>zoom</a>, but applies different horizontal and vertical
--   scaling factors.
--   
--   If a <a>Zoom</a> factor is negative, it flips the image on its
--   corresponding axis.
zoomXY :: MonadIO m => Surface -> Zoom -> Zoom -> Smooth -> m Surface

-- | Calculates the <a>Size</a> of a resulting <a>Surface</a> for a
--   <a>zoom</a> call.
zoomSize :: MonadIO m => Size -> Zoom -> m Size

-- | Same as <a>zoomSize</a>, but for different horizontal and vertical
--   scaling factors.
zoomSizeXY :: MonadIO m => Size -> Angle -> Zoom -> m Size

-- | Shrink a surface by an integer ratio.
--   
--   The two <a>CInt</a> arguments are the horizontal and vertical
--   shrinking ratios: 2 halves a dimension, 5 makes it a fifth of its
--   original size etc.
--   
--   The resulting <a>Surface</a> is anti-aliased and, if the input wasn't
--   8-bit or 32-bit, converted to a 32-bit RGBA format.
shrink :: MonadIO m => Surface -> CInt -> CInt -> m Surface

-- | Given a number of clockwise rotations to perform, rotates
--   <a>Surface</a> in increments of 90 degrees.
--   
--   Since no interpolation is done, this is faster than
--   <tt>rotozoomer</tt>.
rotate90 :: MonadIO m => Surface -> Int -> m Surface
instance GHC.Show.Show SDL.Rotozoom.Smooth
instance GHC.Read.Read SDL.Rotozoom.Smooth
instance GHC.Generics.Generic SDL.Rotozoom.Smooth
instance GHC.Enum.Bounded SDL.Rotozoom.Smooth
instance GHC.Classes.Ord SDL.Rotozoom.Smooth
instance GHC.Enum.Enum SDL.Rotozoom.Smooth
instance GHC.Classes.Eq SDL.Rotozoom.Smooth
