packages feed

sdl2-cairo-image-1.0: src/Main.hs

{-# LANGUAGE OverloadedStrings #-}
module Main where

import qualified SDL
import SDL.Cairo (createCairoTexture)
import SDL.Cairo.Canvas
--
import Linear.V2 (V2(..))
--
import Data.Maybe (catMaybes)
import Control.Concurrent (threadDelay)
import Control.Monad (unless,void,mapM)
import Control.Monad.Fix (fix)
--
import qualified SDL.Cairo.Image as I
--
main :: IO ()
main = do
   --
   SDL.initialize [SDL.InitEverything]
   window   <- SDL.createWindow "Hello!" winConfig
   renderer <- SDL.createRenderer window (-1) rdrConfig
   texture  <- createCairoTexture renderer (V2 640 480)
   --
   -- img1 <- L.loadPNGRGBA "/Users/jaiyalas/img/xd.png"
   -- img2 <- L.loadPNGRGBA "/Users/jaiyalas/img/char.png"
   img3 <- I.loadRGBA8 I.PNG "./img/newton.png"
   img4 <- I.loadRGB8 I.PNG "./img/newton.png"
   --
   fix $ \loop -> do
         threadDelay 100000
         withCanvas texture $ do
            background $ gray 102
            I.renderImgCanvas (V2 10  50) img3
            I.renderImgCanvas (V2 10 200) img4
         -- R.drawImg  texture   (V2 50 120) img3
         -- R.drawImgC texture   (V2 50 220) img3
         SDL.copy renderer texture Nothing Nothing
         SDL.present renderer
         qb <- quitPredicate
         unless qb loop
--
-- ################################
--
quitPredicate :: IO Bool
quitPredicate = do
   events <- SDL.pollEvents
   return $ elem SDL.KeycodeEscape $ events2Kcodes events
--
events2Kcodes :: [SDL.Event] -> [SDL.Keycode]
events2Kcodes = catMaybes . map event2Kcode
--
event2Kcode :: SDL.Event -> Maybe SDL.Keycode
event2Kcode e = case SDL.eventPayload e of
   SDL.KeyboardEvent edata -> if isPressed edata
      then return $ getKeycode edata
      else Nothing
   otherwise -> Nothing
--
isPressed :: SDL.KeyboardEventData -> Bool
isPressed edata = SDL.keyboardEventKeyMotion edata == SDL.Pressed
--
getKeycode :: SDL.KeyboardEventData -> SDL.Keycode
getKeycode = SDL.keysymKeycode . SDL.keyboardEventKeysym
--
-- ##################################
--
winConfig = SDL.defaultWindow
   { SDL.windowPosition = SDL.Centered
   , SDL.windowInitialSize = V2 640 480
   }

rdrConfig = SDL.RendererConfig
   { SDL.rendererType = SDL.AcceleratedVSyncRenderer
   , SDL.rendererTargetTexture = True
   }