From e2e8cec05c1dbe1d87eaa2089e8f1268a0ceb413 Mon Sep 17 00:00:00 2001 From: Nicola Fontana Date: Fri, 11 Jun 2010 18:26:37 +0200 Subject: [PATCH] [AdgCanvas] Added "size" property Added AdgCanvas:size and implemented required accessors. --- src/adg/adg-canvas-private.h | 1 + src/adg/adg-canvas.c | 78 ++++++++++++++++++++++++++++++++++++++++++++ src/adg/adg-canvas.h | 6 ++++ 3 files changed, 85 insertions(+) diff --git a/src/adg/adg-canvas-private.h b/src/adg/adg-canvas-private.h index 04ccef09..140ccfa6 100644 --- a/src/adg/adg-canvas-private.h +++ b/src/adg/adg-canvas-private.h @@ -29,6 +29,7 @@ G_BEGIN_DECLS typedef struct _AdgCanvasPrivate AdgCanvasPrivate; struct _AdgCanvasPrivate { + AdgPair size; AdgDress background_dress; AdgDress frame_dress; AdgTitleBlock *title_block; diff --git a/src/adg/adg-canvas.c b/src/adg/adg-canvas.c index d9b2df6d..e70624da 100644 --- a/src/adg/adg-canvas.c +++ b/src/adg/adg-canvas.c @@ -49,6 +49,7 @@ G_DEFINE_TYPE(AdgCanvas, adg_canvas, ADG_TYPE_CONTAINER); enum { PROP_0, + PROP_SIZE, PROP_BACKGROUND_DRESS, PROP_FRAME_DRESS, PROP_TITLE_BLOCK, @@ -103,6 +104,13 @@ adg_canvas_class_init(AdgCanvasClass *klass) entity_class->arrange = _adg_arrange; entity_class->render = _adg_render; + param = g_param_spec_boxed("size", + P_("Canvas Size"), + P_("The size set on this canvas: use 0 to have an automatic dimension based on the canvas extents"), + ADG_TYPE_PAIR, + G_PARAM_READWRITE); + g_object_class_install_property(gobject_class, PROP_SIZE, param); + param = adg_param_spec_dress("background-dress", P_("Background Dress"), P_("The color dress to use for the canvas background"), @@ -195,6 +203,8 @@ adg_canvas_init(AdgCanvas *canvas) ADG_TYPE_CANVAS, AdgCanvasPrivate); + data->size.x = 0; + data->size.y = 0; data->background_dress = ADG_DRESS_COLOR_BACKGROUND; data->frame_dress = ADG_DRESS_LINE_FRAME; data->title_block = NULL; @@ -233,6 +243,9 @@ _adg_get_property(GObject *object, guint prop_id, AdgCanvasPrivate *data = ((AdgCanvas *) object)->data; switch (prop_id) { + case PROP_SIZE: + g_value_set_boxed(value, &data->size); + break; case PROP_BACKGROUND_DRESS: g_value_set_int(value, data->background_dress); break; @@ -287,6 +300,9 @@ _adg_set_property(GObject *object, guint prop_id, data = canvas->data; switch (prop_id) { + case PROP_SIZE: + adg_pair_copy(&data->size, g_value_get_boxed(value)); + break; case PROP_BACKGROUND_DRESS: data->background_dress = g_value_get_int(value); break; @@ -352,6 +368,68 @@ adg_canvas_new(void) } /** + * adg_canvas_set_size: + * @canvas: an #AdgCanvas + * @size: the new size for the canvas + * + * Sets a specific size on @canvas. The x and/or y + * components of the returned #AdgPair could be %0, in which + * case the size returned by adg_entity_get_extents() on + * @canvas will be used instead. + **/ +void +adg_canvas_set_size(AdgCanvas *canvas, const AdgPair *size) +{ + g_return_if_fail(ADG_IS_CANVAS(canvas)); + g_return_if_fail(size != NULL); + + g_object_set((GObject *) canvas, "size", size, NULL); +} + +/** + * adg_canvas_set_size_explicit: + * @canvas: an #AdgCanvas + * @x: the new width of the canvas or %0 to reset + * @y: the new height of the canvas or %0 to reset + * + * A convenient function to set the size of @canvas using + * explicit coordinates. Check adg_canvas_set_size() for + * further details. + **/ +void +adg_canvas_set_size_explicit(AdgCanvas *canvas, gdouble x, gdouble y) +{ + AdgPair size; + + size.x = x; + size.y = y; + + adg_canvas_set_size(canvas, &size); +} + +/** + * adg_canvas_get_size: + * @canvas: an #AdgCanvas + * + * Gets the specific size set on @canvas. The x and/or y + * components of the returned #AdgPair could be %0, in which + * case the size returned by adg_entity_get_extents() on + * @canvas will be used instead. + * + * Returns: the explicit size set on this canvas or %NULL on errors + **/ +const AdgPair * +adg_canvas_get_size(AdgCanvas *canvas) +{ + AdgCanvasPrivate *data; + + g_return_val_if_fail(ADG_IS_CANVAS(canvas), NULL); + + data = canvas->data; + return &data->size; +} + +/** * adg_canvas_set_background_dress: * @canvas: an #AdgCanvas * @dress: the new #AdgDress to use diff --git a/src/adg/adg-canvas.h b/src/adg/adg-canvas.h index d4d202a0..3905f9c4 100644 --- a/src/adg/adg-canvas.h +++ b/src/adg/adg-canvas.h @@ -62,6 +62,12 @@ struct _AdgCanvasClass { GType adg_canvas_get_type (void) G_GNUC_CONST; AdgCanvas * adg_canvas_new (void); +void adg_canvas_set_size (AdgCanvas *canvas, + const AdgPair *pair); +void adg_canvas_set_size_explicit (AdgCanvas *canvas, + gdouble x, + gdouble y); +const AdgPair * adg_canvas_get_size (AdgCanvas *canvas); void adg_canvas_set_background_dress (AdgCanvas *canvas, AdgDress dress); AdgDress adg_canvas_get_background_dress (AdgCanvas *canvas); -- 2.11.4.GIT