Skip to content

Commit 4dcb15a

Browse files
jshipdpwiz
authored andcommitted
Add rendererIntegerScale
1 parent 7d77a91 commit 4dcb15a

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

ChangeLog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2.5.X.Y
2+
=======
3+
4+
* Added `rendererIntegerScale`
5+
16
2.5.5.0
27
=======
38

src/SDL/Raw/Video.hs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,15 @@ module SDL.Raw.Video (
134134
renderGeometryRaw,
135135
#endif
136136
renderGetClipRect,
137+
renderGetIntegerScale,
137138
renderGetLogicalSize,
138139
renderGetScale,
139140
renderGetViewport,
140141
renderIsClipEnabled,
141142
renderPresent,
142143
renderReadPixels,
143144
renderSetClipRect,
145+
renderSetIntegerScale,
144146
renderSetLogicalSize,
145147
renderSetScale,
146148
renderSetViewport,
@@ -367,13 +369,15 @@ foreign import ccall "SDL.h SDL_RenderGeometryRaw" renderGeometryRawFFI :: Rende
367369
foreign import ccall "sqlhelper.c SDLHelper_RenderFillRectEx" renderFillRectExFFI :: Renderer -> CInt -> CInt -> CInt -> CInt -> IO CInt
368370
foreign import ccall "SDL.h SDL_RenderFillRects" renderFillRectsFFI :: Renderer -> Ptr Rect -> CInt -> IO CInt
369371
foreign import ccall "SDL.h SDL_RenderGetClipRect" renderGetClipRectFFI :: Renderer -> Ptr Rect -> IO ()
372+
foreign import ccall "SDL.h SDL_RenderGetIntegerScale" renderGetIntegerScaleFFI :: Renderer -> IO CInt
370373
foreign import ccall "SDL.h SDL_RenderGetLogicalSize" renderGetLogicalSizeFFI :: Renderer -> Ptr CInt -> Ptr CInt -> IO ()
371374
foreign import ccall "SDL.h SDL_RenderGetScale" renderGetScaleFFI :: Renderer -> Ptr CFloat -> Ptr CFloat -> IO ()
372375
foreign import ccall "SDL.h SDL_RenderGetViewport" renderGetViewportFFI :: Renderer -> Ptr Rect -> IO ()
373376
foreign import ccall "SDL.h SDL_RenderIsClipEnabled" renderIsClipEnabledFFI :: Renderer -> IO Bool
374377
foreign import ccall "SDL.h SDL_RenderPresent" renderPresentFFI :: Renderer -> IO ()
375378
foreign import ccall "SDL.h SDL_RenderReadPixels" renderReadPixelsFFI :: Renderer -> Ptr Rect -> Word32 -> Ptr () -> CInt -> IO CInt
376379
foreign import ccall "SDL.h SDL_RenderSetClipRect" renderSetClipRectFFI :: Renderer -> Ptr Rect -> IO CInt
380+
foreign import ccall "SDL.h SDL_RenderSetIntegerScale" renderSetIntegerScaleFFI :: Renderer -> CInt -> IO CInt
377381
foreign import ccall "SDL.h SDL_RenderSetLogicalSize" renderSetLogicalSizeFFI :: Renderer -> CInt -> CInt -> IO CInt
378382
foreign import ccall "SDL.h SDL_RenderSetScale" renderSetScaleFFI :: Renderer -> CFloat -> CFloat -> IO CInt
379383
foreign import ccall "SDL.h SDL_RenderSetViewport" renderSetViewportFFI :: Renderer -> Ptr Rect -> IO CInt
@@ -967,6 +971,10 @@ renderGetClipRect :: MonadIO m => Renderer -> Ptr Rect -> m ()
967971
renderGetClipRect v1 v2 = liftIO $ renderGetClipRectFFI v1 v2
968972
{-# INLINE renderGetClipRect #-}
969973

974+
renderGetIntegerScale :: MonadIO m => Renderer -> m CInt
975+
renderGetIntegerScale v1 = liftIO $ renderGetIntegerScaleFFI v1
976+
{-# INLINE renderGetIntegerScale #-}
977+
970978
renderGetLogicalSize :: MonadIO m => Renderer -> Ptr CInt -> Ptr CInt -> m ()
971979
renderGetLogicalSize v1 v2 v3 = liftIO $ renderGetLogicalSizeFFI v1 v2 v3
972980
{-# INLINE renderGetLogicalSize #-}
@@ -995,6 +1003,10 @@ renderSetClipRect :: MonadIO m => Renderer -> Ptr Rect -> m CInt
9951003
renderSetClipRect v1 v2 = liftIO $ renderSetClipRectFFI v1 v2
9961004
{-# INLINE renderSetClipRect #-}
9971005

1006+
renderSetIntegerScale :: MonadIO m => Renderer -> CInt -> m CInt
1007+
renderSetIntegerScale v1 v2 = liftIO $ renderSetIntegerScaleFFI v1 v2
1008+
{-# INLINE renderSetIntegerScale #-}
1009+
9981010
renderSetLogicalSize :: MonadIO m => Renderer -> CInt -> CInt -> m CInt
9991011
renderSetLogicalSize v1 v2 v3 = liftIO $ renderSetLogicalSizeFFI v1 v2 v3
10001012
{-# INLINE renderSetLogicalSize #-}

src/SDL/Video/Renderer.hs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ module SDL.Video.Renderer
5555
, rendererDrawColor
5656
, rendererRenderTarget
5757
, rendererClipRect
58+
, rendererIntegerScale
5859
, rendererLogicalSize
5960
, rendererScale
6061
, rendererViewport
@@ -133,6 +134,7 @@ module SDL.Video.Renderer
133134
, getRenderDriverInfo
134135
) where
135136

137+
import Control.Monad (void)
136138
import Control.Monad.IO.Class (MonadIO, liftIO)
137139
import Data.Bits
138140
import Data.Data (Data)
@@ -1337,7 +1339,24 @@ rendererRenderTarget (Renderer r) = makeStateVar getRenderTarget setRenderTarget
13371339
Nothing -> Raw.setRenderTarget r nullPtr
13381340
Just (Texture t) -> Raw.setRenderTarget r t
13391341

1340-
-- | Get or set the device independent resolution for rendering.
1342+
-- | Get or set whether to force integer scales for resolution-independent rendering.
1343+
-- It may be desirable to enable integer scales when using device independent resolution
1344+
-- via 'rendererLogicalSize' so that pixel sizing is consistent.
1345+
--
1346+
-- This 'StateVar' can be modified using '$=' and the current value retrieved with 'get'.
1347+
--
1348+
-- See @<https://wiki.libsdl.org/SDL_RenderSetIntegerScale SDL_RenderSetIntegerScale>@ and @<https://wiki.libsdl.org/SDL_RenderGetIntegerScale SDL_RenderGetIntegerScale>@ for C documentation.
1349+
rendererIntegerScale :: Renderer -> StateVar Bool
1350+
rendererIntegerScale (Renderer r) = makeStateVar renderGetIntegerScale renderSetIntegerScale
1351+
where
1352+
renderGetIntegerScale = (== 1) <$> Raw.renderGetIntegerScale r
1353+
1354+
renderSetIntegerScale True = void $ Raw.renderSetIntegerScale r 1
1355+
renderSetIntegerScale False = void $ Raw.renderSetIntegerScale r 0
1356+
1357+
-- | Get or set the device independent resolution for rendering. When using this setting,
1358+
-- it may be desirable to also enable integer scales via 'rendererIntegerScale' so that
1359+
-- pixel sizing is consistent.
13411360
--
13421361
-- This 'StateVar' can be modified using '$=' and the current value retrieved with 'get'.
13431362
--

0 commit comments

Comments
 (0)