Skip to content

Commit bb077e3

Browse files
committed
Add windowOpacity
1 parent 38082d7 commit bb077e3

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/SDL/Raw/Video.hs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ module SDL.Raw.Video (
5252
getWindowID,
5353
getWindowMaximumSize,
5454
getWindowMinimumSize,
55+
getWindowOpacity,
5556
getWindowPixelFormat,
5657
getWindowPosition,
5758
getWindowSize,
@@ -73,6 +74,7 @@ module SDL.Raw.Video (
7374
setWindowIcon,
7475
setWindowMaximumSize,
7576
setWindowMinimumSize,
77+
setWindowOpacity,
7678
setWindowPosition,
7779
setWindowSize,
7880
setWindowTitle,
@@ -282,6 +284,7 @@ foreign import ccall "SDL.h SDL_GetWindowGrab" getWindowGrabFFI :: Window -> IO
282284
foreign import ccall "SDL.h SDL_GetWindowID" getWindowIDFFI :: Window -> IO Word32
283285
foreign import ccall "SDL.h SDL_GetWindowMaximumSize" getWindowMaximumSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()
284286
foreign import ccall "SDL.h SDL_GetWindowMinimumSize" getWindowMinimumSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()
287+
foreign import ccall "SDL.h SDL_GetWindowOpacity" getWindowOpacityFFI :: Window -> Ptr CFloat -> IO ()
285288
foreign import ccall "SDL.h SDL_GetWindowPixelFormat" getWindowPixelFormatFFI :: Window -> IO Word32
286289
foreign import ccall "SDL.h SDL_GetWindowPosition" getWindowPositionFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()
287290
foreign import ccall "SDL.h SDL_GetWindowSize" getWindowSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()
@@ -303,6 +306,7 @@ foreign import ccall "SDL.h SDL_SetWindowGrab" setWindowGrabFFI :: Window -> Boo
303306
foreign import ccall "SDL.h SDL_SetWindowIcon" setWindowIconFFI :: Window -> Ptr Surface -> IO ()
304307
foreign import ccall "SDL.h SDL_SetWindowMaximumSize" setWindowMaximumSizeFFI :: Window -> CInt -> CInt -> IO ()
305308
foreign import ccall "SDL.h SDL_SetWindowMinimumSize" setWindowMinimumSizeFFI :: Window -> CInt -> CInt -> IO ()
309+
foreign import ccall "SDL.h SDL_SetWindowOpacity" setWindowOpacityFFI :: Window -> CFloat -> IO ()
306310
foreign import ccall "SDL.h SDL_SetWindowPosition" setWindowPositionFFI :: Window -> CInt -> CInt -> IO ()
307311
foreign import ccall "SDL.h SDL_SetWindowSize" setWindowSizeFFI :: Window -> CInt -> CInt -> IO ()
308312
foreign import ccall "SDL.h SDL_SetWindowTitle" setWindowTitleFFI :: Window -> CString -> IO ()
@@ -643,6 +647,10 @@ getWindowMinimumSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m ()
643647
getWindowMinimumSize v1 v2 v3 = liftIO $ getWindowMinimumSizeFFI v1 v2 v3
644648
{-# INLINE getWindowMinimumSize #-}
645649

650+
getWindowOpacity :: MonadIO m => Window -> Ptr CFloat -> m ()
651+
getWindowOpacity v1 v2 = liftIO $ getWindowOpacityFFI v1 v2
652+
{-# INLINE getWindowOpacity #-}
653+
646654
getWindowPixelFormat :: MonadIO m => Window -> m Word32
647655
getWindowPixelFormat v1 = liftIO $ getWindowPixelFormatFFI v1
648656
{-# INLINE getWindowPixelFormat #-}
@@ -727,6 +735,10 @@ setWindowMinimumSize :: MonadIO m => Window -> CInt -> CInt -> m ()
727735
setWindowMinimumSize v1 v2 v3 = liftIO $ setWindowMinimumSizeFFI v1 v2 v3
728736
{-# INLINE setWindowMinimumSize #-}
729737

738+
setWindowOpacity :: MonadIO m => Window -> CFloat -> m ()
739+
setWindowOpacity v1 v2 = liftIO $ setWindowOpacityFFI v1 v2
740+
{-# INLINE setWindowOpacity #-}
741+
730742
setWindowPosition :: MonadIO m => Window -> CInt -> CInt -> m ()
731743
setWindowPosition v1 v2 v3 = liftIO $ setWindowPositionFFI v1 v2 v3
732744
{-# INLINE setWindowPosition #-}

src/SDL/Video.hs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ module SDL.Video
2525
-- * Window Attributes
2626
, windowMinimumSize
2727
, windowMaximumSize
28+
, windowOpacity
2829
, windowSize
2930
, windowBordered
3031
, windowBrightness
@@ -611,6 +612,22 @@ windowMinimumSize (Window win) = makeStateVar getWindowMinimumSize setWindowMini
611612
Raw.getWindowMinimumSize win wptr hptr
612613
V2 <$> peek wptr <*> peek hptr
613614

615+
-- | Get or set the opacity of a window.
616+
--
617+
-- This 'StateVar' can be modified using '$=' and the current value retrieved with 'get'.
618+
--
619+
-- See @<https://wiki.libsdl.org/SDL_SetWindowOpacity SDL_SetWindowOpacity>@ and @<https://wiki.libsdl.org/SDL_GetWindowOpacity SDL_GetWindowOpacity>@ for C documentation.
620+
windowOpacity :: Window -> StateVar CFloat
621+
windowOpacity (Window win) = makeStateVar getWindowOpacity setWindowOpacity
622+
where
623+
setWindowOpacity opacity = Raw.setWindowOpacity win opacity
624+
625+
getWindowOpacity =
626+
liftIO $
627+
alloca $ \optr -> do
628+
Raw.getWindowOpacity win optr
629+
peek optr
630+
614631
createRenderer :: MonadIO m => Window -> CInt -> RendererConfig -> m Renderer
615632
createRenderer (Window w) driver config =
616633
liftIO . fmap Renderer $

0 commit comments

Comments
 (0)