- GtkArrow *arrow = GTK_ARROW (widget);
- GtkArrowPrivate *priv = arrow->priv;
- GtkAllocation allocation;
- GtkMisc *misc = GTK_MISC (widget);
- GtkShadowType shadow_type;
- GtkStateType state;
- gint width, height;
- gint x, y;
- gint extent;
- gint xpad, ypad;
- gfloat xalign, yalign;
- GtkArrowType effective_arrow_type;
- gfloat arrow_scaling;
-
- gtk_widget_style_get (widget, "arrow-scaling", &arrow_scaling, NULL);
-
- gtk_widget_get_allocation (widget, &allocation);
- gtk_misc_get_padding (misc, &xpad, &ypad);
- gtk_misc_get_alignment (misc, &xalign, &yalign);
-
- width = allocation.width - xpad * 2;
- height = allocation.height - ypad * 2;
- extent = MIN (width, height) * arrow_scaling;
- effective_arrow_type = priv->arrow_type;
-
- if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_LTR)
- {
- xalign = 1.0 - xalign;
- if (priv->arrow_type == GTK_ARROW_LEFT)
- effective_arrow_type = GTK_ARROW_RIGHT;
- else if (priv->arrow_type == GTK_ARROW_RIGHT)
- effective_arrow_type = GTK_ARROW_LEFT;
- }
-
- x = floor (allocation.x + xpad + ((allocation.width - extent) * xalign));
- y = floor (allocation.y + ypad + ((allocation.height - extent) * yalign));
-
- shadow_type = priv->shadow_type;
-
- state = gtk_widget_get_state (widget);
-
- if (state == GTK_STATE_ACTIVE)
- {
- if (shadow_type == GTK_SHADOW_IN)
- shadow_type = GTK_SHADOW_OUT;
- else if (shadow_type == GTK_SHADOW_OUT)
- shadow_type = GTK_SHADOW_IN;
- else if (shadow_type == GTK_SHADOW_ETCHED_IN)
- shadow_type = GTK_SHADOW_ETCHED_OUT;
- else if (shadow_type == GTK_SHADOW_ETCHED_OUT)
- shadow_type = GTK_SHADOW_ETCHED_IN;
- }
-
- gtk_paint_arrow (gtk_widget_get_style (widget),
- gtk_widget_get_window (widget),
- state, shadow_type,
- &event->area, widget, "arrow",
- effective_arrow_type, TRUE,
- x, y, extent, extent);