module Graphics.UI.Gtk.Poppler.Page (
Cairo,
PopplerRectangle (..),
PopplerColor (..),
ImageMapping,
ImageMappingClass,
PageTransition,
PageTransitionClass,
LinkMapping,
LinkMappingClass,
FormFieldMapping,
FormFieldMappingClass,
SelectionStyle (..),
pageRender,
pageRenderToPixbuf,
pageGetSize,
pageGetIndex,
pageGetThumbnail,
pageGetThumbnailSize,
pageRenderToPs,
pageFindText,
pageGetText,
pageGetDuration,
pageGetTransition,
pageGetLinkMapping,
pageGetImageMapping,
pageGetFormFieldMapping,
pageGetSelectionRegion,
pageRenderSelection,
pageRenderSelectionToPixbuf,
) 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 = do
cairo <- ask
liftIO $ (\(Page arg1) (Cairo arg2) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_render argPtr1 arg2) (toPage page) cairo
pageRenderToPixbuf :: PageClass page => page
-> Rectangle
-> Double
-> Int
-> Pixbuf
-> IO ()
pageRenderToPixbuf page (Rectangle x y width height) scale rotation pixbuf =
(\(Page arg1) arg2 arg3 arg4 arg5 arg6 arg7 (Pixbuf arg8) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg8 $ \argPtr8 ->poppler_page_render_to_pixbuf argPtr1 arg2 arg3 arg4 arg5 arg6 arg7 argPtr8)
(toPage page)
(fromIntegral x)
(fromIntegral y)
(fromIntegral width)
(fromIntegral height)
(realToFrac scale)
(fromIntegral rotation)
pixbuf
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 -> SelectionStyle -> PopplerRectangle
-> IO String
pageGetText page style rect =
with rect $ \ rectPtr ->
(\(Page arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_text argPtr1 arg2 arg3) (toPage page) ((fromIntegral . fromEnum) style) (castPtr rectPtr)
>>= 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 =
maybeNull (makeNewGObject mkPageTransition) $
(\(Page arg1) -> withForeignPtr arg1 $ \argPtr1 ->poppler_page_get_transition argPtr1) (toPage page)
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 (makeNewGObject mkLinkMapping . return) list
poppler_page_free_link_mapping (castPtr glistPtr)
return mappings
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 (makeNewGObject mkImageMapping . return) list
poppler_page_free_image_mapping (castPtr glistPtr)
return mappings
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 (makeNewGObject mkFormFieldMapping . return) list
poppler_page_free_image_mapping (castPtr glistPtr)
return mappings
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)
pageRenderSelectionToPixbuf :: PageClass page => page
-> Double
-> Int
-> Pixbuf
-> PopplerRectangle
-> PopplerRectangle
-> SelectionStyle
-> Color
-> Color
-> IO ()
pageRenderSelectionToPixbuf page scale rotation pixbuf selection oldSelection style glyphColor backgroundColor =
with selection $ \ selectionPtr ->
with oldSelection $ \ oldSelectionPtr ->
with glyphColor $ \ glyphColorPtr ->
with backgroundColor $ \ backgroundColorPtr ->
(\(Page arg1) arg2 arg3 (Pixbuf arg4) arg5 arg6 arg7 arg8 arg9 -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg4 $ \argPtr4 ->poppler_page_render_selection_to_pixbuf argPtr1 arg2 arg3 argPtr4 arg5 arg6 arg7 arg8 arg9)
(toPage page)
(realToFrac scale)
(fromIntegral rotation)
pixbuf
(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_render_to_pixbuf"
poppler_page_render_to_pixbuf :: ((Ptr Page) -> (CInt -> (CInt -> (CInt -> (CInt -> (CDouble -> (CInt -> ((Ptr Pixbuf) -> (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) -> (CInt -> ((Ptr ()) -> (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 PageTransition)))
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 ()))))))))
foreign import ccall safe "poppler_page_render_selection_to_pixbuf"
poppler_page_render_selection_to_pixbuf :: ((Ptr Page) -> (CDouble -> (CInt -> ((Ptr Pixbuf) -> ((Ptr ()) -> ((Ptr ()) -> (CInt -> ((Ptr ()) -> ((Ptr ()) -> (IO ()))))))))))