-- GENERATED by C->Haskell Compiler, version 0.28.6 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}
{-# LANGUAGE CPP, ExistentialQuantification, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, ScopedTypeVariables #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Graphics.UI.FLTK.LowLevel.Image
       (
       ImageFail(..),
       ImageFuncs(..),
       defaultImageFuncs,
       imageNew,
       CustomColorAverage,
       CustomImageDraw,
       CustomImageCopy,
       toCustomImageDrawPrim,
       toCustomColorAveragePrim,
       toCustomImageCopyPrim
       -- * Hierarchy
       --
       -- $hierarchy

       -- * Functions
       --
       -- $functions
       )
where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import qualified Foreign.Storable as C2HSImp





import C2HS hiding (cFromEnum, cFromBool, cToBool,cToEnum)
import Graphics.UI.FLTK.LowLevel.Fl_Enumerations
import Graphics.UI.FLTK.LowLevel.Fl_Types
import Graphics.UI.FLTK.LowLevel.Utils
import Graphics.UI.FLTK.LowLevel.Hierarchy
import Graphics.UI.FLTK.LowLevel.Dispatch

-- | Only available on FLTK version 1.3.4 and above.
data ImageFail = ImageErrFormat
               | ImageErrFileAccess
               | ImageErrNoImage
  deriving (Int -> ImageFail -> ShowS
[ImageFail] -> ShowS
ImageFail -> String
(Int -> ImageFail -> ShowS)
-> (ImageFail -> String)
-> ([ImageFail] -> ShowS)
-> Show ImageFail
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ImageFail] -> ShowS
$cshowList :: [ImageFail] -> ShowS
show :: ImageFail -> String
$cshow :: ImageFail -> String
showsPrec :: Int -> ImageFail -> ShowS
$cshowsPrec :: Int -> ImageFail -> ShowS
Show,ImageFail -> ImageFail -> Bool
(ImageFail -> ImageFail -> Bool)
-> (ImageFail -> ImageFail -> Bool) -> Eq ImageFail
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ImageFail -> ImageFail -> Bool
$c/= :: ImageFail -> ImageFail -> Bool
== :: ImageFail -> ImageFail -> Bool
$c== :: ImageFail -> ImageFail -> Bool
Eq,Eq ImageFail
Eq ImageFail =>
(ImageFail -> ImageFail -> Ordering)
-> (ImageFail -> ImageFail -> Bool)
-> (ImageFail -> ImageFail -> Bool)
-> (ImageFail -> ImageFail -> Bool)
-> (ImageFail -> ImageFail -> Bool)
-> (ImageFail -> ImageFail -> ImageFail)
-> (ImageFail -> ImageFail -> ImageFail)
-> Ord ImageFail
ImageFail -> ImageFail -> Bool
ImageFail -> ImageFail -> Ordering
ImageFail -> ImageFail -> ImageFail
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ImageFail -> ImageFail -> ImageFail
$cmin :: ImageFail -> ImageFail -> ImageFail
max :: ImageFail -> ImageFail -> ImageFail
$cmax :: ImageFail -> ImageFail -> ImageFail
>= :: ImageFail -> ImageFail -> Bool
$c>= :: ImageFail -> ImageFail -> Bool
> :: ImageFail -> ImageFail -> Bool
$c> :: ImageFail -> ImageFail -> Bool
<= :: ImageFail -> ImageFail -> Bool
$c<= :: ImageFail -> ImageFail -> Bool
< :: ImageFail -> ImageFail -> Bool
$c< :: ImageFail -> ImageFail -> Bool
compare :: ImageFail -> ImageFail -> Ordering
$ccompare :: ImageFail -> ImageFail -> Ordering
$cp1Ord :: Eq ImageFail
Ord)
instance Enum ImageFail where
  succ ImageErrFormat = ImageErrFileAccess
  succ ImageErrFileAccess = ImageErrNoImage
  succ ImageErrNoImage = error "ImageFail.succ: ImageErrNoImage has no successor"

  pred ImageErrFileAccess = ImageErrFormat
  pred ImageErrNoImage = ImageErrFileAccess
  pred ImageErrFormat = error "ImageFail.pred: ImageErrFormat has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from ImageErrNoImage

  fromEnum ImageErrFormat = (-3)
  fromEnum ImageErrFileAccess = (-2)
  fromEnum ImageErrNoImage = (-1)

  toEnum :: Int -> ImageFail
toEnum (-3) = ImageFail
ImageErrFormat
  toEnum (-2) = ImageErrFileAccess
  toEnum (-1) = ImageFail
ImageErrNoImage
  toEnum unmatched :: Int
unmatched = String -> ImageFail
forall a. HasCallStack => String -> a
error ("ImageFail.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 41 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}


type CustomColorAverage        = Ref Image -> Color -> Float -> IO ()
type CustomImageDraw           = Ref Image -> Position -> Size -> Maybe X -> Maybe Y -> IO ()
type CustomImageCopy           = Ref Image -> Size -> IO (Ref Image)
toCustomImageDrawPrim :: CustomImageDraw -> IO (FunPtr CustomImageDrawPrim)
toCustomImageDrawPrim f =
    mkCustomImageDrawPrimPtr
    (\ptr x_pos' y_pos' width' height' x_offset' y_offset' ->
       let _x_offset = fmap X $ integralToMaybe x_offset'
           _y_offset = fmap Y $ integralToMaybe y_offset'
           position' = Position (X $ fromIntegral x_pos')
                                (Y $ fromIntegral y_pos')
           size' = Size (Width $ fromIntegral width')
                        (Height $ fromIntegral height')
       in
        toRef ptr >>= \refPtr -> f refPtr position' size' _x_offset _y_offset
    )

toCustomColorAveragePrim :: CustomColorAverage -> IO (FunPtr CustomColorAveragePrim)
toCustomColorAveragePrim f =
    mkCustomColorAveragePtr
    (\ptr cint cfloat ->
         wrapNonNull ptr "Null pointer. toCustomColorAveragePrim" >>= \pp ->
         f (wrapInRef pp) (Color (fromIntegral cint)) (realToFrac cfloat)
    )

toCustomImageCopyPrim :: CustomImageCopy -> IO (FunPtr CustomImageCopyPrim)
toCustomImageCopyPrim f =
    mkCustomImageCopyPrimPtr
    (\ptr width' height' -> do
         pp <- wrapNonNull ptr "Null pointer. toCustomImageCopyPrim"
         refPtr <- f (wrapInRef pp) (Size (Width $ fromIntegral width')
                                           (Height $ fromIntegral height'))
         unsafeRefToPtr refPtr
    )


data ImageFuncs a b =
  ImageFuncs
  {
    ImageFuncs a b -> Maybe CustomImageDraw
imageDrawOverride  :: Maybe (CustomImageDraw),
    ImageFuncs a b -> Maybe CustomColorAverage
imageColorAverageOverride :: Maybe (CustomColorAverage),
    ImageFuncs a b -> Maybe CustomImageCopy
imageCopyOverride :: Maybe (CustomImageCopy),
    ImageFuncs a b -> Maybe (Ref Image -> IO ())
imageDesaturateOverride :: Maybe (Ref Image -> IO ()),
    ImageFuncs a b -> Maybe (Ref Image -> IO ())
imageUncacheOverride :: Maybe (Ref Image -> IO ())
  }

virtualFuncs' :: IO ((Ptr ()))
virtualFuncs' :: IO (Ptr ())
virtualFuncs' =
  IO (Ptr ())
virtualFuncs''_ IO (Ptr ()) -> (Ptr () -> IO (Ptr ())) -> IO (Ptr ())
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: Ptr ()
res ->
  let {res' :: Ptr ()
res' = Ptr () -> Ptr ()
forall a. a -> a
id Ptr ()
res} in
  Ptr () -> IO (Ptr ())
forall (m :: * -> *) a. Monad m => a -> m a
return (Ptr ()
res')

{-# LINE 89 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

imageFunctionStruct :: (ImageFuncs a b) -> IO (Ptr ())
imageFunctionStruct funcs = do
  p <- virtualFuncs'
  toCustomImageDrawPrim `orNullFunPtr` (imageDrawOverride funcs) >>=
                            (\ptr val -> do {C2HSImp.pokeByteOff ptr 24 (val :: (C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ()))))))))))}) p
  toCustomColorAveragePrim `orNullFunPtr` (imageColorAverageOverride funcs) >>=
                            (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: (C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (C2HSImp.CUInt -> (C2HSImp.CFloat -> (IO ()))))))}) p
  toCustomImageCopyPrim `orNullFunPtr` (imageCopyOverride funcs) >>=
                            (\ptr val -> do {C2HSImp.pokeByteOff ptr 8 (FunPtr CustomImageCopyPrim
val :: (C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO (C2HSImp.Ptr ())))))))}) Ptr ()
p
  (Ref Image -> IO ()) -> IO (FunPtr (Ptr () -> IO ()))
forall a. (Ref a -> IO ()) -> IO (FunPtr (Ptr () -> IO ()))
toCallbackPrim ((Ref Image -> IO ()) -> IO (FunPtr (Ptr () -> IO ())))
-> Maybe (Ref Image -> IO ()) -> IO (FunPtr (Ptr () -> IO ()))
forall a b. (a -> IO (FunPtr b)) -> Maybe a -> IO (FunPtr b)
`orNullFunPtr` (ImageFuncs a b -> Maybe (Ref Image -> IO ())
forall a b. ImageFuncs a b -> Maybe (Ref Image -> IO ())
imageDesaturateOverride ImageFuncs a b
funcs) IO (FunPtr (Ptr () -> IO ()))
-> (FunPtr (Ptr () -> IO ()) -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
                            (\ptr :: Ptr ()
ptr val :: FunPtr (Ptr () -> IO ())
val -> do {Ptr () -> Int -> FunPtr (Ptr () -> IO ()) -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr ()
ptr 16 (FunPtr (Ptr () -> IO ())
val :: (C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))))}) Ptr ()
p
  (Ref Image -> IO ()) -> IO (FunPtr (Ptr () -> IO ()))
forall a. (Ref a -> IO ()) -> IO (FunPtr (Ptr () -> IO ()))
toCallbackPrim ((Ref Image -> IO ()) -> IO (FunPtr (Ptr () -> IO ())))
-> Maybe (Ref Image -> IO ()) -> IO (FunPtr (Ptr () -> IO ()))
forall a b. (a -> IO (FunPtr b)) -> Maybe a -> IO (FunPtr b)
`orNullFunPtr` (ImageFuncs a b -> Maybe (Ref Image -> IO ())
forall a b. ImageFuncs a b -> Maybe (Ref Image -> IO ())
imageUncacheOverride ImageFuncs a b
funcs) IO (FunPtr (Ptr () -> IO ()))
-> (FunPtr (Ptr () -> IO ()) -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
                            (\ptr :: Ptr ()
ptr val :: FunPtr (Ptr () -> IO ())
val -> do {Ptr () -> Int -> FunPtr (Ptr () -> IO ()) -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr ()
ptr 32 (FunPtr (Ptr () -> IO ())
val :: (C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))))}) Ptr ()
p
  Ptr () -> IO (Ptr ())
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr ()
p

defaultImageFuncs :: ImageFuncs a b
defaultImageFuncs :: ImageFuncs a b
defaultImageFuncs = Maybe CustomImageDraw
-> Maybe CustomColorAverage
-> Maybe CustomImageCopy
-> Maybe (Ref Image -> IO ())
-> Maybe (Ref Image -> IO ())
-> ImageFuncs a b
forall a b.
Maybe CustomImageDraw
-> Maybe CustomColorAverage
-> Maybe CustomImageCopy
-> Maybe (Ref Image -> IO ())
-> Maybe (Ref Image -> IO ())
-> ImageFuncs a b
ImageFuncs Maybe CustomImageDraw
forall a. Maybe a
Nothing Maybe CustomColorAverage
forall a. Maybe a
Nothing Maybe CustomImageCopy
forall a. Maybe a
Nothing Maybe (Ref Image -> IO ())
forall a. Maybe a
Nothing Maybe (Ref Image -> IO ())
forall a. Maybe a
Nothing

flImageNew' :: (Int) -> (Int) -> (Int) -> IO ((Ptr ()))
flImageNew' :: Int -> Int -> Int -> IO (Ptr ())
flImageNew' a1 :: Int
a1 a2 :: Int
a2 a3 :: Int
a3 =
  let {a1' :: CInt
a1' = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a1} in 
  let {a2' :: CInt
a2' = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a2} in 
  let {a3' :: CInt
a3' = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a2 :: Int
a3 :: Int
a3} in 
  CInt -> CInt -> CInt -> IO (Ptr ())
flImageNew''_ CInt
a1' CInt
a2' CInt
a3' IO (Ptr ()) -> (Ptr () -> IO (Ptr ())) -> IO (Ptr ())
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: Ptr ()
res ->
  let {res' :: Ptr ()
res' = Ptr () -> Ptr ()
forall a. a -> a
id Ptr ()
res} in
  Ptr () -> IO (Ptr ())
forall (m :: * -> *) a. Monad m => a -> m a
return (Ptr ()
res')

{-# LINE 108 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

flOverriddenImageNew' :: (Int) -> (Int) -> (Int) -> (Ptr ()) -> IO ((Ptr ()))
flOverriddenImageNew' a1 a2 a3 a4 =
  let {a1' = fromIntegral a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = id a4} in 
  flOverriddenImageNew''_ a1' a2' a3' a4' >>= \res ->
  let {res' = id res} in
  return (res')

{-# LINE 109 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

imageNew :: Size -> Depth -> Maybe (ImageFuncs a b) -> IO (Ref Image)
imageNew (Size (Width width') (Height height')) (Depth depth') funcs =
  case funcs of
    Just fs -> do
            fptr <- imageFunctionStruct fs
            obj <- flOverriddenImageNew' width' height' depth' (castPtr fptr)
            toRef obj
    Nothing -> flImageNew' width' height' depth' >>= toRef


flImageDestroy' :: (Ptr ()) -> IO ((()))
flImageDestroy' :: Ptr () -> IO ()
flImageDestroy' a1 :: Ptr ()
a1 =
  let {a1' = id a1} in 
  Ptr () -> IO ()
flImageDestroy''_ Ptr ()
a1' IO () -> (() -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: ()
res ->
  let {res' :: ()
res' = () -> ()
forall a. a -> a
id ()
res} in
  () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return (()
res')

{-# LINE 120 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ (IO ())) => Op (Destroy ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> flImageDestroy' imagePtr
w' :: (Ptr ()) -> IO ((Int))
w' :: Ptr () -> IO Int
w' a1 :: Ptr ()
a1 =
  let {a1' :: Ptr ()
a1' = Ptr () -> Ptr ()
forall a. a -> a
id Ptr ()
a1} in 
  Ptr () -> IO CInt
w''_ Ptr ()
a1' IO CInt -> (CInt -> IO Int) -> IO Int
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: CInt
res ->
  let {res' :: Int
res' = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res} in
  Int -> IO Int
forall (m :: * -> *) a. Monad m => a -> m a
return (Int
res')

{-# LINE 123 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO (Width))) => Op (GetW ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> w' imagePtr >>= return . Width
h' :: (Ptr ()) -> IO ((Int))
h' :: Ptr () -> IO Int
h' a1 :: Ptr ()
a1 =
  let {a1' :: Ptr ()
a1' = Ptr () -> Ptr ()
forall a. a -> a
id Ptr ()
a1} in 
  Ptr () -> IO CInt
h''_ Ptr ()
a1' IO CInt -> (CInt -> IO Int) -> IO Int
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: CInt
res ->
  let {res' :: Int
res' = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res} in
  Int -> IO Int
forall (m :: * -> *) a. Monad m => a -> m a
return (Int
res')

{-# LINE 126 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO (Height))) => Op (GetH ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> h' imagePtr >>= return . Height
d' :: (Ptr ()) -> IO ((Int))
d' a1 =
  let {a1' = id a1} in 
  d''_ a1' >>= \res ->
  let {res' = fromIntegral res} in
  return (res')

{-# LINE 129 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO (Int))) => Op (GetD ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> d' imagePtr
ld' :: (Ptr ()) -> IO ((Int))
ld' a1 =
  let {a1' = id a1} in 
  ld''_ a1' >>= \res ->
  let {res' = fromIntegral res} in
  return (res')

{-# LINE 132 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO (Int))) => Op (GetLd ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> ld' imagePtr
count' :: (Ptr ()) -> IO ((Int))
count' a1 =
  let {a1' = id a1} in 
  count''_ a1' >>= \res ->
  let {res' = fromIntegral res} in
  return (res')

{-# LINE 135 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO (Int))) => Op (GetCount ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> count' imagePtr

copyWithWH' :: (Ptr ()) -> (Int) -> (Int) -> IO ((Ptr ()))
copyWithWH' a1 a2 a3 =
  let {a1' = id a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  copyWithWH''_ a1' a2' a3' >>= \res ->
  let {res' = id res} in
  return (res')

{-# LINE 139 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

copy' :: (Ptr ()) -> IO ((Ptr ()))
copy' a1 =
  let {a1' = id a1} in 
  copy''_ a1' >>= \res ->
  let {res' = id res} in
  return (res')

{-# LINE 140 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( Maybe Size -> IO (Maybe (Ref Image)))) => Op (Copy ()) Image orig impl where
  runOp _ _ image size' = case size' of
    Just (Size (Width imageWidth) (Height imageHeight)) ->
        withRef image $ \imagePtr -> copyWithWH' imagePtr imageWidth imageHeight >>= toMaybeRef
    Nothing -> withRef image $ \imagePtr -> copy' imagePtr >>= toMaybeRef

colorAverage' :: (Ptr ()) -> (Color) -> (Float) -> IO ()
colorAverage' a1 a2 a3 =
  let {a1' = id a1} in 
  let {a2' = cFromColor a2} in 
  let {a3' = realToFrac a3} in 
  colorAverage''_ a1' a2' a3' >>
  return ()

{-# LINE 147 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ (Color -> Float ->  IO ())) => Op (ColorAverage ()) Image orig impl where
  runOp _ _ image c i = withRef image $ \imagePtr -> colorAverage' imagePtr c i

inactive' :: (Ptr ()) -> IO ()
inactive' a1 =
  let {a1' = id a1} in 
  inactive''_ a1' >>
  return ()

{-# LINE 151 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO ())) => Op (Inactive ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> inactive' imagePtr

desaturate' :: (Ptr ()) -> IO ()
desaturate' a1 =
  let {a1' = id a1} in 
  desaturate''_ a1' >>
  return ()

{-# LINE 155 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO ())) => Op (Desaturate ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> desaturate' imagePtr

drawWithCxCy' :: (Ptr ()) -> (Int) -> (Int) -> (Int) -> (Int) -> (Int) -> (Int) -> IO ()
drawWithCxCy' a1 a2 a3 a4 a5 a6 a7 =
  let {a1' = id a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  drawWithCxCy''_ a1' a2' a3' a4' a5' a6' a7' >>
  return ()

{-# LINE 159 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

drawWithCx' :: (Ptr ()) -> (Int) -> (Int) -> (Int) -> (Int) -> (Int) -> IO ()
drawWithCx' a1 a2 a3 a4 a5 a6 =
  let {a1' = id a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  drawWithCx''_ a1' a2' a3' a4' a5' a6' >>
  return ()

{-# LINE 160 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

drawWithCy' :: (Ptr ()) -> (Int) -> (Int) -> (Int) -> (Int) -> (Int) -> IO ()
drawWithCy' a1 a2 a3 a4 a5 a6 =
  let {a1' = id a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  drawWithCy''_ a1' a2' a3' a4' a5' a6' >>
  return ()

{-# LINE 161 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

drawWith' :: (Ptr ()) -> (Int) -> (Int) -> (Int) -> (Int) -> IO ()
drawWith' a1 a2 a3 a4 a5 =
  let {a1' = id a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  drawWith''_ a1' a2' a3' a4' a5' >>
  return ()

{-# LINE 162 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}


instance (impl ~ (Position -> Size -> Maybe X -> Maybe Y -> IO ())) => Op (DrawResize ()) Image orig impl where
  runOp _ _ image (Position (X imageX) (Y imageY)) (Size (Width imageWidth) (Height imageHeight)) xOffset yOffset =
    case (xOffset, yOffset) of
      (Just (X xOff), Just (Y yOff)) ->
        withRef image $ \imagePtr -> drawWithCxCy' imagePtr imageX imageY imageWidth imageHeight (fromIntegral xOff) (fromIntegral yOff)
      (Just (X xOff), Nothing) ->
        withRef image $ \imagePtr -> drawWithCx' imagePtr imageX imageY imageWidth imageHeight (fromIntegral xOff)
      (Nothing, Just (Y yOff)) ->
        withRef image $ \imagePtr -> drawWithCy' imagePtr imageX imageY imageWidth imageHeight (fromIntegral yOff)
      (Nothing, Nothing) ->
        withRef image $ \imagePtr -> drawWith' imagePtr imageX imageY imageWidth imageHeight

draw' :: (Ptr ()) -> (Int) -> (Int) -> IO ()
draw' :: Ptr () -> Int -> Int -> IO ()
draw' a1 :: Ptr ()
a1 a2 :: Int
a2 a3 :: Int
a3 =
  let {a1' = id a1} in 
  let {a2' :: CInt
a2' = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a2} in 
  let {a3' :: CInt
a3' = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a3} in 
  Ptr () -> CInt -> CInt -> IO ()
draw''_ Ptr ()
a1' CInt
a2' CInt
a3' IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
  () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

{-# LINE 176 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ (Position ->  IO ())) => Op (Draw ()) Image orig impl where
  runOp _ _ image (Position (X x_pos') (Y y_pos')) = withRef image $ \imagePtr -> draw' imagePtr x_pos' y_pos'
uncache' :: (Ptr ()) -> IO ()
uncache' a1 =
  let {a1' = id a1} in 
  uncache''_ a1' >>
  return ()

{-# LINE 179 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO ())) => Op (Uncache ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> uncache' imagePtr

fail' :: (Ptr ()) -> IO ((CInt))
fail' a1 =
  let {a1' = id a1} in 
  fail''_ a1' >>= \res ->
  let {res' = fromIntegral res} in
  return (res')

{-# LINE 183 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

-- | Only available on FLTK version 1.3.4 and above.
instance (impl ~ (IO (Either ImageFail ()))) => Op (Fail ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> do
    res <- fail' imagePtr
    if (res == 0)
      then return (Right ())
      else return (Left (cToEnum res))
dataw' :: (Ptr ()) -> IO ((Int))
dataw' :: Ptr () -> IO Int
dataw' a1 :: Ptr ()
a1 =
  let {a1' = id a1} in 
  Ptr () -> IO CInt
dataw''_ Ptr ()
a1' IO CInt -> (CInt -> IO Int) -> IO Int
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: CInt
res ->
  let {res' :: Int
res' = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res} in
  Int -> IO Int
forall (m :: * -> *) a. Monad m => a -> m a
return (Int
res')

{-# LINE 191 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO (Width))) => Op (GetDataW ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> dataw' imagePtr >>= return . Width
datah' :: (Ptr ()) -> IO ((Int))
datah' a1 =
  let {a1' = id a1} in 
  datah''_ a1' >>= \res ->
  let {res' = fromIntegral res} in
  return (res')

{-# LINE 194 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ ( IO (Height))) => Op (GetDataH ()) Image orig impl where
  runOp _ _ image = withRef image $ \imagePtr -> datah' imagePtr >>= return . Height
instance (impl ~ ( IO (Size))) => Op (GetDataSize ()) Image orig impl where
  runOp _ _ image = do
     w' <- getDataW image
     h' <- getDataH image
     return (Size w' h')
scale' :: (Ptr ()) -> (Int) -> (Int) -> (Bool) -> (Bool) -> IO ()
scale' :: Ptr () -> Int -> Int -> Bool -> Bool -> IO ()
scale' a1 :: Ptr ()
a1 a2 :: Int
a2 a3 a4 :: Bool
a4 a5 :: Bool
a5 =
  let {a1' = id a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' :: CInt
a3' = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a3} in 
  let {a4' :: CInt
a4' = Bool -> CInt
forall a. (Eq a, Num a) => Bool -> a
cFromBool Bool
a4} in 
  let {a5' :: CInt
a5' = Bool -> CInt
forall a. (Eq a, Num a) => Bool -> a
cFromBool Bool
a5} in 
  Ptr () -> CInt -> CInt -> CInt -> CInt -> IO ()
scale''_ Ptr ()
a1' CInt
a2' CInt
a3' CInt
a4' CInt
a5' IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
  () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

{-# LINE 202 "src/Graphics/UI/FLTK/LowLevel/Image.chs" #-}

instance (impl ~ (Size -> Maybe Bool -> Maybe Bool -> IO ())) => Op (Scale ()) Image orig impl where
  runOp _ _ image (Size (Width w') (Height h')) proportional can_expand =
    withRef image $ \imagePtr -> scale' imagePtr w' h' (maybe True id proportional) (maybe False id can_expand)


-- $hierarchy
-- @
-- "Graphics.UI.FLTK.LowLevel.Image"
-- @

-- $functions
-- @
-- colorAverage :: 'Ref' 'Image' -> 'Color' -> 'Float' -> 'IO' ()
--
-- copy :: 'Ref' 'Image' -> 'Maybe' 'Size' -> 'IO' ('Maybe' ('Ref' 'Image'))
--
-- desaturate :: 'Ref' 'Image' -> 'IO' ()
--
-- destroy :: 'Ref' 'Image' -> 'IO' ()
--
-- draw :: 'Ref' 'Image' -> 'Position' -> 'IO' ()
--
-- drawResize :: 'Ref' 'Image' -> 'Position' -> 'Size' -> 'Maybe' 'X' -> 'Maybe' 'Y' -> 'IO' ()
--
-- fail :: 'Ref' 'Image' -> 'IO' ('Either' 'ImageFail' ())
--
-- getCount :: 'Ref' 'Image' -> 'IO' ('Int')
--
-- getD :: 'Ref' 'Image' -> 'IO' ('Int')
--
-- getDataH :: 'Ref' 'Image' -> 'IO' ('Height')
--
-- getDataSize :: 'Ref' 'Image' -> 'IO' ('Size')
--
-- getDataW :: 'Ref' 'Image' -> 'IO' ('Width')
--
-- getH :: 'Ref' 'Image' -> 'IO' ('Height')
--
-- getLd :: 'Ref' 'Image' -> 'IO' ('Int')
--
-- getW :: 'Ref' 'Image' -> 'IO' ('Width')
--
-- inactive :: 'Ref' 'Image' -> 'IO' ()
--
-- scale :: 'Ref' 'Image' -> 'Size' -> 'Maybe' 'Bool' -> 'Maybe' 'Bool' -> 'IO' ()
--
-- uncache :: 'Ref' 'Image' -> 'IO' ()
-- @

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_default_virtual_funcs"
  virtualFuncs''_ :: (IO (C2HSImp.Ptr ()))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_New"
  flImageNew''_ :: (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO (C2HSImp.Ptr ())))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_OverriddenImage_New"
  flOverriddenImageNew''_ :: (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_Destroy"
  flImageDestroy''_ :: ((C2HSImp.Ptr ()) -> (IO ()))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_w"
  w''_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_h"
  h''_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_d"
  d''_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_ld"
  ld''_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_count"
  count''_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_copy_with_w_h"
  copyWithWH''_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO (C2HSImp.Ptr ())))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_copy"
  copy''_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_color_average"
  colorAverage''_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CUInt -> (C2HSImp.CFloat -> (IO ()))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_inactive"
  inactive''_ :: ((C2HSImp.Ptr ()) -> (IO ()))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_desaturate"
  desaturate''_ :: ((C2HSImp.Ptr ()) -> (IO ()))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_draw_with_cx_cy"
  drawWithCxCy''_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ()))))))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_draw_with_cx"
  drawWithCx''_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ())))))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_draw_with_cy"
  drawWithCy''_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ())))))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_draw_with"
  drawWith''_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ()))))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_draw"
  draw''_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ()))))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_uncache"
  uncache''_ :: ((C2HSImp.Ptr ()) -> (IO ()))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_fail"
  fail''_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_data_w"
  dataw''_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_data_h"
  datah''_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/Image.chs.h Fl_Image_scale"
  scale''_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ()))))))