[gtk+/treeview-refactor] Remove size_request from GtkProgressBar
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/treeview-refactor] Remove size_request from GtkProgressBar
- Date: Sat, 30 Oct 2010 08:32:06 +0000 (UTC)
commit eca2d782ce07300aedd82dce5260c4e8a1700d06
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Oct 26 23:30:48 2010 -0400
Remove size_request from GtkProgressBar
gtk/gtkprogressbar.c | 115 +++++++++++++++++++++++++++++++++++--------------
1 files changed, 82 insertions(+), 33 deletions(-)
---
diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c
index 956192e..1caac5d 100644
--- a/gtk/gtkprogressbar.c
+++ b/gtk/gtkprogressbar.c
@@ -74,23 +74,28 @@ enum {
PROP_ELLIPSIZE
};
-static void gtk_progress_bar_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void gtk_progress_bar_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void gtk_progress_bar_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
-static void gtk_progress_bar_real_update (GtkProgressBar *progress);
-static gboolean gtk_progress_bar_draw (GtkWidget *widget,
- cairo_t *cr);
-static void gtk_progress_bar_act_mode_enter (GtkProgressBar *progress);
-static void gtk_progress_bar_finalize (GObject *object);
-static void gtk_progress_bar_set_orientation (GtkProgressBar *progress,
- GtkOrientation orientation);
+static void gtk_progress_bar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gtk_progress_bar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void gtk_progress_bar_get_preferred_width (GtkWidget *widget,
+ gint *minimum,
+ gint *natural);
+static void gtk_progress_bar_get_preferred_height (GtkWidget *widget,
+ gint *minimum,
+ gint *natural);
+
+static void gtk_progress_bar_real_update (GtkProgressBar *progress);
+static gboolean gtk_progress_bar_draw (GtkWidget *widget,
+ cairo_t *cr);
+static void gtk_progress_bar_act_mode_enter (GtkProgressBar *progress);
+static void gtk_progress_bar_finalize (GObject *object);
+static void gtk_progress_bar_set_orientation (GtkProgressBar *progress,
+ GtkOrientation orientation);
G_DEFINE_TYPE_WITH_CODE (GtkProgressBar, gtk_progress_bar, GTK_TYPE_WIDGET,
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL))
@@ -109,11 +114,10 @@ gtk_progress_bar_class_init (GtkProgressBarClass *class)
gobject_class->finalize = gtk_progress_bar_finalize;
widget_class->draw = gtk_progress_bar_draw;
- widget_class->size_request = gtk_progress_bar_size_request;
+ widget_class->get_preferred_width = gtk_progress_bar_get_preferred_width;
+ widget_class->get_preferred_height = gtk_progress_bar_get_preferred_height;
- g_object_class_override_property (gobject_class,
- PROP_ORIENTATION,
- "orientation");
+ g_object_class_override_property (gobject_class, PROP_ORIENTATION, "orientation");
g_object_class_install_property (gobject_class,
PROP_INVERTED,
@@ -462,8 +466,9 @@ get_current_text (GtkProgressBar *pbar)
}
static void
-gtk_progress_bar_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
+gtk_progress_bar_get_preferred_width (GtkWidget *widget,
+ gint *minimum,
+ gint *natural)
{
GtkProgressBar *pbar;
GtkProgressBarPrivate *priv;
@@ -471,24 +476,21 @@ gtk_progress_bar_size_request (GtkWidget *widget,
gchar *buf;
PangoRectangle logical_rect;
PangoLayout *layout;
- gint width, height;
- gint xspacing, yspacing;
- gint min_width, min_height;
+ gint width;
+ gint xspacing;
+ gint min_width;
g_return_if_fail (GTK_IS_PROGRESS_BAR (widget));
- g_return_if_fail (requisition != NULL);
style = gtk_widget_get_style (widget);
gtk_widget_style_get (widget,
"xspacing", &xspacing,
- "yspacing", &yspacing,
NULL);
pbar = GTK_PROGRESS_BAR (widget);
priv = pbar->priv;
width = 2 * style->xthickness + xspacing;
- height = 2 * style->ythickness + yspacing;
if (priv->show_text)
{
@@ -515,6 +517,56 @@ gtk_progress_bar_size_request (GtkWidget *widget,
else
width += logical_rect.width;
+ g_object_unref (layout);
+ g_free (buf);
+ }
+
+ if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
+ gtk_widget_style_get (widget,
+ "min-horizontal-bar-width", &min_width,
+ NULL);
+ else
+ gtk_widget_style_get (widget,
+ "min-vertical-bar-width", &min_width,
+ NULL);
+
+ *minimum = *natural = MAX (min_width, width);
+}
+
+static void
+gtk_progress_bar_get_preferred_height (GtkWidget *widget,
+ gint *minimum,
+ gint *natural)
+{
+ GtkProgressBar *pbar;
+ GtkProgressBarPrivate *priv;
+ GtkStyle *style;
+ gchar *buf;
+ PangoRectangle logical_rect;
+ PangoLayout *layout;
+ gint height;
+ gint yspacing;
+ gint min_height;
+
+ g_return_if_fail (GTK_IS_PROGRESS_BAR (widget));
+
+ style = gtk_widget_get_style (widget);
+ gtk_widget_style_get (widget,
+ "yspacing", &yspacing,
+ NULL);
+
+ pbar = GTK_PROGRESS_BAR (widget);
+ priv = pbar->priv;
+
+ height = 2 * style->ythickness + yspacing;
+
+ if (priv->show_text)
+ {
+ buf = get_current_text (pbar);
+ layout = gtk_widget_create_pango_layout (widget, buf);
+
+ pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
+
height += logical_rect.height;
g_object_unref (layout);
@@ -523,17 +575,14 @@ gtk_progress_bar_size_request (GtkWidget *widget,
if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
gtk_widget_style_get (widget,
- "min-horizontal-bar-width", &min_width,
"min-horizontal-bar-height", &min_height,
NULL);
else
gtk_widget_style_get (widget,
- "min-vertical-bar-width", &min_width,
"min-vertical-bar-height", &min_height,
NULL);
- requisition->width = MAX (min_width, width);
- requisition->height = MAX (min_height, height);
+ *minimum = *natural = MAX (min_height, height);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]