diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index f6cd1a3d5e..31441460e3 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -1522,12 +1522,12 @@ gtk_image_get_preferred_size (GtkImage *image, gint width, height; GtkBorder border; GtkStyleContext *context; + GtkStateFlags state; context = gtk_widget_get_style_context (GTK_WIDGET (image)); + state = gtk_widget_get_state_flags (GTK_WIDGET (image)); + gtk_style_context_get_border (context, state, &border); _gtk_icon_helper_get_size (priv->icon_helper, context, &width, &height); -G_GNUC_BEGIN_IGNORE_DEPRECATIONS - _gtk_misc_get_padding_and_border (GTK_MISC (image), &border); -G_GNUC_END_IGNORE_DEPRECATIONS width += border.left + border.right; height += border.top + border.bottom; @@ -1560,6 +1560,60 @@ gtk_image_get_baseline_align (GtkImage *image) return image->priv->baseline_align; } +static gfloat +halign_to_float (GtkWidget *widget) +{ + gfloat ret = 0.5; + + switch (gtk_widget_get_halign (widget)) + { + case GTK_ALIGN_FILL: + case GTK_ALIGN_CENTER: + ret = 0.5; + break; + case GTK_ALIGN_START: + ret = 0.0; + break; + case GTK_ALIGN_END: + ret = 1.0; + break; + case GTK_ALIGN_BASELINE: + ret = 0.0; + g_assert_not_reached (); + break; + } + + if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_LTR) + ret = 1.0 - ret; + + return ret; +} + +static gfloat +valign_to_float (GtkWidget *widget) +{ + gfloat ret = 0.5; + + switch (gtk_widget_get_valign (widget)) + { + case GTK_ALIGN_FILL: + case GTK_ALIGN_CENTER: + ret = 0.5; + break; + case GTK_ALIGN_START: + ret = 0.0; + break; + case GTK_ALIGN_END: + ret = 1.0; + break; + case GTK_ALIGN_BASELINE: + ret = 0.0; + break; + } + + return ret; +} + static gint gtk_image_draw (GtkWidget *widget, cairo_t *cr) @@ -1570,6 +1624,7 @@ gtk_image_draw (GtkWidget *widget, gint x, y, width, height, baseline; gfloat xalign, yalign; GtkBorder border; + GtkStateFlags state; g_return_val_if_fail (GTK_IS_IMAGE (widget), FALSE); @@ -1577,6 +1632,7 @@ gtk_image_draw (GtkWidget *widget, priv = image->priv; context = gtk_widget_get_style_context (widget); + state = gtk_widget_get_state_flags (widget); gtk_render_background (context, cr, 0, 0, @@ -1585,14 +1641,10 @@ gtk_image_draw (GtkWidget *widget, 0, 0, gtk_widget_get_allocated_width (widget), gtk_widget_get_allocated_height (widget)); -G_GNUC_BEGIN_IGNORE_DEPRECATIONS - gtk_misc_get_alignment (GTK_MISC (image), &xalign, &yalign); - _gtk_misc_get_padding_and_border (GTK_MISC (image), &border); -G_GNUC_END_IGNORE_DEPRECATIONS - gtk_image_get_preferred_size (image, &width, &height); + xalign = halign_to_float (widget); + yalign = valign_to_float (widget); - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_LTR) - xalign = 1.0 - xalign; + gtk_image_get_preferred_size (image, &width, &height); baseline = gtk_widget_get_allocated_baseline (widget);