summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2011-04-26 16:02:36 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2011-10-06 16:12:20 -0300
commit1fb1f3eb0e8b98115cd1c28fdfab3c1053556cb6 (patch)
tree9d06c600efe4c6dc92d7be3faedf29f95d15fb77
parentb4b114b1b17f80b2ce0f41ebca8c45de75171dd8 (diff)
downloadglade-1fb1f3eb0e8b98115cd1c28fdfab3c1053556cb6.tar.gz
Added GladeCommand support to margin edit mode.
-rw-r--r--gladeui/glade-design-layout.c100
1 files changed, 71 insertions, 29 deletions
diff --git a/gladeui/glade-design-layout.c b/gladeui/glade-design-layout.c
index 9bc2bcd1..894bea7e 100644
--- a/gladeui/glade-design-layout.c
+++ b/gladeui/glade-design-layout.c
@@ -86,6 +86,7 @@ struct _GladeDesignLayoutPrivate
/* Margin edit mode */
GtkWidget *selection;
+ gint top, bottom, left, right;
gint m_dy, m_dx;
Margins margin;
@@ -411,18 +412,19 @@ glade_design_layout_button_press_event (GtkWidget *widget, GdkEventButton *ev)
return FALSE;
}
else if (priv->activity == ACTIVITY_MARGINS)
- gdl_set_cursor (priv, priv->cursors[gdl_margin_get_activity (priv->margin)]);
+ {
+ priv->m_dx = x + ((priv->margin & MARGIN_LEFT) ?
+ gtk_widget_get_margin_left (priv->selection) :
+ gtk_widget_get_margin_right (priv->selection) * -1);
+ priv->m_dy = y + ((priv->margin & MARGIN_TOP) ?
+ gtk_widget_get_margin_top (priv->selection) :
+ gtk_widget_get_margin_bottom (priv->selection) * -1);
+
+ gdl_set_cursor (priv, priv->cursors[gdl_margin_get_activity (priv->margin)]);
+ return FALSE;
+ }
else
gdl_set_cursor (priv, priv->cursors[priv->activity]);
-
- priv->m_dx = x + ((priv->margin & MARGIN_LEFT) ?
- gtk_widget_get_margin_left (priv->selection) :
- gtk_widget_get_margin_right (priv->selection) * -1);
- priv->m_dy = y + ((priv->margin & MARGIN_TOP) ?
- gtk_widget_get_margin_top (priv->selection) :
- gtk_widget_get_margin_bottom (priv->selection) * -1);
-
- return FALSE;
}
gtk_widget_get_allocation (child, &child_allocation);
@@ -454,6 +456,43 @@ glade_design_layout_button_release_event (GtkWidget *widget,
priv = GLADE_DESIGN_LAYOUT_GET_PRIVATE (widget);
+ /* Check if margins where edited and execute corresponding glade command */
+ if (priv->selection && priv->activity == ACTIVITY_MARGINS)
+ {
+ GladeWidget *gwidget = glade_widget_get_from_gobject (priv->selection);
+ gint top, bottom, left, right;
+ GladeProperty *property;
+
+ top = gtk_widget_get_margin_top (priv->selection);
+ bottom = gtk_widget_get_margin_bottom (priv->selection);
+ left = gtk_widget_get_margin_left (priv->selection);
+ right = gtk_widget_get_margin_right (priv->selection);
+
+ glade_command_push_group (_("Editing margins of %s"),
+ glade_widget_get_name (gwidget));
+ if (priv->top != top)
+ {
+ if ((property = glade_widget_get_property (gwidget, "margin-top")))
+ glade_command_set_property (property, top);
+ }
+ if (priv->bottom != bottom)
+ {
+ if ((property = glade_widget_get_property (gwidget, "margin-bottom")))
+ glade_command_set_property (property, bottom);
+ }
+ if (priv->left != left)
+ {
+ if ((property = glade_widget_get_property (gwidget, "margin-left")))
+ glade_command_set_property (property, left);
+ }
+ if (priv->right != right)
+ {
+ if ((property = glade_widget_get_property (gwidget, "margin-right")))
+ glade_command_set_property (property, right);
+ }
+ glade_command_pop_group ();
+ }
+
priv->activity = ACTIVITY_NONE;
gdl_set_cursor (priv, NULL);
@@ -855,21 +894,14 @@ draw_selection (cairo_t *cr,
}
static void
-draw_nodes (cairo_t *cr,
- gint x1, gint x2, gint x3,
- gint y1, gint y2, gint y3,
- gint radius,
- GdkRGBA *color)
+draw_node (cairo_t *cr, gint x, gint y, gint radius, GdkRGBA *c1, GdkRGBA *c2)
{
- gdk_cairo_set_source_rgba (cr, color);
+ gdk_cairo_set_source_rgba (cr, c2);
+ cairo_new_sub_path (cr);
+ cairo_arc (cr, x, y, radius, 0, 2*G_PI);
+ cairo_stroke_preserve (cr);
- cairo_arc (cr, x2, y1, radius, 0, 2*G_PI);
- cairo_fill (cr);
- cairo_arc (cr, x2, y3, radius, 0, 2*G_PI);
- cairo_fill (cr);
- cairo_arc (cr, x1, y2, radius, 0, 2*G_PI);
- cairo_fill (cr);
- cairo_arc (cr, x3, y2, radius, 0, 2*G_PI);
+ gdk_cairo_set_source_rgba (cr, c1);
cairo_fill (cr);
}
@@ -877,8 +909,8 @@ static inline void
draw_selection_nodes (cairo_t *cr,
GtkWidget *parent,
GtkWidget *widget,
- GdkRGBA *color,
- GdkRGBA *bg_color)
+ GdkRGBA *color1,
+ GdkRGBA *color2)
{
gint x1, x2, x3, y1, y2, y3;
GtkAllocation alloc;
@@ -899,13 +931,16 @@ draw_selection_nodes (cairo_t *cr,
y1 = y - gtk_widget_get_margin_top (widget);
y2 = y + h/2;
y3 = y + h + gtk_widget_get_margin_bottom (widget);
-
- draw_nodes (cr, x1, x2, x3, y1, y2, y3, OUTLINE_WIDTH + 2, bg_color);
- draw_nodes (cr, x1, x2, x3, y1, y2, y3, OUTLINE_WIDTH, color);
+
+ cairo_set_line_width (cr, OUTLINE_WIDTH);
+ draw_node (cr, x2, y1, OUTLINE_WIDTH, color1, color2);
+ draw_node (cr, x2, y3, OUTLINE_WIDTH, color1, color2);
+ draw_node (cr, x1, y2, OUTLINE_WIDTH, color1, color2);
+ draw_node (cr, x3, y2, OUTLINE_WIDTH, color1, color2);
}
static gboolean
-glade_design_layout_draw (GtkWidget * widget, cairo_t * cr)
+glade_design_layout_draw (GtkWidget *widget, cairo_t *cr)
{
GladeDesignLayoutPrivate *priv = GLADE_DESIGN_LAYOUT_GET_PRIVATE (widget);
GdkWindow *window = gtk_widget_get_window (widget);
@@ -1416,6 +1451,13 @@ _glade_design_layout_do_event (GladeDesignLayout *layout, GdkEvent *event)
if (priv->selection == NULL)
{
priv->selection = l->data;
+
+ /* Save initital margins to know which one where edited */
+ priv->top = gtk_widget_get_margin_top (priv->selection);
+ priv->bottom = gtk_widget_get_margin_bottom (priv->selection);
+ priv->left = gtk_widget_get_margin_left (priv->selection);
+ priv->right = gtk_widget_get_margin_right (priv->selection);
+
glade_project_set_pointer_mode (priv->project, GLADE_POINTER_MARGIN_MODE);
gtk_widget_queue_draw (GTK_WIDGET (layout));
return TRUE;