module Graphics.UI.Gtk.Poppler.Page (
Cairo,
PopplerRectangle (..),
PopplerColor (..),
ImageMapping,
PageTransition,
LinkMapping,
FormFieldMapping,
SelectionStyle (..),
pageRender,
pageGetSize,
pageGetIndex,
pageGetThumbnail,
pageGetThumbnailSize,
pageRenderToPs,
pageFindText,
pageGetText,
pageGetDuration,
pageGetTransition,
pageGetLinkMapping,
pageGetImageMapping,
pageGetFormFieldMapping,
pageGetSelectionRegion,
pageRenderSelection,
) where
import Control.Monad
import Data.Typeable
import System.Glib.FFI
import System.Glib.Flags
import System.Glib.GError
import System.Glib.GObject
import System.Glib.GList
import System.Glib.UTFString
import Graphics.UI.Gtk.Poppler.Enums
import Graphics.UI.Gtk.Abstract.Widget (Rectangle (..), Color (..))
import Graphics.UI.GtkInternals
import Graphics.Rendering.Cairo.Types
import Graphics.UI.Gtk.Poppler.Types
import Graphics.UI.Gtk.Poppler.Structs
import Control.Monad.Reader (ReaderT(runReaderT), ask, MonadIO, liftIO)
import Graphics.Rendering.Cairo.Internal (Render(..), bracketR)
pageRender :: PageClass page => page
-> Render ()
pageRender page =
ask >>= \ x -> liftIO ((\(Page arg1) (Cairo arg2) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_render argPtr1 arg2) (toPage page) x)
pageGetSize :: PageClass page => page
-> IO (Double, Double)
pageGetSize page =
alloca $ \ widthPtr ->
alloca $ \ heightPtr -> do
(\(Page arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_size argPtr1 arg2 arg3)
(toPage page)
widthPtr
heightPtr
width <- peek widthPtr
height <- peek heightPtr
return (realToFrac width, realToFrac height)
pageGetIndex :: PageClass page => page
-> IO Int
pageGetIndex page =
liftM fromIntegral $
(\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_index argPtr1) (toPage page)
pageGetThumbnail :: PageClass page => page
-> IO (Maybe Surface)
pageGetThumbnail page = do
surfacePtr <- (\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_thumbnail argPtr1) (toPage page)
if surfacePtr == nullPtr
then return Nothing
else liftM Just (mkSurface surfacePtr)
pageGetThumbnailSize :: PageClass page => page
-> IO (Maybe (Int, Int))
pageGetThumbnailSize page =
alloca $ \ widthPtr ->
alloca $ \ heightPtr -> do
success <- liftM toBool $
(\(Page arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_thumbnail_size argPtr1 arg2 arg3)
(toPage page)
widthPtr
heightPtr
if success
then do
width <- peek widthPtr
height <- peek heightPtr
return $ Just (fromIntegral width, fromIntegral height)
else return Nothing
pageRenderToPs :: (PageClass page, PSFileClass psFile) => page -> psFile -> IO ()
pageRenderToPs page psFile =
(\(Page arg1) (PSFile arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->poppler_page_render_to_ps argPtr1 argPtr2) (toPage page) (toPSFile psFile)
pageFindText :: PageClass page => page
-> String
-> IO [PopplerRectangle]
pageFindText page text =
withUTFString text $ \ textPtr -> do
glistPtr <- (\(Page arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_find_text argPtr1 arg2) (toPage page) textPtr
list <- fromGList glistPtr
mapM peekPopplerRectangle list
pageGetText :: PageClass page => page -> IO String
pageGetText page =
(\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_text argPtr1) (toPage page)
>>= peekUTFString
pageGetDuration :: PageClass page => page
-> IO Double
pageGetDuration page =
liftM realToFrac $
(\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_duration argPtr1) (toPage page)
pageGetTransition :: PageClass page => page
-> IO (Maybe PageTransition)
pageGetTransition page = do
ptr <- (\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_transition argPtr1) (toPage page)
if ptr == nullPtr
then return Nothing
else liftM Just $ makeNewPageTransition (castPtr ptr)
newtype PageTransition = PageTransition (ForeignPtr (PageTransition))
makeNewPageTransition :: Ptr PageTransition -> IO PageTransition
makeNewPageTransition rPtr = do
transition <- newForeignPtr rPtr page_transition_free
return (PageTransition transition)
foreign import ccall unsafe "&poppler_page_transition_free"
page_transition_free :: FinalizerPtr PageTransition
pageGetLinkMapping :: PageClass page => page
-> IO [LinkMapping]
pageGetLinkMapping page = do
glistPtr <- (\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_link_mapping argPtr1) (toPage page)
list <- fromGList glistPtr
mappings <- mapM makeNewLinkMapping list
poppler_page_free_link_mapping (castPtr glistPtr)
return mappings
newtype LinkMapping = LinkMapping (ForeignPtr (LinkMapping))
makeNewLinkMapping :: Ptr LinkMapping -> IO LinkMapping
makeNewLinkMapping rPtr = do
linkMapping <- newForeignPtr rPtr poppler_link_mapping_free
return (LinkMapping linkMapping)
foreign import ccall unsafe "&poppler_link_mapping_free"
poppler_link_mapping_free :: FinalizerPtr LinkMapping
pageGetImageMapping :: PageClass page => page
-> IO [ImageMapping]
pageGetImageMapping page = do
glistPtr <- (\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_image_mapping argPtr1) (toPage page)
list <- fromGList glistPtr
mappings <- mapM makeNewImageMapping list
poppler_page_free_image_mapping (castPtr glistPtr)
return mappings
newtype ImageMapping = ImageMapping (ForeignPtr (ImageMapping))
makeNewImageMapping :: Ptr ImageMapping -> IO ImageMapping
makeNewImageMapping rPtr = do
imageMapping <- newForeignPtr rPtr poppler_image_mapping_free
return (ImageMapping imageMapping)
foreign import ccall unsafe "&poppler_image_mapping_free"
poppler_image_mapping_free :: FinalizerPtr ImageMapping
pageGetFormFieldMapping :: PageClass page => page
-> IO [FormFieldMapping]
pageGetFormFieldMapping page = do
glistPtr <- (\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_form_field_mapping argPtr1) (toPage page)
list <- fromGList glistPtr
mappings <- mapM makeNewFormFieldMapping list
poppler_page_free_image_mapping (castPtr glistPtr)
return mappings
newtype FormFieldMapping = FormFieldMapping (ForeignPtr (FormFieldMapping))
makeNewFormFieldMapping :: Ptr FormFieldMapping -> IO FormFieldMapping
makeNewFormFieldMapping rPtr = do
formFieldMapping <- newForeignPtr rPtr poppler_form_field_mapping_free
return (FormFieldMapping formFieldMapping)
foreign import ccall unsafe "&poppler_form_field_mapping_free"
poppler_form_field_mapping_free :: FinalizerPtr FormFieldMapping
pageGetSelectionRegion :: PageClass page => page
-> Double
-> SelectionStyle
-> PopplerRectangle
-> IO [PopplerRectangle]
pageGetSelectionRegion page scale style selection =
with selection $ \ selectionPtr -> do
glistPtr <- (\(Page arg1) arg2 arg3 arg4 -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_selection_region argPtr1 arg2 arg3 arg4)
(toPage page)
(realToFrac scale)
((fromIntegral . fromEnum) style)
(castPtr selectionPtr)
list <- fromGList glistPtr
rectangles <- mapM peekPopplerRectangle list
poppler_page_selection_region_free (castPtr glistPtr)
return rectangles
pageRenderSelection :: PageClass page => page
-> PopplerRectangle
-> PopplerRectangle
-> SelectionStyle
-> PopplerColor
-> PopplerColor
-> Render ()
pageRenderSelection page selection oldSelection style glyphColor backgroundColor = do
cairo <- ask
liftIO $
with selection $ \ selectionPtr ->
with oldSelection $ \ oldSelectionPtr ->
with glyphColor $ \ glyphColorPtr ->
with backgroundColor $ \ backgroundColorPtr ->
(\(Page arg1) (Cairo arg2) arg3 arg4 arg5 arg6 arg7 -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_render_selection argPtr1 arg2 arg3 arg4 arg5 arg6 arg7)
(toPage page)
cairo
(castPtr selectionPtr)
(castPtr oldSelectionPtr)
((fromIntegral . fromEnum) style)
(castPtr glyphColorPtr)
(castPtr backgroundColorPtr)
foreign import ccall safe "poppler_page_render"
poppler_page_render :: ((Ptr Page) -> ((Ptr Cairo) -> (IO ())))
foreign import ccall safe "poppler_page_get_size"
poppler_page_get_size :: ((Ptr Page) -> ((Ptr CDouble) -> ((Ptr CDouble) -> (IO ()))))
foreign import ccall safe "poppler_page_get_index"
poppler_page_get_index :: ((Ptr Page) -> (IO CInt))
foreign import ccall safe "poppler_page_get_thumbnail"
poppler_page_get_thumbnail :: ((Ptr Page) -> (IO (Ptr Surface)))
foreign import ccall safe "poppler_page_get_thumbnail_size"
poppler_page_get_thumbnail_size :: ((Ptr Page) -> ((Ptr CInt) -> ((Ptr CInt) -> (IO CInt))))
foreign import ccall safe "poppler_page_render_to_ps"
poppler_page_render_to_ps :: ((Ptr Page) -> ((Ptr PSFile) -> (IO ())))
foreign import ccall safe "poppler_page_find_text"
poppler_page_find_text :: ((Ptr Page) -> ((Ptr CChar) -> (IO (Ptr ()))))
foreign import ccall safe "poppler_page_get_text"
poppler_page_get_text :: ((Ptr Page) -> (IO (Ptr CChar)))
foreign import ccall safe "poppler_page_get_duration"
poppler_page_get_duration :: ((Ptr Page) -> (IO CDouble))
foreign import ccall safe "poppler_page_get_transition"
poppler_page_get_transition :: ((Ptr Page) -> (IO (Ptr ())))
foreign import ccall safe "poppler_page_get_link_mapping"
poppler_page_get_link_mapping :: ((Ptr Page) -> (IO (Ptr ())))
foreign import ccall unsafe "poppler_page_free_link_mapping"
poppler_page_free_link_mapping :: ((Ptr ()) -> (IO ()))
foreign import ccall safe "poppler_page_get_image_mapping"
poppler_page_get_image_mapping :: ((Ptr Page) -> (IO (Ptr ())))
foreign import ccall unsafe "poppler_page_free_image_mapping"
poppler_page_free_image_mapping :: ((Ptr ()) -> (IO ()))
foreign import ccall safe "poppler_page_get_form_field_mapping"
poppler_page_get_form_field_mapping :: ((Ptr Page) -> (IO (Ptr ())))
foreign import ccall safe "poppler_page_get_selection_region"
poppler_page_get_selection_region :: ((Ptr Page) -> (CDouble -> (CInt -> ((Ptr ()) -> (IO (Ptr ()))))))
foreign import ccall unsafe "poppler_page_selection_region_free"
poppler_page_selection_region_free :: ((Ptr ()) -> (IO ()))
foreign import ccall safe "poppler_page_render_selection"
poppler_page_render_selection :: ((Ptr Page) -> ((Ptr Cairo) -> ((Ptr ()) -> ((Ptr ()) -> (CInt -> ((Ptr ()) -> ((Ptr ()) -> (IO ()))))))))