packages feed

sdl2-gfx-0.2: src/SDL/Raw/Rotozoom.hsc

{-|

Module      : SDL.Raw.Rotozoom
Copyright   : (c) 2015 Siniša Biđin
License     : MIT
Maintainer  : sinisa@bidin.eu
Stability   : experimental

Raw bindings to the @SDL2_gfx@ library, specifically the surface rotation and
zoom functionality from @SDL2_rotozoom.h@.

-}

{-# OPTIONS_GHC -fno-warn-missing-signatures #-}

{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TemplateHaskell #-}

module SDL.Raw.Rotozoom
  ( pattern SMOOTHING_ON
  , pattern SMOOTHING_OFF
  , rotozoom
  , rotozoomXY
  , rotozoomSize
  , rotozoomSizeXY
  , zoom
  , zoomSize
  , shrink
  , rotate90
  ) where

#include "SDL2_rotozoom.h"

import Foreign.C.Types (CDouble(..), CInt(..))
import Foreign.Ptr     (Ptr)
import SDL.Raw.Helper  (liftF)
import SDL.Raw.Types   (Surface(..))

pattern SMOOTHING_OFF = (#const SMOOTHING_OFF)
pattern SMOOTHING_ON  = (#const SMOOTHING_ON)

liftF "rotozoom" "rotozoomSurface"
  [t|Ptr Surface -> CDouble -> CDouble -> CInt -> IO (Ptr Surface)|]

liftF "rotozoomXY" "rotozoomSurfaceXY"
  [t|Ptr Surface -> CDouble -> CDouble -> CDouble -> CInt -> IO (Ptr Surface)|]

liftF "rotozoomSize" "rotozoomSize"
  [t|CInt -> CInt -> CDouble -> CDouble -> Ptr CInt -> Ptr CInt -> IO ()|]

liftF "rotozoomSizeXY" "rotozoomSizeXY"
  [t|CInt -> CInt -> CDouble -> CDouble -> CDouble -> Ptr CInt -> Ptr CInt -> IO ()|]

liftF "zoom" "zoomSurface"
  [t|Ptr Surface -> CDouble -> CDouble -> CInt -> IO (Ptr Surface)|]

liftF "zoomSize" "zoomSize"
  [t|CInt -> CInt -> CDouble -> CDouble -> Ptr CInt -> Ptr CInt -> IO ()|]

liftF "shrink" "shrinkSurface"
  [t|Ptr Surface -> CInt -> CInt -> IO (Ptr Surface)|]

liftF "rotate90" "rotateSurface90Degrees"
  [t|Ptr Surface -> CInt -> IO (Ptr Surface)|]