module Main where import qualified SDL import qualified SDL.Raw.Video as SDL (glSetAttribute) import qualified SDL.Raw.Enum as SDL import Linear import Options.Applicative import Control.Monad import qualified Data.Text as T -- internal imports import Util import Types main :: IO () main = do opts <- execParser $ info (options <**> helper) ( fullDesc <> progDesc "A simple PDF presenter written in Haskell using poppler and SDL2" ) SDL.initializeAll SDL.screenSaverEnabled SDL.$= False disps <- SDL.getDisplays putStrLn ("Number of displays detected: " ++ show (length disps)) putStrLn ("Passed command line options: " ++ show opts) -- set Render quality SDL.HintRenderScaleQuality SDL.$= SDL.ScaleLinear -- check render quality renderQuality <- SDL.get SDL.HintRenderScaleQuality when (renderQuality /= SDL.ScaleLinear) $ putErrLn "Linear texture filtering not enabled!" putStrLn "Creating window(s)" wins <- zip ([0 .. ] :: [Word]) <$> mapM (uncurry SDL.createWindow) ( zip [ "Ibis - " <> optFile opts , "Ibis - " <> optFile opts <> " - Notes" ] (map makeWindowConfig disps) ) when (optFullscreen opts) $ mapM_ (flip SDL.setWindowMode SDL.FullscreenDesktop . snd) wins void $ SDL.glSetAttribute SDL.SDL_GL_SHARE_WITH_CURRENT_CONTEXT 1 contexts <- zip (map fst wins) <$> mapM (SDL.glCreateContext . snd) wins mapM_ (SDL.showWindow . snd) wins