
Duncan Coutts
All,
So I'm trying to wrap this structure:
struct GtkSourceTagStyle {
/* readonly */ gboolean is_default;
guint mask;
GdkColor foreground; GdkColor background;
gboolean italic; gboolean bold; gboolean underline; gboolean strikethrough;
/* Reserved for future expansion */ guint8 reserved[16]; };
My problem is with the GdkColor members foreground & background. They are themselves structures so c2hs cannot make {#get #} mappings for them. Of course Color has already been wrapped (in gtk2hs/gtk/general/Structs.hsc) and is a member of the Storable class so all we need is to get a pointer to the member to be able to apply peek/poke to it. This is not hard if we manually edit the .hs file produced from the .chs binding file:
instance Storable SourceTagStyle where peek ptr = do isDefault' <- (\ptr -> do {peekByteOff ptr 0 ::IO CInt}) ptr mask' <- (\ptr -> do {peekByteOff ptr 4 ::IO CUInt}) ptr foreground' <- (\ptr -> do {peekByteOff ptr 8 ::IO Color}) ptr --manually edited background' <- (\ptr -> do {peekByteOff ptr 8+12 ::IO Color}) ptr --manually edited italic' <- (\ptr -> do {peekByteOff ptr 32 ::IO CInt}) ptr bold' <- (\ptr -> do {peekByteOff ptr 36 ::IO CInt}) ptr ...
So as you see we're very close, all we need is a way of automatically getting the structure offsets (which is what c2hs does for all the other members). What is the right way do to this?
To be honest, I don't quite get what the problem is. Maybe because I haven't seen the .chs file from which you compile this. Provided you have the right Storable instances, there shouldn't be a problem {#get #}-ing complex structures. Cheers, Manuel