Date: Fri, 9 Sep 2005 14:57:18 -0300 From: romildo at uber.com.br To: lablgtk at math.nagoya-u.ac.jp Subject: Help Message-ID: <20050909175718.GA8524 at malaquias> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="8t9RHnE3ZwKMSgU+" Content-Disposition: inline --8t9RHnE3ZwKMSgU+ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello. Maybe someone can shed some light into this for me: I am trying to wrap gtk+extra (http://gtkextra.sourceforge.net/) in OCaml. I am just starting with a widget (GtkPlotCanvas, derived from GtkFixed) and a creation function (gtk_plot_canvas_new). The files I have written so far are attached. Attached is the corresponding C header file from gtk+extra. When compiling, I get the erros: $ make ocamlc.opt -c -ccopt "-O -DG_DISABLE_CAST_CHECKS -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API -DORBIT2=1 -pthread -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/freetype2/config -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/gtkgl-2.0 -I/usr/include/libglade-2.0 -I/usr/include/libxml2 -I/usr/include/librsvg-2 -I/usr/include/libgnomecanvas-2.0 -I/usr/include/libart-2.0 -I/usr/include/libgnomeui-2.0 -I/usr/include/libgnome-2.0 -I/usr/include/gconf/2 -I/usr/include/libbonoboui-2.0 -I/usr/include/orbit-2.0 -I/usr/include/libbonobo-2.0 -I/usr/include/gnome-vfs-2.0 -I/usr/lib64/gnome-vfs-2.0/include -I/usr/include/bonobo-activation-2.0 -I/usr/include/panel-2.0 -I/usr/include/gtkextra-2.0 " ml_gtkextra.c ocamlmklib -verbose -o lablgtkextra ml_gtkextra.o -lgtkextra-x11-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 + gcc -shared -o ./dlllablgtkextra.so ml_gtkextra.o -lgtkextra-x11-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 + ar rc ./liblablgtkextra.a ml_gtkextra.o + ranlib ./liblablgtkextra.a ocamlc.opt -I +lablGL -w s -c gtkExtra.ml ocamlc.opt -I +lablGL -w s -c gExtra.ml File "gExtra.ml", line 13, characters 23-26: This expression has type GtkExtra.plot_canvas Gtk.obj = GtkExtra.plot_canvas Gobject.obj but is here used with type Gtk.fixed Gtk.obj = Gtk.fixed Gobject.obj Type GtkExtra.plot_canvas = [ `container | `fixed | `gtk | `plot_canvas | `widget ] is not compatible with type Gtk.fixed = [ `container | `fixed | `gtk | `widget ] make: *** [gExtra.cmo] Error 2 Any help? Romildo --8t9RHnE3ZwKMSgU+ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="ml_gtkextra.c" /* GtkExtra */ #define GTK_ENABLE_EXTRA 1 #include #include #include #include #include #include #include #include "wrappers.h" #include "ml_glib.h" #include "ml_gobject.h" #include "ml_gdk.h" #include "ml_gtk.h" #include "gtk_tags.h" /* Init all */ CAMLprim value ml_gtkextra_init(value unit) { /* Since these are declared const, must force gcc to call them! */ GType t = gtk_plot_canvas_get_type (); return Val_GType(t); } #define GtkPlotCanvas_val(val) check_cast(GTK_PLOT_CANVAS,val) ML_3 (gtk_plot_canvas_new, Int_val, Int_val, Int_val, Val_GtkWidget_sink) --8t9RHnE3ZwKMSgU+ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="gtkExtra.ml" (* gtkExtra.ml *) open Gaux open Gobject open Gtk open Tags open GtkBase external _gtkextra_init : unit -> unit = "ml_gtkextra_init" let () = _gtkextra_init () type plot_canvas = [Gtk.fixed|`plot_canvas] module PlotCanvas = struct external new_plot_canvas : int -> int -> int -> plot_canvas Gobject.obj = "ml_gtk_plot_canvas_new" end --8t9RHnE3ZwKMSgU+ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="gExtra.ml" (* gExtra.ml *) open StdLabels open Gaux open Gobject open Gtk open GtkBase open GtkExtra open GObj open GContainer class plot_canvas obj = object inherit GPack.fixed (obj : GtkExtra.plot_canvas Gtk.obj) end let plot_canvas ?width ?heigth ?magnification ?packing ?show () = Gtk.pack_return (new plot_canvas (PlotCanvas.create ?width ?heigth ?magnification)) ~packing ~show --8t9RHnE3ZwKMSgU+ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="gtkplotcanvas.h" /* gtkplotcanvas - gtkplot canvas widget for gtk+ * Copyright 1999-2001 Adrian E. Feiguin * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __GTK_PLOT_CANVAS_H__ #define __GTK_PLOT_CANVAS_H__ #include #include "gtkplot.h" #include "gtkplotpc.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* canvas flags */ enum { GTK_PLOT_CANVAS_CAN_SELECT = 1 << 0, /* Select region */ GTK_PLOT_CANVAS_CAN_SELECT_ITEM = 1 << 1, /* Select item */ GTK_PLOT_CANVAS_CAN_DND = 1 << 2, /* DnD item */ }; /* canvas actions */ typedef enum { GTK_PLOT_CANVAS_ACTION_INACTIVE, GTK_PLOT_CANVAS_ACTION_SELECTION, GTK_PLOT_CANVAS_ACTION_DRAG, GTK_PLOT_CANVAS_ACTION_RESIZE, } GtkPlotCanvasAction; typedef enum { GTK_PLOT_CANVAS_FROZEN = 0, GTK_PLOT_CANVAS_CAN_MOVE = 1 << 0, GTK_PLOT_CANVAS_CAN_RESIZE = 1 << 1, } GtkPlotCanvasFlag; typedef enum { GTK_PLOT_CANVAS_SELECT_NONE, GTK_PLOT_CANVAS_SELECT_MARKERS, GTK_PLOT_CANVAS_SELECT_TARGET, } GtkPlotCanvasSelection; typedef enum { GTK_PLOT_CANVAS_SELECT_CLICK_1, GTK_PLOT_CANVAS_SELECT_CLICK_2, } GtkPlotCanvasSelectionMode; typedef enum { GTK_PLOT_CANVAS_OUT, GTK_PLOT_CANVAS_IN, GTK_PLOT_CANVAS_LEFT, GTK_PLOT_CANVAS_RIGHT, GTK_PLOT_CANVAS_TOP, GTK_PLOT_CANVAS_BOTTOM, GTK_PLOT_CANVAS_TOP_LEFT, GTK_PLOT_CANVAS_TOP_RIGHT, GTK_PLOT_CANVAS_BOTTOM_LEFT, GTK_PLOT_CANVAS_BOTTOM_RIGHT, } GtkPlotCanvasPos; #define GTK_PLOT_CANVAS_DND_FLAGS (GTK_PLOT_CANVAS_CAN_SELECT_ITEM | \ GTK_PLOT_CANVAS_CAN_DND ) #define GTK_PLOT_CANVAS(obj) GTK_CHECK_CAST (obj, gtk_plot_canvas_get_type (), GtkPlotCanvas) #define GTK_PLOT_CANVAS_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_plot_canvas_get_type(), GtkPlotCanvasClass) #define GTK_IS_PLOT_CANVAS(obj) GTK_CHECK_TYPE (obj, gtk_plot_canvas_get_type ()) #define GTK_TYPE_PLOT_CANVAS (gtk_plot_canvas_get_type ()) #define GTK_PLOT_CANVAS_FLAGS(canvas) (GTK_PLOT_CANVAS(canvas)->flags) #define GTK_PLOT_CANVAS_SET_FLAGS(canvas, flags) (GTK_PLOT_CANVAS_FLAGS(canvas) |= (flags)) #define GTK_PLOT_CANVAS_UNSET_FLAGS(canvas, flags) (GTK_PLOT_CANVAS_FLAGS(canvas) &= ~(flags)) #define GTK_PLOT_CANVAS_CAN_DND_POINT(canvas) (GTK_PLOT_CANVAS_FLAGS(canvas) & GTK_PLOT_CANVAS_CAN_DND_POINT) #define GTK_PLOT_CANVAS_CAN_DND(canvas) (GTK_PLOT_CANVAS_FLAGS(canvas) & GTK_PLOT_CANVAS_CAN_DND) #define GTK_PLOT_CANVAS_CAN_SELECT_POINT(canvas) (GTK_PLOT_CANVAS_FLAGS(canvas) & GTK_PLOT_CANVAS_CAN_SELECT_POINT) #define GTK_PLOT_CANVAS_CAN_SELECT_ITEM(canvas) (GTK_PLOT_CANVAS_FLAGS(canvas) & GTK_PLOT_CANVAS_CAN_SELECT_ITEM) #define GTK_PLOT_CANVAS_CAN_SELECT(canvas) (GTK_PLOT_CANVAS_FLAGS(canvas) & GTK_PLOT_CANVAS_CAN_SELECT) #define GTK_PLOT_CANVAS_CHILD(obj) GTK_CHECK_CAST (obj, gtk_plot_canvas_child_get_type (), GtkPlotCanvasChild) #define GTK_PLOT_CANVAS_CHILD_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_plot_canvas_child_get_type(), GtkPlotCanvasChildClass) #define GTK_IS_PLOT_CANVAS_CHILD(obj) GTK_CHECK_TYPE (obj, gtk_plot_canvas_child_get_type ()) #define GTK_TYPE_PLOT_CANVAS_CHILD (gtk_plot_canvas_child_get_type ()) typedef struct _GtkPlotCanvas GtkPlotCanvas; typedef struct _GtkPlotCanvasClass GtkPlotCanvasClass; typedef struct _GtkPlotCanvasChild GtkPlotCanvasChild; typedef struct _GtkPlotCanvasChildClass GtkPlotCanvasChildClass; struct _GtkPlotCanvasChild { GtkObject object; GtkPlotCanvas *parent; gdouble rx1, rx2, ry1, ry2; gint min_width, min_height; GtkAllocation allocation; GtkAllocation drag_area; guint state; GtkPlotCanvasFlag flags; GtkPlotCanvasSelection selection; GtkPlotCanvasSelectionMode mode; }; struct _GtkPlotCanvasChildClass { GtkObjectClass parent_class; void (*draw) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child); void (*draw_selection) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, GtkAllocation allocation); void (*size_allocate) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child); void (*move) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, gdouble x, gdouble y); void (*move_resize) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, gdouble x1, gdouble y1, gdouble x2, gdouble y2); GtkPlotCanvasPos (*button_press) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, gint x, gint y); void (*button_release) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child); void (*unselect) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child); void (*set_magnification) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, gdouble m); }; struct _GtkPlotCanvas { GtkFixed fixed; guint16 flags; guint state; guint freeze_count; gint pixmap_width, pixmap_height; gint width, height; gdouble magnification; gboolean show_grid; gdouble grid_step; GtkPlotLine grid; GtkPlotCanvasAction action; GdkPixmap *pixmap; GdkColor background; gboolean transparent; gdouble active_x, active_y; GtkPlotCanvasChild *active_item; GtkPlotCanvasPos drag_point; gint drag_x, drag_y; gint pointer_x, pointer_y; GtkAllocation drag_area; GList *childs; GdkCursor *cursor; GtkPlotPC *pc; }; struct _GtkPlotCanvasClass { GtkLayoutClass parent_class; gboolean (*select_item) (GtkPlotCanvas *canvas, GdkEventButton *event, GtkPlotCanvasChild *item); gboolean (*move_item) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *item, gdouble new_x, gdouble new_y); gboolean (*resize_item) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *item, gdouble new_width, gdouble new_height); void (*add_item) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *item); gboolean (*delete_item) (GtkPlotCanvas *canvas, GtkPlotCanvasChild *item); void (*select_region) (GtkPlotCanvas *canvas, gdouble xmin, gdouble ymin, gdouble xmax, gdouble ymax); void (*changed) (GtkPlotCanvas *canvas); }; GtkType gtk_plot_canvas_get_type (void); GtkType gtk_plot_canvas_child_get_type (void); GtkWidget* gtk_plot_canvas_new (gint width, gint height, gdouble magnification); void gtk_plot_canvas_construct (GtkPlotCanvas *canvas, gint width, gint height, gdouble magnification); void gtk_plot_canvas_set_pc (GtkPlotCanvas *canvas, GtkPlotPC *pc); void gtk_plot_canvas_paint (GtkPlotCanvas *canvas); void gtk_plot_canvas_refresh (GtkPlotCanvas *canvas); void gtk_plot_canvas_freeze (GtkPlotCanvas *canvas); void gtk_plot_canvas_thaw (GtkPlotCanvas *canvas); void gtk_plot_canvas_grid_set_visible(GtkPlotCanvas *canvas, gboolean visible); void gtk_plot_canvas_grid_set_step (GtkPlotCanvas *canvas, gdouble step); void gtk_plot_canvas_grid_set_attributes(GtkPlotCanvas *canvas, GtkPlotLineStyle style, gint width, const GdkColor *color); void gtk_plot_canvas_cancel_action (GtkPlotCanvas *plot_canvas); void gtk_plot_canvas_unselect (GtkPlotCanvas *plot_canvas); GtkPlotCanvasChild * gtk_plot_canvas_get_active_item (GtkPlotCanvas *canvas); void gtk_plot_canvas_set_size (GtkPlotCanvas *canvas, gint width, gint height); void gtk_plot_canvas_set_magnification (GtkPlotCanvas *canvas, gdouble magnification); void gtk_plot_canvas_set_transparent (GtkPlotCanvas *canvas, gboolean transparent); gboolean gtk_plot_canvas_transparent (GtkPlotCanvas *canvas); void gtk_plot_canvas_set_background (GtkPlotCanvas *canvas, const GdkColor *background); void gtk_plot_canvas_get_pixel (GtkPlotCanvas *plot_canvas, gdouble px, gdouble py, gint *x, gint *y); void gtk_plot_canvas_get_position (GtkPlotCanvas *plot_canvas, gint x, gint y, gdouble *px, gdouble *py); void gtk_plot_canvas_put_child (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, gdouble x1, gdouble y1, gdouble x2, gdouble y2); void gtk_plot_canvas_remove_child (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child); void gtk_plot_canvas_child_move (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, gdouble x1, gdouble y1); void gtk_plot_canvas_child_move_resize (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, gdouble x1, gdouble y1, gdouble x2, gdouble y2); void gtk_plot_canvas_child_set_selection (GtkPlotCanvasChild *child, GtkPlotCanvasSelection selection); void gtk_plot_canvas_child_set_selection_mode (GtkPlotCanvasChild *child, GtkPlotCanvasSelectionMode mode); gboolean gtk_plot_canvas_child_get_position (GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, double *x1, double *y1, double *x2, double *y2); void gtk_plot_canvas_set_line_attributes (GtkPlotCanvas *canvas, GtkPlotLine line); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __GTK_PLOT_CANVAS_H__ */ --8t9RHnE3ZwKMSgU+--