[gtk+] GtkWidget: Add margin-start and margin-end properties
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkWidget: Add margin-start and margin-end properties
- Date: Thu, 14 Nov 2013 21:04:29 +0000 (UTC)
commit 9921bec63a3e67e2c2e38ca734590909a9f734b5
Author: Yosef Or Boczko <yoseforb gmail com>
Date: Mon Oct 28 22:56:00 2013 +0200
GtkWidget: Add margin-start and margin-end properties
Add margin-{start,end} and gtk_widget_{get,set}_margin_{start,end}
and drop margin-{left,right} and gtk_widget_{get,set}_margin_{left,right}.
margin-{start,end} handle right also in RTL.
https://bugzilla.gnome.org/show_bug.cgi?id=710238
docs/reference/gtk/gtk3-sections.txt | 4 +
gtk/gtkwidget.c | 194 +++++++++++++++++++++++++++++++++-
gtk/gtkwidget.h | 18 +++-
3 files changed, 210 insertions(+), 6 deletions(-)
---
diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt
index cc56f00..5a9eec1 100644
--- a/docs/reference/gtk/gtk3-sections.txt
+++ b/docs/reference/gtk/gtk3-sections.txt
@@ -5502,6 +5502,10 @@ gtk_widget_get_margin_left
gtk_widget_set_margin_left
gtk_widget_get_margin_right
gtk_widget_set_margin_right
+gtk_widget_get_margin_start
+gtk_widget_set_margin_start
+gtk_widget_get_margin_end
+gtk_widget_set_margin_end
gtk_widget_get_margin_top
gtk_widget_set_margin_top
gtk_widget_get_margin_bottom
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 25f7bd4..c984db0 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -631,6 +631,8 @@ enum {
PROP_VALIGN,
PROP_MARGIN_LEFT,
PROP_MARGIN_RIGHT,
+ PROP_MARGIN_START,
+ PROP_MARGIN_END,
PROP_MARGIN_TOP,
PROP_MARGIN_BOTTOM,
PROP_MARGIN,
@@ -1412,6 +1414,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS
* request, the margin will be added in addition to the size from
* gtk_widget_set_size_request() for example.
*
+ * Deprecated: 3.12. Use #GtkWidget:margin-start instead.
+ *
* Since: 3.0
*/
g_object_class_install_property (gobject_class,
@@ -1433,6 +1437,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS
* request, the margin will be added in addition to the size from
* gtk_widget_set_size_request() for example.
*
+ * Deprecated: 3.12. Use #GtkWidget:margin-end instead.
+ *
* Since: 3.0
*/
g_object_class_install_property (gobject_class,
@@ -1446,6 +1452,48 @@ G_GNUC_END_IGNORE_DEPRECATIONS
GTK_PARAM_READWRITE));
/**
+ * GtkWidget:margin-start:
+ *
+ * Margin on start of widget.
+ *
+ * This property adds margin outside of the widget's normal size
+ * request, the margin will be added in addition to the size from
+ * gtk_widget_set_size_request() for example.
+ *
+ * Since: 3.12
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_MARGIN_LEFT,
+ g_param_spec_int ("margin-start",
+ P_("Margin on Start"),
+ P_("Pixels of extra space on the start"),
+ 0,
+ G_MAXINT16,
+ 0,
+ GTK_PARAM_READWRITE));
+
+ /**
+ * GtkWidget:margin-end:
+ *
+ * Margin on end of widget.
+ *
+ * This property adds margin outside of the widget's normal size
+ * request, the margin will be added in addition to the size from
+ * gtk_widget_set_size_request() for example.
+ *
+ * Since: 3.12
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_MARGIN_RIGHT,
+ g_param_spec_int ("margin-end",
+ P_("Margin on End"),
+ P_("Pixels of extra space on the end"),
+ 0,
+ G_MAXINT16,
+ 0,
+ GTK_PARAM_READWRITE));
+
+ /**
* GtkWidget:margin-top:
*
* Margin on top side of widget.
@@ -3721,6 +3769,12 @@ gtk_widget_set_property (GObject *object,
case PROP_MARGIN_RIGHT:
gtk_widget_set_margin_right (widget, g_value_get_int (value));
break;
+ case PROP_MARGIN_START:
+ gtk_widget_set_margin_start (widget, g_value_get_int (value));
+ break;
+ case PROP_MARGIN_END:
+ gtk_widget_set_margin_end (widget, g_value_get_int (value));
+ break;
case PROP_MARGIN_TOP:
gtk_widget_set_margin_top (widget, g_value_get_int (value));
break;
@@ -3729,8 +3783,8 @@ gtk_widget_set_property (GObject *object,
break;
case PROP_MARGIN:
g_object_freeze_notify (G_OBJECT (widget));
- gtk_widget_set_margin_left (widget, g_value_get_int (value));
- gtk_widget_set_margin_right (widget, g_value_get_int (value));
+ gtk_widget_set_margin_start (widget, g_value_get_int (value));
+ gtk_widget_set_margin_end (widget, g_value_get_int (value));
gtk_widget_set_margin_top (widget, g_value_get_int (value));
gtk_widget_set_margin_bottom (widget, g_value_get_int (value));
g_object_thaw_notify (G_OBJECT (widget));
@@ -14026,18 +14080,22 @@ gtk_widget_set_margin_left (GtkWidget *widget,
gint margin)
{
GtkWidgetAuxInfo *aux_info;
+ gboolean rtl;
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (margin <= G_MAXINT16);
aux_info = gtk_widget_get_aux_info (widget, TRUE);
+ rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
+
if (aux_info->margin.left == margin)
return;
aux_info->margin.left = margin;
gtk_widget_queue_resize (widget);
g_object_notify (G_OBJECT (widget), "margin-left");
+ g_object_notify (G_OBJECT (widget), rtl ? "margin-end" : "margin-start");
}
/**
@@ -14073,18 +14131,150 @@ gtk_widget_set_margin_right (GtkWidget *widget,
gint margin)
{
GtkWidgetAuxInfo *aux_info;
+ gboolean rtl;
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (margin <= G_MAXINT16);
aux_info = gtk_widget_get_aux_info (widget, TRUE);
+ rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
+
if (aux_info->margin.right == margin)
return;
aux_info->margin.right = margin;
gtk_widget_queue_resize (widget);
g_object_notify (G_OBJECT (widget), "margin-right");
+ g_object_notify (G_OBJECT (widget), rtl ? "margin-start" : "margin-end");
+}
+
+/**
+ * gtk_widget_get_margin_start:
+ * @widget: a #GtkWidget
+ *
+ * Gets the value of the #GtkWidget:margin-start property.
+ *
+ * Returns: The start margin of @widget
+ *
+ * Since: 3.12
+ */
+gint
+gtk_widget_get_margin_start (GtkWidget *widget)
+{
+ const GtkWidgetAuxInfo *aux_info;
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
+
+ aux_info = _gtk_widget_get_aux_info_or_defaults (widget);
+
+ if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
+ return aux_info->margin.right;
+ else
+ return aux_info->margin.left;
+}
+
+/**
+ * gtk_widget_set_margin_start:
+ * @widget: a #GtkWidget
+ * @margin: the start margin
+ *
+ * Sets the start margin of @widget.
+ * See the #GtkWidget:margin-start property.
+ *
+ * Since: 3.12
+ */
+void
+gtk_widget_set_margin_start (GtkWidget *widget,
+ gint margin)
+{
+ GtkWidgetAuxInfo *aux_info;
+ gint16 *start;
+ gboolean rtl;
+
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+ g_return_if_fail (margin <= G_MAXINT16);
+
+ aux_info = gtk_widget_get_aux_info (widget, TRUE);
+
+ rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
+
+ if (rtl)
+ start = &aux_info->margin.right;
+ else
+ start = &aux_info->margin.left;
+
+ if (*start == margin)
+ return;
+
+ *start = margin;
+ gtk_widget_queue_resize (widget);
+ g_object_notify (G_OBJECT (widget), "margin-start");
+ g_object_notify (G_OBJECT (widget), rtl ? "margin-right" : "margin-left");
+}
+
+/**
+ * gtk_widget_get_margin_end:
+ * @widget: a #GtkWidget
+ *
+ * Gets the value of the #GtkWidget:margin-end property.
+ *
+ * Returns: The end margin of @widget
+ *
+ * Since: 3.12
+ */
+gint
+gtk_widget_get_margin_end (GtkWidget *widget)
+{
+ const GtkWidgetAuxInfo *aux_info;
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
+
+ aux_info = _gtk_widget_get_aux_info_or_defaults (widget);
+
+ if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
+ return aux_info->margin.left;
+ else
+ return aux_info->margin.right;
+}
+
+/**
+ * gtk_widget_set_margin_end:
+ * @widget: a #GtkWidget
+ * @margin: the end margin
+ *
+ * Sets the end margin of @widget.
+ * See the #GtkWidget:margin-end property.
+ *
+ * Since: 3.12
+ */
+void
+gtk_widget_set_margin_end (GtkWidget *widget,
+ gint margin)
+{
+ GtkWidgetAuxInfo *aux_info;
+ gint16 *end;
+ gboolean rtl;
+
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+ g_return_if_fail (margin <= G_MAXINT16);
+
+ aux_info = gtk_widget_get_aux_info (widget, TRUE);
+
+ rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
+
+ if (rtl)
+ end = &aux_info->margin.left;
+ else
+ end = &aux_info->margin.right;
+
+ if (*end == margin)
+ return;
+
+ *end = margin;
+ gtk_widget_queue_resize (widget);
+ g_object_notify (G_OBJECT (widget), "margin-end");
+ g_object_notify (G_OBJECT (widget), rtl ? "margin-left" : "margin-right");
}
/**
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index 4c893c1..8c5df6a 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -920,16 +920,26 @@ GtkAlign gtk_widget_get_valign_with_baseline (GtkWidget *widget);
GDK_AVAILABLE_IN_ALL
void gtk_widget_set_valign (GtkWidget *widget,
GtkAlign align);
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_3_12_FOR(gtk_widget_get_margin_start)
gint gtk_widget_get_margin_left (GtkWidget *widget);
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_3_12_FOR(gtk_widget_set_margin_start)
void gtk_widget_set_margin_left (GtkWidget *widget,
gint margin);
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_3_12_FOR(gtk_widget_get_margin_end)
gint gtk_widget_get_margin_right (GtkWidget *widget);
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_3_12_FOR(gtk_widget_set_margin_end)
void gtk_widget_set_margin_right (GtkWidget *widget,
gint margin);
+GDK_AVAILABLE_IN_3_12
+gint gtk_widget_get_margin_start (GtkWidget *widget);
+GDK_AVAILABLE_IN_3_12
+void gtk_widget_set_margin_start (GtkWidget *widget,
+ gint margin);
+GDK_AVAILABLE_IN_3_12
+gint gtk_widget_get_margin_end (GtkWidget *widget);
+GDK_AVAILABLE_IN_3_12
+void gtk_widget_set_margin_end (GtkWidget *widget,
+ gint margin);
GDK_AVAILABLE_IN_ALL
gint gtk_widget_get_margin_top (GtkWidget *widget);
GDK_AVAILABLE_IN_ALL
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]