module GUI where import Control.Monad.Trans import Control.Monad.Trans.Maybe import Graphics.UI.SDL import Viewer data GUI = GUI { guiZoomArea :: Surface } createGUI :: Viewer -> MaybeT IO GUI createGUI v = do zoomArea <- tryCreateZoomArea v return $ GUI zoomArea -- This function creates a Surface according to the mouse position. tryCreateZoomArea :: Viewer -> MaybeT IO Surface tryCreateZoomArea v = do let rw = floor $ viewerWidth v / zf rh = floor $ viewerHeight v / zf zf = viewerZoomf v zoomArea <- MaybeT $ tryCreateRGBSurface [HWSurface] rw rh 32 0 0 0 0 lift $ setAlpha zoomArea [SrcAlpha] 127 -- TODO: Bool, what for? pixel <- lift $ mapRGB (surfaceGetPixelFormat zoomArea) 60 60 60 lift $ fillRect zoomArea Nothing pixel return zoomArea -- This function updates the zoom area according to the mouse position -- and the zoom factor. updateGUIZoomArea :: GUI -> Viewer -> IO GUI updateGUIZoomArea gui v = do maybeZoomArea <- runMaybeT $ tryCreateZoomArea v case maybeZoomArea of Nothing -> return gui Just zoomArea -> do --freeSurface $ guiZoomArea gui return gui { guiZoomArea = zoomArea }