{-# 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 }