51 lines
1.4 KiB
Haskell
51 lines
1.4 KiB
Haskell
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
|