2002-08-17 Duncan Mak <duncan@ximian.com>

* glue/canvas-proxy.c:
	* glue/canvas-proxy.h: New files. Glue for subclassing CanvasItem
	from C#.

	* glue/canvas-proxy-marshal.c:
	* glue/canvas-proxy-marshal.h:
	* glue/canvas-proxy-marshal.list: Added to handle marshaling
	signals used by CanvasProxy.

svn path=/trunk/gtk-sharp/; revision=6682
This commit is contained in:
Duncan Mak 2002-08-16 17:14:53 +00:00
parent 64addd90b9
commit 40dd8134e3
7 changed files with 450 additions and 1 deletions

View File

@ -1,3 +1,14 @@
2002-08-17 Duncan Mak <duncan@ximian.com>
* glue/canvas-proxy.c:
* glue/canvas-proxy.h: New files. Glue for subclassing CanvasItem
from C#.
* glue/canvas-proxy-marshal.c:
* glue/canvas-proxy-marshal.h:
* glue/canvas-proxy-marshal.list: Added to handle marshaling
signals used by CanvasProxy.
2002-08-15 Mike Kestner <mkestner@speakeasy.net>
* sample/Makefile.in : add some art-sharp refs

View File

@ -12,7 +12,9 @@ BASESOURCES = \
paned.c \
style.c \
type.c \
widget.c
widget.c \
canvas-proxy.c \
canvas-proxy.h
GNOMESOURCES = \
canvasitem.c \

225
glue/canvas-proxy-marshal.c Normal file
View File

@ -0,0 +1,225 @@
#include <glib-object.h>
#ifdef G_ENABLE_DEBUG
#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
#define g_marshal_value_peek_char(v) g_value_get_char (v)
#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
#define g_marshal_value_peek_int(v) g_value_get_int (v)
#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
#define g_marshal_value_peek_long(v) g_value_get_long (v)
#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
#define g_marshal_value_peek_float(v) g_value_get_float (v)
#define g_marshal_value_peek_double(v) g_value_get_double (v)
#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
#define g_marshal_value_peek_param(v) g_value_get_param (v)
#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
#define g_marshal_value_peek_object(v) g_value_get_object (v)
#else /* !G_ENABLE_DEBUG */
/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
* Do not access GValues directly in your code. Instead, use the
* g_value_get_*() functions
*/
#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
#define g_marshal_value_peek_char(v) (v)->data[0].v_int
#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
#define g_marshal_value_peek_int(v) (v)->data[0].v_int
#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
#define g_marshal_value_peek_long(v) (v)->data[0].v_long
#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
#define g_marshal_value_peek_enum(v) (v)->data[0].v_int
#define g_marshal_value_peek_flags(v) (v)->data[0].v_uint
#define g_marshal_value_peek_float(v) (v)->data[0].v_float
#define g_marshal_value_peek_double(v) (v)->data[0].v_double
#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
#endif /* !G_ENABLE_DEBUG */
/* VOID:OBJECT,DOUBLE,POINTER,INT (canvas-proxy-marshal.list:1) */
void
g_cclosure_user_marshal_VOID__OBJECT_DOUBLE_POINTER_INT (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data)
{
typedef void (*GMarshalFunc_VOID__OBJECT_DOUBLE_POINTER_INT) (gpointer data1,
gpointer arg_1,
gdouble arg_2,
gpointer arg_3,
gint arg_4,
gpointer data2);
register GMarshalFunc_VOID__OBJECT_DOUBLE_POINTER_INT callback;
register GCClosure *cc = (GCClosure*) closure;
register gpointer data1, data2;
g_return_if_fail (n_param_values == 5);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_peek_pointer (param_values + 0);
}
else
{
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GMarshalFunc_VOID__OBJECT_DOUBLE_POINTER_INT) (marshal_data ? marshal_data : cc->callback);
callback (data1,
g_marshal_value_peek_object (param_values + 1),
g_marshal_value_peek_double (param_values + 2),
g_marshal_value_peek_pointer (param_values + 3),
g_marshal_value_peek_int (param_values + 4),
data2);
}
/* DOUBLE:OBJECT,DOUBLE,DOUBLE,INT,INT,POINTER (canvas-proxy-marshal.list:2) */
void
g_cclosure_user_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_INT_INT_POINTER (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data)
{
typedef gdouble (*GMarshalFunc_DOUBLE__OBJECT_DOUBLE_DOUBLE_INT_INT_POINTER) (gpointer data1,
gpointer arg_1,
gdouble arg_2,
gdouble arg_3,
gint arg_4,
gint arg_5,
gpointer arg_6,
gpointer data2);
register GMarshalFunc_DOUBLE__OBJECT_DOUBLE_DOUBLE_INT_INT_POINTER callback;
register GCClosure *cc = (GCClosure*) closure;
register gpointer data1, data2;
gdouble v_return;
g_return_if_fail (return_value != NULL);
g_return_if_fail (n_param_values == 7);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_peek_pointer (param_values + 0);
}
else
{
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GMarshalFunc_DOUBLE__OBJECT_DOUBLE_DOUBLE_INT_INT_POINTER) (marshal_data ? marshal_data : cc->callback);
v_return = callback (data1,
g_marshal_value_peek_object (param_values + 1),
g_marshal_value_peek_double (param_values + 2),
g_marshal_value_peek_double (param_values + 3),
g_marshal_value_peek_int (param_values + 4),
g_marshal_value_peek_int (param_values + 5),
g_marshal_value_peek_pointer (param_values + 6),
data2);
g_value_set_double (return_value, v_return);
}
/* VOID:OBJECT,POINTER,POINTER,POINTER,POINTER (canvas-proxy-marshal.list:3) */
void
g_cclosure_user_marshal_VOID__OBJECT_POINTER_POINTER_POINTER_POINTER (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data)
{
typedef void (*GMarshalFunc_VOID__OBJECT_POINTER_POINTER_POINTER_POINTER) (gpointer data1,
gpointer arg_1,
gpointer arg_2,
gpointer arg_3,
gpointer arg_4,
gpointer arg_5,
gpointer data2);
register GMarshalFunc_VOID__OBJECT_POINTER_POINTER_POINTER_POINTER callback;
register GCClosure *cc = (GCClosure*) closure;
register gpointer data1, data2;
g_return_if_fail (n_param_values == 6);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_peek_pointer (param_values + 0);
}
else
{
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GMarshalFunc_VOID__OBJECT_POINTER_POINTER_POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
callback (data1,
g_marshal_value_peek_object (param_values + 1),
g_marshal_value_peek_pointer (param_values + 2),
g_marshal_value_peek_pointer (param_values + 3),
g_marshal_value_peek_pointer (param_values + 4),
g_marshal_value_peek_pointer (param_values + 5),
data2);
}
/* VOID:OBJECT,INT,INT,INT,INT (canvas-proxy-marshal.list:4) */
void
g_cclosure_user_marshal_VOID__OBJECT_INT_INT_INT_INT (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data)
{
typedef void (*GMarshalFunc_VOID__OBJECT_INT_INT_INT_INT) (gpointer data1,
gpointer arg_1,
gint arg_2,
gint arg_3,
gint arg_4,
gint arg_5,
gpointer data2);
register GMarshalFunc_VOID__OBJECT_INT_INT_INT_INT callback;
register GCClosure *cc = (GCClosure*) closure;
register gpointer data1, data2;
g_return_if_fail (n_param_values == 6);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_peek_pointer (param_values + 0);
}
else
{
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GMarshalFunc_VOID__OBJECT_INT_INT_INT_INT) (marshal_data ? marshal_data : cc->callback);
callback (data1,
g_marshal_value_peek_object (param_values + 1),
g_marshal_value_peek_int (param_values + 2),
g_marshal_value_peek_int (param_values + 3),
g_marshal_value_peek_int (param_values + 4),
g_marshal_value_peek_int (param_values + 5),
data2);
}

View File

@ -0,0 +1,44 @@
#ifndef __g_cclosure_user_marshal_MARSHAL_H__
#define __g_cclosure_user_marshal_MARSHAL_H__
#include <glib-object.h>
G_BEGIN_DECLS
/* VOID:OBJECT,DOUBLE,POINTER,INT (canvas-proxy-marshal.list:1) */
extern void g_cclosure_user_marshal_VOID__OBJECT_DOUBLE_POINTER_INT (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data);
/* DOUBLE:OBJECT,DOUBLE,DOUBLE,INT,INT,POINTER (canvas-proxy-marshal.list:2) */
extern void g_cclosure_user_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_INT_INT_POINTER (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data);
/* VOID:OBJECT,POINTER,POINTER,POINTER,POINTER (canvas-proxy-marshal.list:3) */
extern void g_cclosure_user_marshal_VOID__OBJECT_POINTER_POINTER_POINTER_POINTER (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data);
/* VOID:OBJECT,INT,INT,INT,INT (canvas-proxy-marshal.list:4) */
extern void g_cclosure_user_marshal_VOID__OBJECT_INT_INT_INT_INT (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data);
G_END_DECLS
#endif /* __g_cclosure_user_marshal_MARSHAL_H__ */

View File

@ -0,0 +1,4 @@
VOID:OBJECT,DOUBLE,POINTER,INT
DOUBLE:OBJECT,DOUBLE,DOUBLE,INT,INT,POINTER
VOID:OBJECT,POINTER,POINTER,POINTER,POINTER
VOID:OBJECT,INT,INT,INT,INT

133
glue/canvas-proxy.c Normal file
View File

@ -0,0 +1,133 @@
/*
* canvasproxy.c - glue functions for creating C# CanvasItems
*
* Author: Duncan Mak (duncan@ximian.com)
*
* Copyright (C), 2002. Ximian, Inc.
*
*/
#include <gtk/gtkobject.h>
#include "canvas-proxy.h"
#include "canvas-proxy-marshal.h"
enum {
UPDATE,
REALIZE,
UNREALIZE,
MAP,
UNMAP,
COVERAGE,
DRAW,
RENDER,
POINT,
BOUNDS,
LAST_SIGNAL,
};
static GnomeCanvasItemClass *parent_class;
static guint proxy_signals [LAST_SIGNAL];
/* Class initialization */
static void
gtksharp_canvas_proxy_class_init (CanvasProxyClass *class)
{
GObjectClass *gobject_class;
GtkObjectClass *object_class;
GnomeCanvasItemClass *item_class;
gobject_class = (GObjectClass *) class;
object_class = (GtkObjectClass *) class;
item_class = (GnomeCanvasItemClass *) class;
parent_class = g_type_class_peek_parent (class);
/* void (* update) (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags); */
proxy_signals [UPDATE] = g_signal_new ("update",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, update),
NULL, NULL,
g_cclosure_user_marshal_VOID__OBJECT_DOUBLE_POINTER_INT,
G_TYPE_NONE, 3, G_TYPE_DOUBLE,
G_TYPE_POINTER, G_TYPE_INT);
/* void (* realize) (GnomeCanvasItem *item); */
proxy_signals [REALIZE] = g_signal_new ("realize",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, realize),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 0);
/* void (* unrealize) (GnomeCanvasItem *item); */
proxy_signals [UNREALIZE] = g_signal_new ("unrealize",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, unrealize),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 0);
/* void (* map) (GnomeCanvasItem *item); */
proxy_signals [MAP] = g_signal_new ("map",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, map),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 0);
/* void (* unmap) (GnomeCanvasItem *item); */
proxy_signals [UNMAP] = g_signal_new ("unmap",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, unmap),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 0);
/* void (* draw) (GnomeCanvasItem *item, GdkDrawable *drawable, */
/* int x, int y, int width, int height); */
proxy_signals [DRAW] = g_signal_new ("draw",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, draw),
NULL, NULL,
g_cclosure_user_marshal_VOID__OBJECT_INT_INT_INT_INT,
G_TYPE_NONE, 5, GDK_TYPE_DRAWABLE,
G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
/* void (* render) (GnomeCanvasItem *item, GnomeCanvasBuf *buf); */
proxy_signals [RENDER] = g_signal_new ("render",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, render),
NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1, G_TYPE_POINTER);
/* double (* point) (GnomeCanvasItem *item, double x, double y, int cx, int cy, */
/* GnomeCanvasItem **actual_item); */
proxy_signals [POINT] = g_signal_new ("point",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, point),
NULL, NULL,
g_cclosure_user_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_INT_INT_POINTER,
G_TYPE_DOUBLE, 5, G_TYPE_DOUBLE, G_TYPE_DOUBLE,
G_TYPE_INT, G_TYPE_INT, G_TYPE_POINTER);
/* void (* bounds) (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2); */
proxy_signals [BOUNDS] = g_signal_new ("bounds",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeCanvasItemClass, bounds),
NULL, NULL,
g_cclosure_user_marshal_VOID__OBJECT_POINTER_POINTER_POINTER_POINTER,
G_TYPE_NONE, 4, G_TYPE_POINTER, G_TYPE_POINTER,
G_TYPE_POINTER, G_TYPE_POINTER);
}

30
glue/canvas-proxy.h Normal file
View File

@ -0,0 +1,30 @@
/*
* canvasproxy.h
*
* Author: Duncan Mak (duncan@ximian.com)
*
* Copyright (C), 2002. Ximian, Inc.
*
*/
#ifndef CANVAS_PROXY_H
#define CANVAS_PROXY_H
#include <libgnomecanvas/gnome-canvas.h>
G_BEGIN_DECLS
typedef struct _CanvasProxy CanvasProxy;
typedef struct _CanvasProxyClass CanvasProxyClass;
struct _CanvasProxy {
GnomeCanvasItem item;
};
struct _CanvasProxyClass {
GnomeCanvasItemClass parent;
};
G_END_DECLS
#endif