[gtk+/native-layout] Implemented GtkExtendedLayout on GtkViewport
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/native-layout] Implemented GtkExtendedLayout on GtkViewport
- Date: Tue, 6 Apr 2010 21:16:35 +0000 (UTC)
commit 388ad4090c5b91f5265b3bcb7b8bfae99bf023f4
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Tue Apr 6 17:15:50 2010 -0400
Implemented GtkExtendedLayout on GtkViewport
gtk/gtkviewport.c | 74 ++++++++++++++++++++++++++++++++--------------------
1 files changed, 45 insertions(+), 29 deletions(-)
---
diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c
index 2890b61..404af32 100644
--- a/gtk/gtkviewport.c
+++ b/gtk/gtkviewport.c
@@ -61,8 +61,6 @@ static gint gtk_viewport_expose (GtkWidget *widget,
GdkEventExpose *event);
static void gtk_viewport_add (GtkContainer *container,
GtkWidget *widget);
-static void gtk_viewport_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
static void gtk_viewport_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_viewport_adjustment_value_changed (GtkAdjustment *adjustment,
@@ -70,7 +68,11 @@ static void gtk_viewport_adjustment_value_changed (GtkAdjustment *adjustment,
static void gtk_viewport_style_set (GtkWidget *widget,
GtkStyle *previous_style);
-G_DEFINE_TYPE (GtkViewport, gtk_viewport, GTK_TYPE_BIN)
+static void gtk_viewport_extended_layout_init (GtkExtendedLayoutIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GtkViewport, gtk_viewport, GTK_TYPE_BIN,
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_EXTENDED_LAYOUT,
+ gtk_viewport_extended_layout_init))
static void
gtk_viewport_class_init (GtkViewportClass *class)
@@ -93,7 +95,6 @@ gtk_viewport_class_init (GtkViewportClass *class)
widget_class->realize = gtk_viewport_realize;
widget_class->unrealize = gtk_viewport_unrealize;
widget_class->expose_event = gtk_viewport_expose;
- widget_class->size_request = gtk_viewport_size_request;
widget_class->size_allocate = gtk_viewport_size_allocate;
widget_class->style_set = gtk_viewport_style_set;
@@ -726,31 +727,6 @@ gtk_viewport_add (GtkContainer *container,
}
static void
-gtk_viewport_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
-{
- GtkBin *bin = GTK_BIN (widget);
- GtkRequisition child_requisition;
-
- requisition->width = GTK_CONTAINER (widget)->border_width;
-
- requisition->height = GTK_CONTAINER (widget)->border_width;
-
- if (GTK_VIEWPORT (widget)->shadow_type != GTK_SHADOW_NONE)
- {
- requisition->width += 2 * widget->style->xthickness;
- requisition->height += 2 * widget->style->ythickness;
- }
-
- if (bin->child && gtk_widget_get_visible (bin->child))
- {
- gtk_widget_size_request (bin->child, &child_requisition);
- requisition->width += child_requisition.width;
- requisition->height += child_requisition.height;
- }
-}
-
-static void
gtk_viewport_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
@@ -853,5 +829,45 @@ gtk_viewport_style_set (GtkWidget *widget,
}
}
+static void
+gtk_viewport_get_desired_size (GtkExtendedLayout *layout,
+ GtkRequisition *minimum_size,
+ GtkRequisition *natural_size)
+{
+ GtkWidget *child;
+ GtkRequisition child_min, child_nat;
+
+ child = gtk_bin_get_child (GTK_BIN (layout));
+
+ minimum_size->width = GTK_CONTAINER (layout)->border_width;
+ minimum_size->height = GTK_CONTAINER (layout)->border_width;
+ natural_size->width = GTK_CONTAINER (layout)->border_width;
+ natural_size->height = GTK_CONTAINER (layout)->border_width;
+
+ if (GTK_VIEWPORT (layout)->shadow_type != GTK_SHADOW_NONE)
+ {
+ minimum_size->width += 2 * GTK_WIDGET (layout)->style->xthickness;
+ minimum_size->height += 2 * GTK_WIDGET (layout)->style->ythickness;
+ natural_size->width += 2 * GTK_WIDGET (layout)->style->xthickness;
+ natural_size->height += 2 * GTK_WIDGET (layout)->style->ythickness;
+ }
+
+ if (child && gtk_widget_get_visible (child))
+ {
+ gtk_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (child), &child_min, &child_nat);
+
+ minimum_size->width += child_min.width;
+ minimum_size->height += child_min.height;
+ natural_size->width += child_nat.width;
+ natural_size->height += child_nat.height;
+ }
+}
+
+static void
+gtk_viewport_extended_layout_init (GtkExtendedLayoutIface *iface)
+{
+ iface->get_desired_size = gtk_viewport_get_desired_size;
+}
+
#define __GTK_VIEWPORT_C__
#include "gtkaliasdef.c"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]