-! Copyright (C) 2009 Anton Gorenko.
+! Copyright (C) 2010 Anton Gorenko.
! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types alien.destructors alien.syntax
-alien.libraries cairo.ffi combinators kernel system
-gobject-introspection gdk.pixbuf.ffi gio.ffi glib.ffi gmodule.ffi
-gobject.ffi pango.ffi ;
+USING: alien alien.c-types alien.destructors alien.libraries
+alien.syntax cairo.ffi classes.struct combinators
+gobject-introspection gobject-introspection.standard-types
+kernel system vocabs ;
IN: gdk.ffi
+<<
+"pango.ffi" require
+"gdk.pixbuf.ffi" require
+>>
+
+LIBRARY: gdk
+
<<
"gdk" {
- { [ os winnt? ] [ "libgdk-win32-2.0-0.dll" cdecl add-library ] }
+ { [ os windows? ] [ "libgdk-win32-2.0-0.dll" cdecl add-library ] }
{ [ os macosx? ] [ drop ] }
{ [ os unix? ] [ "libgdk-x11-2.0.so" cdecl add-library ] }
} cond
>>
-TYPEDEF: guint32 GdkNativeWindow
-TYPEDEF: guint32 GdkWChar
-C-TYPE: GdkXEvent
+! <workaround these types are from cairo 1.10
+STRUCT: cairo_rectangle_int_t
+ { x int } { y int } { width int } { height int } ;
-REPLACE-C-TYPE: any gpointer
+C-TYPE: cairo_region_t
+! workaround>
-IMPLEMENT-STRUCTS: GdkEventAny GdkEventKey GdkEventButton
-GdkEventScroll GdkEventMotion GdkEventExpose GdkEventVisibility
-GdkEventCrossing GdkEventFocus GdkEventConfigure GdkEventProperty
-GdkEventSelection GdkEventDND GdkEventProximity GdkEventClient
-GdkEventNoExpose GdkEventWindowState GdkEventSetting
-GdkEventOwnerChange GdkEventGrabBroken GdkRectangle ;
+FOREIGN-RECORD-TYPE: cairo.RectangleInt cairo_rectangle_int_t
+FOREIGN-RECORD-TYPE: cairo.Region cairo_region_t
+FOREIGN-RECORD-TYPE: cairo.FontOptions cairo_font_options_t
+FOREIGN-RECORD-TYPE: cairo.Surface cairo_surface_t
+FOREIGN-RECORD-TYPE: cairo.Pattern cairo_pattern_t
+FOREIGN-RECORD-TYPE: cairo.Context cairo_t
+FOREIGN-ENUM-TYPE: cairo.Content cairo_content_t
-GIR: vocab:gdk/Gdk-2.0.gir
+GIR: vocab:gdk/Gdk-3.0.gir
DESTRUCTOR: gdk_cursor_unref
+STRUCT: GdkEventButton
+ { type GdkEventType }
+ { window GdkWindow* }
+ { send_event gint8 }
+ { time guint32 }
+ { x gdouble }
+ { y gdouble }
+ { axes gdouble* }
+ { state guint }
+ { button guint }
+ { device GdkDevice* }
+ { x_root gdouble }
+ { y_root gdouble } ;
+
+STRUCT: GdkEventConfigure
+ { type GdkEventType }
+ { window GdkWindow* }
+ { send_event gint8 }
+ { x gint }
+ { y gint }
+ { width gint }
+ { height gint } ;
+
+STRUCT: GdkEventKey
+ { type GdkEventType }
+ { window GdkWindow* }
+ { send_event gint8 }
+ { time guint32 }
+ { state guint }
+ { keyval guint }
+ { length gint }
+ { string gchar* }
+ { hardware_keycode guint16 }
+ { group guint8 }
+ { is_modifier uint bits: 1 } ;
+
+STRUCT: GdkEventMotion
+ { type GdkEventType }
+ { window GdkWindow* }
+ { send_event gint8 }
+ { time guint32 }
+ { x gdouble }
+ { y gdouble }
+ { axes gdouble* }
+ { state guint }
+ { is_hint gint16 }
+ { device GdkDevice* }
+ { x_root gdouble }
+ { y_root gdouble } ;
+
+STRUCT: GdkEventScroll
+ { type GdkEventType }
+ { window GdkWindow* }
+ { send_event gint8 }
+ { time guint32 }
+ { x gdouble }
+ { y gdouble }
+ { state guint }
+ { direction GdkScrollDirection }
+ { device GdkDevice* }
+ { x_root gdouble }
+ { y_root gdouble } ;