{-# LINE 1 "src/SDL/Raw/Image.hsc" #-}
{-|

Module      : SDL.Raw.Image
Copyright   : (c) 2015 Siniša Biđin, 2021 Daniel Firth
License     : MIT
Maintainer  : sinisa@bidin.eu, dan.firth@homotopic.tech
Stability   : experimental

Raw bindings to the @SDL2_image@ library. No error-handling is done here. For
more information about specific function behaviour, see the @SDL2_image@
documentation.

-}

{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
{-# OPTIONS_GHC -fno-warn-missing-exported-signatures #-}
{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
{-# OPTIONS_GHC -fno-warn-missing-local-signatures #-}
{-# OPTIONS_GHC -fno-warn-missing-pattern-synonym-signatures #-}

{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TemplateHaskell #-}

module SDL.Raw.Image
  (
  -- * Loading images
    Free
  , load
  , load_RW
  , Format
  , loadTyped_RW
  , loadCUR_RW
  , loadICO_RW
  , loadBMP_RW
  , loadPNM_RW
  , loadXPM_RW
  , loadXCF_RW
  , loadPCX_RW
  , loadGIF_RW
  , loadJPG_RW
  , loadTIF_RW
  , loadPNG_RW
  , loadTGA_RW
  , loadLBM_RW
  , loadXV_RW
  , loadWEBP_RW

  -- * Testing for formats
  , isCUR
  , isICO
  , isBMP
  , isPNM
  , isXPM
  , isXCF
  , isPCX
  , isGIF
  , isJPG
  , isTIF
  , isPNG
  , isLBM
  , isXV
  , isWEBP

  -- * Other
  , InitFlags
  , pattern IMG_INIT_JPG
  , pattern IMG_INIT_PNG
  , pattern IMG_INIT_TIF
  , pattern IMG_INIT_WEBP
  , init
  , getVersion
  , quit
  ) where



import Foreign.C.String       (CString)
import Foreign.C.Types        (CInt(..))
import Foreign.Ptr            (Ptr)
import Prelude         hiding (init)
import SDL.Raw.Types          (Version, Surface, RWops)
import SDL.Raw.Helper         (liftF)

liftF "getVersion" "IMG_Linked_Version"
  [t|IO (Ptr Version)|]

type InitFlags = CInt

pattern $mIMG_INIT_JPG :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bIMG_INIT_JPG :: forall {a}. (Eq a, Num a) => a
IMG_INIT_JPG  = 1
{-# LINE 90 "src/SDL/Raw/Image.hsc" #-}
pattern IMG_INIT_PNG  = 2
{-# LINE 91 "src/SDL/Raw/Image.hsc" #-}
pattern IMG_INIT_TIF  = 4
{-# LINE 92 "src/SDL/Raw/Image.hsc" #-}
pattern IMG_INIT_WEBP = 8
{-# LINE 93 "src/SDL/Raw/Image.hsc" #-}

liftF "init" "IMG_Init"
  [t|InitFlags -> IO InitFlags|]

liftF "quit" "IMG_Quit"
  [t|IO ()|]

liftF "load" "IMG_Load"
  [t|CString -> IO (Ptr Surface)|]

-- | Should the 'Ptr' 'RWops' be freed after an operation? 1 for yes, 0 for no.
type Free = CInt

liftF "load_RW" "IMG_Load_RW"
  [t|Ptr RWops -> Free -> IO (Ptr Surface)|]

-- | A case-insensitive desired format, e.g. @\"jpg\"@ or @\"PNG\"@.
type Format = CString

liftF "loadTyped_RW" "IMG_LoadTyped_RW"
  [t|Ptr RWops -> Free -> Format -> IO (Ptr Surface)|]

liftF "loadCUR_RW"  "IMG_LoadCUR_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadICO_RW"  "IMG_LoadICO_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadBMP_RW"  "IMG_LoadBMP_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadPNM_RW"  "IMG_LoadPNM_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadXPM_RW"  "IMG_LoadXPM_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadXCF_RW"  "IMG_LoadXCF_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadPCX_RW"  "IMG_LoadPCX_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadGIF_RW"  "IMG_LoadGIF_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadJPG_RW"  "IMG_LoadJPG_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadTIF_RW"  "IMG_LoadTIF_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadPNG_RW"  "IMG_LoadPNG_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadTGA_RW"  "IMG_LoadTGA_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadLBM_RW"  "IMG_LoadLBM_RW"  [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadXV_RW"   "IMG_LoadXV_RW"   [t|Ptr RWops -> IO (Ptr Surface)|]
liftF "loadWEBP_RW" "IMG_LoadWEBP_RW" [t|Ptr RWops -> IO (Ptr Surface)|]

liftF "isCUR"  "IMG_isCUR"  [t|Ptr RWops -> IO CInt|]
liftF "isICO"  "IMG_isICO"  [t|Ptr RWops -> IO CInt|]
liftF "isBMP"  "IMG_isBMP"  [t|Ptr RWops -> IO CInt|]
liftF "isPNM"  "IMG_isPNM"  [t|Ptr RWops -> IO CInt|]
liftF "isXPM"  "IMG_isXPM"  [t|Ptr RWops -> IO CInt|]
liftF "isXCF"  "IMG_isXCF"  [t|Ptr RWops -> IO CInt|]
liftF "isPCX"  "IMG_isPCX"  [t|Ptr RWops -> IO CInt|]
liftF "isGIF"  "IMG_isGIF"  [t|Ptr RWops -> IO CInt|]
liftF "isJPG"  "IMG_isJPG"  [t|Ptr RWops -> IO CInt|]
liftF "isTIF"  "IMG_isTIF"  [t|Ptr RWops -> IO CInt|]
liftF "isPNG"  "IMG_isPNG"  [t|Ptr RWops -> IO CInt|]
liftF "isLBM"  "IMG_isLBM"  [t|Ptr RWops -> IO CInt|]
liftF "isXV"   "IMG_isXV"   [t|Ptr RWops -> IO CInt|]
liftF "isWEBP" "IMG_isWEBP" [t|Ptr RWops -> IO CInt|]