[gtk+/wip/cosimoc/range-gadget: 21/21] wip
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/cosimoc/range-gadget: 21/21] wip
- Date: Mon, 22 Feb 2016 03:46:58 +0000 (UTC)
commit b45309dc9310d0cbf4dad10bc92332adbf83feaa
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Sun Feb 21 19:33:51 2016 -0800
wip
gtk/gtkrange.c | 150 ++++++++++++++++++++++++++++++--------------------------
1 files changed, 80 insertions(+), 70 deletions(-)
---
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 97a45e4..58c6bab 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -1164,10 +1164,10 @@ gtk_range_get_min_slider_size (GtkRange *range)
/* Returns the gadget rect in widget coordinates */
static void
-measure_one_gadget_rect (GtkRange *range,
- GtkCssGadget *gadget,
- gboolean use_content,
- GtkAllocation *allocation_out)
+measure_one_gadget_alloc (GtkRange *range,
+ GtkCssGadget *gadget,
+ gboolean use_content,
+ GtkAllocation *allocation_out)
{
GtkAllocation widget_alloc;
@@ -1186,6 +1186,24 @@ measure_one_gadget_rect (GtkRange *range,
allocation_out->y -= widget_alloc.y;
}
+static void
+measure_one_gadget (GtkCssGadget *gadget,
+ int *width_out,
+ int *height_out)
+{
+ if (gadget)
+ {
+ gtk_css_gadget_get_preferred_size (gadget,
+ GTK_ORIENTATION_HORIZONTAL, -1,
+ width_out, NULL,
+ NULL, NULL);
+ gtk_css_gadget_get_preferred_size (gadget,
+ GTK_ORIENTATION_VERTICAL, -1,
+ height_out, NULL,
+ NULL, NULL);
+ }
+}
+
/**
* gtk_range_get_range_rect:
* @range: a #GtkRange
@@ -1219,33 +1237,33 @@ gtk_range_get_range_rect (GtkRange *range,
range_rect->width = 0;
range_rect->height = 0;
- measure_one_gadget_rect (range, priv->trough_gadget, FALSE, &allocation);
+ measure_one_gadget_alloc (range, priv->trough_gadget, FALSE, &allocation);
gdk_rectangle_union (range_rect, &allocation, range_rect);
- measure_one_gadget_rect (range, priv->slider_gadget, FALSE, &allocation);
+ measure_one_gadget_alloc (range, priv->slider_gadget, FALSE, &allocation);
gdk_rectangle_union (range_rect, &allocation, range_rect);
if (priv->stepper_a_gadget)
{
- measure_one_gadget_rect (range, priv->stepper_a_gadget, FALSE, &allocation);
+ measure_one_gadget_alloc (range, priv->stepper_a_gadget, FALSE, &allocation);
gdk_rectangle_union (range_rect, &allocation, range_rect);
}
if (priv->stepper_b_gadget)
{
- measure_one_gadget_rect (range, priv->stepper_b_gadget, FALSE, &allocation);
+ measure_one_gadget_alloc (range, priv->stepper_b_gadget, FALSE, &allocation);
gdk_rectangle_union (range_rect, &allocation, range_rect);
}
if (priv->stepper_c_gadget)
{
- measure_one_gadget_rect (range, priv->stepper_c_gadget, FALSE, &allocation);
+ measure_one_gadget_alloc (range, priv->stepper_c_gadget, FALSE, &allocation);
gdk_rectangle_union (range_rect, &allocation, range_rect);
}
if (priv->stepper_d_gadget)
{
- measure_one_gadget_rect (range, priv->stepper_d_gadget, FALSE, &allocation);
+ measure_one_gadget_alloc (range, priv->stepper_d_gadget, FALSE, &allocation);
gdk_rectangle_union (range_rect, &allocation, range_rect);
}
}
@@ -1277,7 +1295,7 @@ gtk_range_get_slider_range (GtkRange *range,
priv = range->priv;
- measure_one_gadget_rect (range, priv->slider_gadget, FALSE, &slider_alloc);
+ measure_one_gadget_alloc (range, priv->slider_gadget, FALSE, &slider_alloc);
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
{
@@ -2011,7 +2029,8 @@ gtk_range_allocate_trough (GtkCssGadget *gadget,
static void
gtk_range_allocate_one_stepper (GtkRange *range,
GtkCssGadget *gadget,
- gint size,
+ gint width,
+ gint height,
GtkAllocation *allocation,
gint baseline,
GtkAllocation *out_clip)
@@ -2019,10 +2038,8 @@ gtk_range_allocate_one_stepper (GtkRange *range,
GtkRangePrivate *priv = range->priv;
GtkAllocation gadget_clip;
- if (priv->orientation == GTK_ORIENTATION_VERTICAL)
- allocation->height = size;
- else
- allocation->width = size;
+ allocation->height = height;
+ allocation->width = width;
if (gadget)
{
@@ -2031,9 +2048,9 @@ gtk_range_allocate_one_stepper (GtkRange *range,
}
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
- allocation->y += size;
+ allocation->y += height;
else
- allocation->x += size;
+ allocation->x += width;
}
static void
@@ -2047,8 +2064,11 @@ gtk_range_size_allocate (GtkWidget *widget,
GtkAllocation gadget_alloc, gadget_clip;
GtkAllocation slider_clip, slider_alloc, highlight_clip;
GtkBorder border = { 0 };
- gint stepper_a_size = 0, stepper_b_size = 0;
- gint stepper_c_size = 0, stepper_d_size = 0;
+ gint stepper_a_width = 0, stepper_a_height = 0;
+ gint stepper_b_width = 0, stepper_b_height = 0;
+ gint stepper_c_width = 0, stepper_c_height = 0;
+ gint stepper_d_width = 0, stepper_d_height = 0;
+ gint trough_width = 0, trough_height = 0;
gtk_widget_set_allocation (widget, allocation);
baseline = gtk_widget_get_allocated_baseline (widget);
@@ -2064,50 +2084,32 @@ gtk_range_size_allocate (GtkWidget *widget,
gadget_alloc.x = allocation->x + border.left;
gadget_alloc.y = allocation->y + border.top;
- /* Determine the size of the steppers */
- if (priv->stepper_a_gadget)
- gtk_css_gadget_get_preferred_size (priv->stepper_a_gadget,
- priv->orientation,
- -1,
- &stepper_a_size, NULL,
- NULL, NULL);
- if (priv->stepper_b_gadget)
- gtk_css_gadget_get_preferred_size (priv->stepper_b_gadget,
- priv->orientation,
- -1,
- &stepper_b_size, NULL,
- NULL, NULL);
- if (priv->stepper_c_gadget)
- gtk_css_gadget_get_preferred_size (priv->stepper_c_gadget,
- priv->orientation,
- -1,
- &stepper_c_size, NULL,
- NULL, NULL);
- if (priv->stepper_d_gadget)
- gtk_css_gadget_get_preferred_size (priv->stepper_d_gadget,
- priv->orientation,
- -1,
- &stepper_d_size, NULL,
- NULL, NULL);
-
- /* Gadgets are always allocated the full opposite orientation; walk down the
- * available size along the orientation and allocate them in visible order.
+ /* Determine the minimum size of the gadgets */
+ measure_one_gadget (priv->stepper_a_gadget,
+ &stepper_a_width, &stepper_a_height);
+ measure_one_gadget (priv->stepper_a_gadget,
+ &stepper_b_width, &stepper_b_height);
+ measure_one_gadget (priv->stepper_a_gadget,
+ &stepper_c_width, &stepper_c_height);
+ measure_one_gadget (priv->stepper_a_gadget,
+ &stepper_d_width, &stepper_d_height);
+ measure_one_gadget (priv->trough_gadget,
+ &trough_width, &trough_height);
+
+ /* Walk down the available size along the orientation and allocate
+ * the gadgets in visible order.
*/
- if (priv->orientation == GTK_ORIENTATION_VERTICAL)
- gadget_alloc.width = allocation->width;
- else
- gadget_alloc.height = allocation->height;
/* Steppers A+B */
gtk_range_allocate_one_stepper (range,
priv->stepper_a_gadget,
- stepper_a_size,
+ stepper_a_width, stepper_a_height,
&gadget_alloc,
baseline,
&clip);
gtk_range_allocate_one_stepper (range,
priv->stepper_b_gadget,
- stepper_b_size,
+ stepper_b_width, stepper_b_height,
&gadget_alloc,
baseline,
&clip);
@@ -2115,8 +2117,11 @@ gtk_range_size_allocate (GtkWidget *widget,
/* Trough */
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
{
- gadget_alloc.height = allocation->height - stepper_a_size -
- stepper_b_size - stepper_c_size - stepper_d_size;
+ gadget_alloc.height =
+ MAX (trough_height, allocation->height - stepper_a_height -
+ stepper_b_height - stepper_c_height - stepper_d_height);
+ gadget_alloc.width = trough_width;
+
gtk_css_gadget_allocate (priv->trough_gadget,
&gadget_alloc,
baseline,
@@ -2126,8 +2131,11 @@ gtk_range_size_allocate (GtkWidget *widget,
}
else
{
- gadget_alloc.width = allocation->width - stepper_a_size -
- stepper_b_size - stepper_c_size - stepper_d_size;
+ gadget_alloc.height = trough_height;
+ gadget_alloc.width =
+ MAX (trough_width, allocation->width - stepper_a_width -
+ stepper_b_width - stepper_c_width - stepper_d_width);
+
gtk_css_gadget_allocate (priv->trough_gadget,
&gadget_alloc,
baseline,
@@ -2139,13 +2147,13 @@ gtk_range_size_allocate (GtkWidget *widget,
/* Steppers C+D */
gtk_range_allocate_one_stepper (range,
priv->stepper_c_gadget,
- stepper_c_size,
+ stepper_c_width, stepper_c_height,
&gadget_alloc,
baseline,
&clip);
gtk_range_allocate_one_stepper (range,
priv->stepper_d_gadget,
- stepper_d_size,
+ stepper_d_width, stepper_d_height,
&gadget_alloc,
baseline,
&clip);
@@ -2172,7 +2180,7 @@ gtk_range_size_allocate (GtkWidget *widget,
gdk_rectangle_union (&clip, &highlight_clip, &clip);
}
- gtk_widget_set_clip (widget, &clip);
+ //gtk_widget_set_clip (widget, &clip);
}
static void
@@ -2512,8 +2520,8 @@ coord_to_value (GtkRange *range,
gint slider_length;
GtkAllocation slider_alloc, trough_alloc;
- measure_one_gadget_rect (range, priv->slider_gadget, FALSE, &slider_alloc);
- measure_one_gadget_rect (range, priv->trough_gadget, TRUE, &trough_alloc);
+ measure_one_gadget_alloc (range, priv->slider_gadget, FALSE, &slider_alloc);
+ measure_one_gadget_alloc (range, priv->trough_gadget, TRUE, &trough_alloc);
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
{
@@ -2555,7 +2563,7 @@ gtk_range_key_press (GtkWidget *widget,
device = gdk_event_get_device ((GdkEvent *) event);
device = gdk_device_get_associated_device (device);
- measure_one_gadget_rect (range, priv->slider_gadget, FALSE, &slider_alloc);
+ measure_one_gadget_alloc (range, priv->slider_gadget, FALSE, &slider_alloc);
if (gtk_gesture_is_active (priv->drag_gesture) &&
device == gtk_gesture_get_device (priv->drag_gesture) &&
@@ -2592,7 +2600,7 @@ gtk_range_long_press_gesture_pressed (GtkGestureLongPress *gesture,
GtkAllocation slider_alloc;
gtk_range_update_mouse_location (range);
- measure_one_gadget_rect (range, priv->slider_gadget, FALSE, &slider_alloc);
+ measure_one_gadget_alloc (range, priv->slider_gadget, FALSE, &slider_alloc);
if (priv->mouse_location == MOUSE_SLIDER && !priv->zoom)
{
@@ -2646,7 +2654,7 @@ gtk_range_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
priv->mouse_y = y;
gtk_range_update_mouse_location (range);
- measure_one_gadget_rect (range, priv->slider_gadget, FALSE, &slider_alloc);
+ measure_one_gadget_alloc (range, priv->slider_gadget, FALSE, &slider_alloc);
g_object_get (gtk_widget_get_settings (widget),
"gtk-primary-button-warps-slider", &primary_warps,
@@ -2823,8 +2831,8 @@ update_slider_position (GtkRange *range,
gint i;
GtkAllocation slider_alloc, trough_alloc;
- measure_one_gadget_rect (range, priv->slider_gadget, FALSE, &slider_alloc);
- measure_one_gadget_rect (range, priv->trough_gadget, FALSE, &trough_alloc);
+ measure_one_gadget_alloc (range, priv->slider_gadget, FALSE, &slider_alloc);
+ measure_one_gadget_alloc (range, priv->trough_gadget, FALSE, &trough_alloc);
if (priv->zoom)
{
@@ -3477,9 +3485,11 @@ gtk_range_compute_slider_position (GtkRange *range,
{
GtkRangePrivate *priv = range->priv;
GtkAllocation trough_margin_alloc, trough_content_alloc;
+ int slider_width, slider_height;
- measure_one_gadget_rect (range, priv->trough_gadget, FALSE, &trough_margin_alloc);
- measure_one_gadget_rect (range, priv->trough_gadget, TRUE, &trough_content_alloc);
+ measure_one_gadget (priv->slider_gadget, &slider_width, &slider_height);
+ measure_one_gadget_alloc (range, priv->trough_gadget, FALSE, &trough_margin_alloc);
+ measure_one_gadget_alloc (range, priv->trough_gadget, TRUE, &trough_content_alloc);
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]