summaryrefslogtreecommitdiffstats
path: root/src/display/sodipodi-ctrl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/display/sodipodi-ctrl.cpp')
-rw-r--r--src/display/sodipodi-ctrl.cpp254
1 files changed, 163 insertions, 91 deletions
diff --git a/src/display/sodipodi-ctrl.cpp b/src/display/sodipodi-ctrl.cpp
index c5a1b10a2..725ead0d6 100644
--- a/src/display/sodipodi-ctrl.cpp
+++ b/src/display/sodipodi-ctrl.cpp
@@ -29,14 +29,13 @@ enum {
static void sp_ctrl_class_init (SPCtrlClass *klass);
static void sp_ctrl_init (SPCtrl *ctrl);
static void sp_ctrl_destroy (GtkObject *object);
-static void sp_ctrl_set_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-
+static void sp_ctrl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void sp_ctrl_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
static void sp_ctrl_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags);
static void sp_ctrl_render (SPCanvasItem *item, SPCanvasBuf *buf);
static double sp_ctrl_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item);
-
static SPCanvasItemClass *parent_class;
GType
@@ -66,24 +65,36 @@ sp_ctrl_class_init (SPCtrlClass *klass)
{
GtkObjectClass *object_class;
SPCanvasItemClass *item_class;
+ GObjectClass *g_object_class;
object_class = (GtkObjectClass *) klass;
item_class = (SPCanvasItemClass *) klass;
+ g_object_class = (GObjectClass *) klass;
parent_class = (SPCanvasItemClass *)g_type_class_peek_parent (klass);
- gtk_object_add_arg_type ("SPCtrl::shape", G_TYPE_INT, G_PARAM_READWRITE, ARG_SHAPE);
- gtk_object_add_arg_type ("SPCtrl::mode", G_TYPE_INT, G_PARAM_READWRITE, ARG_MODE);
- gtk_object_add_arg_type ("SPCtrl::anchor", G_TYPE_INT, G_PARAM_READWRITE, ARG_ANCHOR);
- gtk_object_add_arg_type ("SPCtrl::size", G_TYPE_DOUBLE, G_PARAM_READWRITE, ARG_SIZE);
- gtk_object_add_arg_type ("SPCtrl::pixbuf", G_TYPE_POINTER, G_PARAM_READWRITE, ARG_PIXBUF);
- gtk_object_add_arg_type ("SPCtrl::filled", G_TYPE_BOOLEAN, G_PARAM_READWRITE, ARG_FILLED);
- gtk_object_add_arg_type ("SPCtrl::fill_color", G_TYPE_INT, G_PARAM_READWRITE, ARG_FILL_COLOR);
- gtk_object_add_arg_type ("SPCtrl::stroked", G_TYPE_BOOLEAN, G_PARAM_READWRITE, ARG_STROKED);
- gtk_object_add_arg_type ("SPCtrl::stroke_color", G_TYPE_INT, G_PARAM_READWRITE, ARG_STROKE_COLOR);
-
+ g_object_class->set_property = sp_ctrl_set_property;
+ g_object_class->get_property = sp_ctrl_get_property;
object_class->destroy = sp_ctrl_destroy;
- object_class->set_arg = sp_ctrl_set_arg;
+
+ g_object_class_install_property (g_object_class,
+ ARG_SHAPE, g_param_spec_int ("shape", "shape", "Shape", 0, G_MAXINT, SP_CTRL_SHAPE_SQUARE, (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ ARG_MODE, g_param_spec_int ("mode", "mode", "Mode", 0, G_MAXINT, SP_CTRL_MODE_COLOR, (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ ARG_ANCHOR, g_param_spec_int ("anchor", "anchor", "Anchor", 0, G_MAXINT, SP_ANCHOR_CENTER, (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ ARG_SIZE, g_param_spec_double ("size", "size", "Size", 0.0, G_MAXDOUBLE, 8.0, (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ ARG_PIXBUF, g_param_spec_pointer ("pixbuf", "pixbuf", "Pixbuf", (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ ARG_FILLED, g_param_spec_boolean ("filled", "filled", "Filled", TRUE, (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ ARG_FILL_COLOR, g_param_spec_int ("fill_color", "fill_color", "Fill Color", G_MININT, G_MAXINT, 0x000000ff, (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ ARG_STROKED, g_param_spec_boolean ("stroked", "stroked", "Stroked", FALSE, (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ ARG_STROKE_COLOR, g_param_spec_int ("stroke_color", "stroke_color", "Stroke Color", G_MININT, G_MAXINT, 0x000000ff, (GParamFlags) G_PARAM_READWRITE));
item_class->update = sp_ctrl_update;
item_class->render = sp_ctrl_render;
@@ -91,55 +102,9 @@ sp_ctrl_class_init (SPCtrlClass *klass)
}
static void
-sp_ctrl_init (SPCtrl *ctrl)
-{
- ctrl->shape = SP_CTRL_SHAPE_SQUARE;
- ctrl->mode = SP_CTRL_MODE_COLOR;
- ctrl->anchor = SP_ANCHOR_CENTER;
- ctrl->span = 3;
- ctrl->defined = TRUE;
- ctrl->shown = FALSE;
- ctrl->build = FALSE;
- ctrl->filled = 1;
- ctrl->stroked = 0;
- ctrl->fill_color = 0x000000ff;
- ctrl->stroke_color = 0x000000ff;
-
- // This way we make sure that the first sp_ctrl_update() call finishes properly;
- // in subsequent calls it will not update anything it the control hasn't moved
- // Consider for example the case in which a snap indicator is drawn at (0, 0);
- // If moveto() is called then it will not set _moved to true because we're initially already at (0, 0)
- ctrl->_moved = true; // Is this flag ever going to be set back to false? I can't find where that is supposed to happen
-
- new (&ctrl->box) Geom::IntRect(0,0,0,0);
- ctrl->cache = NULL;
- ctrl->pixbuf = NULL;
-
- ctrl->_point = Geom::Point(0,0);
-}
-
-static void
-sp_ctrl_destroy (GtkObject *object)
+sp_ctrl_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
- SPCtrl *ctrl;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (SP_IS_CTRL (object));
-
- ctrl = SP_CTRL (object);
-
- if (ctrl->cache) {
- delete[] ctrl->cache;
- ctrl->cache = NULL;
- }
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-static void
-sp_ctrl_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
SPCanvasItem *item;
SPCtrl *ctrl;
GdkPixbuf * pixbuf = NULL;
@@ -147,75 +112,182 @@ sp_ctrl_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
item = SP_CANVAS_ITEM (object);
ctrl = SP_CTRL (object);
- switch (arg_id) {
- case ARG_SHAPE:
- ctrl->shape = (SPCtrlShapeType)(GTK_VALUE_INT (*arg));
+ switch (prop_id) {
+ case ARG_SHAPE: {
+ ctrl->shape = (SPCtrlShapeType) g_value_get_int(value);
ctrl->build = FALSE;
- sp_canvas_item_request_update (item);
+ sp_canvas_item_request_update(item);
+ }
break;
- case ARG_MODE:
- ctrl->mode = (SPCtrlModeType)(GTK_VALUE_INT (*arg));
+ case ARG_MODE: {
+ ctrl->mode = (SPCtrlModeType) g_value_get_int(value);
ctrl->build = FALSE;
- sp_canvas_item_request_update (item);
+ sp_canvas_item_request_update(item);
+ }
break;
- case ARG_ANCHOR:
- ctrl->anchor = (SPAnchorType)(GTK_VALUE_INT (*arg));
+ case ARG_ANCHOR: {
+ ctrl->anchor = (SPAnchorType) g_value_get_int(value);
ctrl->build = FALSE;
- sp_canvas_item_request_update (item);
+ sp_canvas_item_request_update(item);
+ }
break;
- case ARG_SIZE:
- ctrl->span = (gint) ((GTK_VALUE_DOUBLE (*arg) - 1.0) / 2.0 + 0.5);
+ case ARG_SIZE: {
+ ctrl->span = (gint)((g_value_get_double(value) - 1.0) / 2.0 + 0.5);
ctrl->defined = (ctrl->span > 0);
ctrl->build = FALSE;
- sp_canvas_item_request_update (item);
+ sp_canvas_item_request_update(item);
+ }
break;
- case ARG_FILLED:
- ctrl->filled = GTK_VALUE_BOOL (*arg);
+ case ARG_FILLED: {
+ ctrl->filled = g_value_get_boolean(value);
ctrl->build = FALSE;
- sp_canvas_item_request_update (item);
+ sp_canvas_item_request_update(item);
+ }
break;
case ARG_FILL_COLOR: {
- guint32 fill = GTK_VALUE_INT (*arg);
+ guint32 fill = g_value_get_int(value);
ctrl->fill_color = fill;
ctrl->build = FALSE;
- sp_canvas_item_request_update (item);
- } break;
+ sp_canvas_item_request_update(item);
+ }
+ break;
- case ARG_STROKED:
- ctrl->stroked = GTK_VALUE_BOOL (*arg);
+ case ARG_STROKED: {
+ ctrl->stroked = g_value_get_boolean(value);
ctrl->build = FALSE;
- sp_canvas_item_request_update (item);
+ sp_canvas_item_request_update(item);
+ }
break;
case ARG_STROKE_COLOR: {
- guint32 stroke = GTK_VALUE_INT (*arg);
+ guint32 stroke = g_value_get_int(value);
ctrl->stroke_color = stroke;
ctrl->build = FALSE;
- sp_canvas_item_request_update (item);
- } break;
+ sp_canvas_item_request_update(item);
+ }
+ break;
- case ARG_PIXBUF:
- pixbuf = (GdkPixbuf*)(GTK_VALUE_POINTER (*arg));
- if (gdk_pixbuf_get_has_alpha (pixbuf)) {
+ case ARG_PIXBUF: {
+ pixbuf = (GdkPixbuf*) g_value_get_pointer(value);
+ if (gdk_pixbuf_get_has_alpha(pixbuf)) {
ctrl->pixbuf = pixbuf;
} else {
- ctrl->pixbuf = gdk_pixbuf_add_alpha (pixbuf, FALSE, 0, 0, 0);
- g_object_unref (pixbuf);
+ ctrl->pixbuf = gdk_pixbuf_add_alpha(pixbuf, FALSE, 0, 0, 0);
+ g_object_unref(pixbuf);
}
ctrl->build = FALSE;
+ }
break;
default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
}
}
static void
+sp_ctrl_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ SPCtrl *ctrl;
+ ctrl = SP_CTRL (object);
+
+ switch (prop_id) {
+
+ case ARG_SHAPE:
+ g_value_set_int(value, ctrl->shape);
+ break;
+
+ case ARG_MODE:
+ g_value_set_int(value, ctrl->mode);
+ break;
+
+ case ARG_ANCHOR:
+ g_value_set_int(value, ctrl->anchor);
+ break;
+
+ case ARG_SIZE:
+ g_value_set_double(value, ctrl->span);
+ break;
+
+ case ARG_FILLED:
+ g_value_set_boolean(value, ctrl->filled);
+ break;
+
+ case ARG_FILL_COLOR:
+ g_value_set_int(value, ctrl->fill_color);
+ break;
+
+ case ARG_STROKED:
+ g_value_set_boolean(value, ctrl->stroked);
+ break;
+
+ case ARG_STROKE_COLOR:
+ g_value_set_int(value, ctrl->stroke_color);
+ break;
+
+ case ARG_PIXBUF:
+ g_value_set_pointer(value, ctrl->pixbuf);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+
+}
+static void
+sp_ctrl_init (SPCtrl *ctrl)
+{
+ ctrl->shape = SP_CTRL_SHAPE_SQUARE;
+ ctrl->mode = SP_CTRL_MODE_COLOR;
+ ctrl->anchor = SP_ANCHOR_CENTER;
+ ctrl->span = 3;
+ ctrl->defined = TRUE;
+ ctrl->shown = FALSE;
+ ctrl->build = FALSE;
+ ctrl->filled = 1;
+ ctrl->stroked = 0;
+ ctrl->fill_color = 0x000000ff;
+ ctrl->stroke_color = 0x000000ff;
+
+ // This way we make sure that the first sp_ctrl_update() call finishes properly;
+ // in subsequent calls it will not update anything it the control hasn't moved
+ // Consider for example the case in which a snap indicator is drawn at (0, 0);
+ // If moveto() is called then it will not set _moved to true because we're initially already at (0, 0)
+ ctrl->_moved = true; // Is this flag ever going to be set back to false? I can't find where that is supposed to happen
+
+ new (&ctrl->box) Geom::IntRect(0,0,0,0);
+ ctrl->cache = NULL;
+ ctrl->pixbuf = NULL;
+
+ ctrl->_point = Geom::Point(0,0);
+}
+
+static void
+sp_ctrl_destroy (GtkObject *object)
+{
+ SPCtrl *ctrl;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (SP_IS_CTRL (object));
+
+ ctrl = SP_CTRL (object);
+
+ if (ctrl->cache) {
+ delete[] ctrl->cache;
+ ctrl->cache = NULL;
+ }
+
+ if (GTK_OBJECT_CLASS (parent_class)->destroy)
+ (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+}
+
+static void
sp_ctrl_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags)
{
SPCtrl *ctrl;