[gtk+] gtkbin: Complete more of a base implementation for GtkBin subclasses
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] gtkbin: Complete more of a base implementation for GtkBin subclasses
- Date: Fri, 9 Nov 2012 00:21:02 +0000 (UTC)
commit 3563d11fc6f6191cfd6c4cbaa47e554b5c66dfa0
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Thu Nov 8 18:21:01 2012 -0500
gtkbin: Complete more of a base implementation for GtkBin subclasses
Implement get_preferred_width, get_preferred_height, and size_allocate.
This allows GtkBin subclasses to be quick and easy, without the
author doing the subclassing to have to do much work.
gtk/gtkbin.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 59 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkbin.c b/gtk/gtkbin.c
index e39ef02..cd80286 100644
--- a/gtk/gtkbin.c
+++ b/gtk/gtkbin.c
@@ -56,7 +56,12 @@ static void gtk_bin_forall (GtkContainer *container,
gpointer callback_data);
static GType gtk_bin_child_type (GtkContainer *container);
-
+static void gtk_bin_get_preferred_width (GtkWidget *widget,
+ gint *minimum_width,
+ gint *natural_width);
+static void gtk_bin_get_preferred_height (GtkWidget *widget,
+ gint *minimum_height,
+ gint *natural_height);
static void gtk_bin_get_preferred_width_for_height (GtkWidget *widget,
gint height,
gint *minimum_width,
@@ -65,6 +70,8 @@ static void gtk_bin_get_preferred_height_for_width (GtkWidget
gint width,
gint *minimum_height,
gint *natural_height);
+static void gtk_bin_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
G_DEFINE_ABSTRACT_TYPE (GtkBin, gtk_bin, GTK_TYPE_CONTAINER)
@@ -74,8 +81,11 @@ gtk_bin_class_init (GtkBinClass *class)
GtkWidgetClass *widget_class = (GtkWidgetClass*) class;
GtkContainerClass *container_class = (GtkContainerClass*) class;
+ widget_class->get_preferred_width = gtk_bin_get_preferred_width;
+ widget_class->get_preferred_height = gtk_bin_get_preferred_height;
widget_class->get_preferred_width_for_height = gtk_bin_get_preferred_width_for_height;
widget_class->get_preferred_height_for_width = gtk_bin_get_preferred_height_for_width;
+ widget_class->size_allocate = gtk_bin_size_allocate;
container_class->add = gtk_bin_add;
container_class->remove = gtk_bin_remove;
@@ -209,6 +219,42 @@ get_child_padding_delta (GtkBin *bin,
*delta_v = vmin - child_vmin;
}
+static void
+gtk_bin_get_preferred_width (GtkWidget *widget,
+ gint *minimum_width,
+ gint *natural_width)
+{
+ GtkBin *bin = GTK_BIN (widget);
+ GtkBinPrivate *priv = bin->priv;
+
+ if (priv->child)
+ {
+ gint child_min, child_nat;
+ gtk_widget_get_preferred_width (priv->child,
+ &child_min, &child_nat);
+ *minimum_width = child_min;
+ *natural_width = child_nat;
+ }
+}
+
+static void
+gtk_bin_get_preferred_height (GtkWidget *widget,
+ gint *minimum_height,
+ gint *natural_height)
+{
+ GtkBin *bin = GTK_BIN (widget);
+ GtkBinPrivate *priv = bin->priv;
+
+ if (priv->child)
+ {
+ gint child_min, child_nat;
+ gtk_widget_get_preferred_height (priv->child,
+ &child_min, &child_nat);
+ *minimum_height = child_min;
+ *natural_height = child_nat;
+ }
+}
+
static void
gtk_bin_get_preferred_width_for_height (GtkWidget *widget,
gint height,
@@ -265,6 +311,18 @@ gtk_bin_get_preferred_height_for_width (GtkWidget *widget,
GTK_WIDGET_GET_CLASS (widget)->get_preferred_height (widget, minimum_height, natural_height);
}
+static void
+gtk_bin_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ GtkBin *bin = GTK_BIN (widget);
+ GtkBinPrivate *priv = bin->priv;
+
+ gtk_widget_set_allocation (widget, allocation);
+
+ if (priv->child)
+ gtk_widget_size_allocate (priv->child, allocation);
+}
/**
* gtk_bin_get_child:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]