{-# LINE 1 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} {-# LANGUAGE CPP, ForeignFunctionInterface #-} {-# LINE 2 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} -- -*-haskell-*- -- GIMP Toolkit (GTK) marshalling of structures for VTE -- -- Author : Axel Simon -- -- Created: 26 Sep 2009 -- -- Copyright (C) 2009 Andy Stewart <lazycat.manatee@gmail.com> -- -- 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. -- -- -- | -- Maintainer : gtk2hs-users@lists.sourceforge.net -- Stability : provisional -- Portability : portable (depends on GHC) -- -- Structures for the VTE terminal widget -- ----------------------------------------------------------------------------- -- module Graphics.UI.Gtk.Vte.Structs ( -- * Types VteAttributes(..), -- * Functions gArrayContent ) where import Data.Char import Data.Word import System.Glib.FFI import Graphics.UI.Gtk.Abstract.Widget (Color) {-# LINE 46 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} data VteAttributes = VteAttributes { vaRow :: Int, vaCol :: Int, vaFore :: Color, vaBack :: Color, vaUnderline :: Bool, vaStrikethrough :: Bool } -- these fields are declard as bit fields which we cannot access portably from -- Haskell, thus, we define two C helper functions that read these fields foreign import ccall "getVteCharAttrUnderline" getVteCharAttrUnderline :: Ptr VteAttributes -> IO Int32 {-# LINE 60 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} foreign import ccall "getVteCharAttrStrikethrough" getVteCharAttrStrikethrough :: Ptr VteAttributes -> IO Int32 {-# LINE 63 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} instance Storable VteAttributes where sizeOf _ = 48 {-# LINE 66 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} alignment _ = alignment (undefined :: Int64) {-# LINE 67 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} peek ptr = do row <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr :: IO Int64 {-# LINE 69 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} col <- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO Int64 {-# LINE 70 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} fore <- (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr {-# LINE 71 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} back <- (\hsc_ptr -> peekByteOff hsc_ptr 28) ptr {-# LINE 72 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} under <- getVteCharAttrUnderline ptr strike <- getVteCharAttrStrikethrough ptr return VteAttributes { vaRow = fromIntegral row, vaCol = fromIntegral col, vaFore = fore, vaBack = back, vaUnderline = toBool (fromIntegral under), vaStrikethrough = toBool (fromIntegral strike) } poke ptr VteAttributes {} = error "Storable VteAttributes: not implemented" -- | Retrieve the two fields of the GArray structure. -- gArrayContent :: Ptr garray -> IO (Int, Ptr VteAttributes) gArrayContent gaPtr = do len <- (\hsc_ptr -> peekByteOff hsc_ptr 8) gaPtr :: IO Word32 {-# LINE 89 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} ptr <- (\hsc_ptr -> peekByteOff hsc_ptr 0) gaPtr {-# LINE 90 "Graphics/UI/Gtk/Vte/Structs.hsc" #-} return (fromIntegral len, ptr)