packages feed

animate-preview-0.0.0: library/Animate/Preview/SDLRenderer.hs

module Animate.Preview.SDLRenderer where

import qualified SDL
import Data.StateVar (($=))
import Control.Monad.IO.Class (MonadIO(..))
import Foreign.C.Types
import SDL.Vect
import Control.Monad (void)

class Monad m => SDLRenderer m where
  presentRenderer :: SDL.Renderer -> m ()
  default presentRenderer :: MonadIO m => SDL.Renderer -> m ()
  presentRenderer = SDL.present

  clearRenderer :: SDL.Renderer -> m ()
  default clearRenderer :: MonadIO m => SDL.Renderer -> m ()
  clearRenderer ren = do
    SDL.rendererDrawColor ren $= V4 0x00 0x00 0x00 0xff
    liftIO $ void $ SDL.clear ren

  queryTexture :: SDL.Texture -> m SDL.TextureInfo
  default queryTexture ::  MonadIO m => SDL.Texture -> m SDL.TextureInfo
  queryTexture = SDL.queryTexture

  drawTexture :: SDL.Renderer -> SDL.Texture -> Maybe (SDL.Rectangle CInt)-> Maybe (SDL.Rectangle CInt) -> m ()
  default drawTexture :: MonadIO m => SDL.Renderer -> SDL.Texture -> Maybe (SDL.Rectangle CInt) -> Maybe (SDL.Rectangle CInt) -> m ()
  drawTexture renderer tex maybeClip maybeLoc = SDL.copy renderer tex maybeClip maybeLoc