vte-0.11.0: Graphics/UI/Gtk/Vte/Structs.hsc
{-# LANGUAGE CPP, ForeignFunctionInterface #-}
-- -*-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)
#include "VteCharAttrFields.h"
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 #{type gboolean}
foreign import ccall "getVteCharAttrStrikethrough"
getVteCharAttrStrikethrough :: Ptr VteAttributes -> IO #{type gboolean}
instance Storable VteAttributes where
sizeOf _ = #{const sizeof(VteCharAttributes)}
alignment _ = alignment (undefined :: #{type long})
peek ptr = do
row <- #{peek VteCharAttributes, row} ptr :: IO #{type long}
col <- #{peek VteCharAttributes, column} ptr :: IO #{type long}
fore <- #{peek VteCharAttributes, fore} ptr
back <- #{peek VteCharAttributes, back} ptr
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 <- #{peek GArray, len} gaPtr :: IO #{type guint}
ptr <- #{peek GArray, data} gaPtr
return (fromIntegral len, ptr)