{-# LINE 1 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
{-# LANGUAGE CPP, ScopedTypeVariables #-}
{-# LINE 2 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
{-# OPTIONS_HADDOCK hide #-}
-- -*-haskell-*-
--  GIMP Toolkit (GTK) Structures for Pango
--
--  Author : Axel Simon
--
--  Created: 2 March 2008
--
--  Copyright (C) 2008 Axel Simon
--
--  This library is free software; you can redistribute it and/or
--  modify it under the terms of the GNU Lesser General Public
--  License as published by the Free Software Foundation; either
--  version 2.1 of the License, or (at your option) any later version.
--
--  This library is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--  Lesser General Public License for more details.
--
-- #hide


{-# LINE 25 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}

{-# LINE 26 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}

{-# LINE 27 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}

-- |
-- Maintainer  : gtk2hs-users@lists.sourceforge.net
-- Stability   : provisional
-- Portability : portable (depends on GHC)
--
module Graphics.UI.Gtk.Poppler.Structs (
    PopplerRectangle(..),
    peekPopplerRectangle,                    
    PopplerColor(..),
    peekPopplerColor,                
    ) where
    
import Control.Monad		(liftM)
import Data.IORef
import Control.Exception

import System.Glib.FFI
import System.Glib.UTFString ( peekUTFString, UTFCorrection,
                               ofsToUTF, ofsFromUTF )
import System.Glib.GObject (makeNewGObject)

-- | Rectangles describing an area in 'Double's.
--
-- * Specifies x, y, width and height
--
data PopplerRectangle = PopplerRectangle Double Double Double Double
		      deriving Show

instance Storable PopplerRectangle where
  sizeOf _ = 32
{-# LINE 58 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
  alignment _ = alignment (undefined:: Double)
{-# LINE 59 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
  peek ptr = do
    (PopplerRectangle x1_ y1_ x2_ y2_) <- peekPopplerRectangle ptr
    return $ PopplerRectangle (realToFrac x1_) (realToFrac y1_)
                              (realToFrac x2_) (realToFrac y2_)
  poke ptr (PopplerRectangle x1 y1 x2 y2) = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr (x1::Double)
{-# LINE 65 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr (y1::Double)
{-# LINE 66 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr (x2::Double)
{-# LINE 67 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr (y2::Double)
{-# LINE 68 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}

peekPopplerRectangle :: Ptr PopplerRectangle -> IO PopplerRectangle
peekPopplerRectangle ptr = do
    (x1_ ::Double)	<- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 72 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    (y1_ ::Double)	<- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 73 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    (x2_ ::Double)	<- (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 74 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    (y2_ ::Double)	<- (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 75 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    return (PopplerRectangle (realToFrac x1_) (realToFrac y1_)
                             (realToFrac x2_) (realToFrac y2_))
      
data PopplerColor = PopplerColor (Word16) (Word16) (Word16)
{-# LINE 79 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
             deriving (Eq,Show)
      
instance Storable PopplerColor where
  sizeOf _ = 6
{-# LINE 83 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
  alignment _ = alignment (undefined::Word16)
{-# LINE 84 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
  peek ptr = peekPopplerColor ptr
  poke ptr (PopplerColor red green blue) = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0)   ptr red
{-# LINE 87 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 2) ptr green
{-# LINE 88 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 4)  ptr blue
{-# LINE 89 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
     
peekPopplerColor :: Ptr PopplerColor -> IO PopplerColor
peekPopplerColor ptr = do
    red	   <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 93 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    green  <- (\hsc_ptr -> peekByteOff hsc_ptr 2) ptr
{-# LINE 94 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    blue   <- (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
{-# LINE 95 "Graphics/UI/Gtk/Poppler/Structs.hsc" #-}
    return $ PopplerColor red green blue