X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkframe.c;h=e118823204405cc3a5ed87d93bf4ad9cdf5e78ae;hb=f35439bfacf90900e2c24f7ae3da173183c79d34;hp=b27fdb205aa21a01e16a66f8d10083ecb17cc7cc;hpb=60a409785facbef5ba61c0bb1e396ec027e02bbc;p=~andy%2Fgtk diff --git a/gtk/gtkframe.c b/gtk/gtkframe.c index b27fdb205..e11882320 100644 --- a/gtk/gtkframe.c +++ b/gtk/gtkframe.c @@ -114,7 +114,7 @@ gtk_frame_class_init (GtkFrameClass *class) P_("The horizontal alignment of the label"), 0.0, 1.0, - 0.5, + 0.0, GTK_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_LABEL_YALIGN, @@ -425,7 +425,9 @@ gtk_frame_get_label_widget (GtkFrame *frame) * of the widget. A value of 0.0 represents left alignment; * 1.0 represents right alignment. * @yalign: The y alignment of the label. A value of 0.0 aligns under - * the frame; 1.0 aligns above the frame. + * the frame; 1.0 aligns above the frame. If the values are exactly + * 0.0 or 1.0 the gap in the frame won't be painted because the label + * will be completely above or below the frame. * * Sets the alignment of the frame widget's label. The * default values for a newly created frame are 0.0 and 0.5. @@ -553,20 +555,26 @@ gtk_frame_paint (GtkWidget *widget, else xalign = 1 - frame->label_xalign; - height_extra = MAX (0, child_requisition.height - widget->style->ythickness); - height_extra *= (1 - frame->label_yalign); + height_extra = MAX (0, child_requisition.height - widget->style->ythickness) + - frame->label_yalign * child_requisition.height; y -= height_extra; height += height_extra; x2 = widget->style->xthickness + (frame->child_allocation.width - child_requisition.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD) * xalign + LABEL_SIDE_PAD; - - gtk_paint_shadow_gap (widget->style, widget->window, - widget->state, frame->shadow_type, - area, widget, "frame", - x, y, width, height, - GTK_POS_TOP, - x2, child_requisition.width + 2 * LABEL_PAD); + /* If the label is completely over or under the frame we can omit the gap */ + if (frame->label_yalign == 0.0 || frame->label_yalign == 1.0) + gtk_paint_shadow (widget->style, widget->window, + widget->state, frame->shadow_type, + area, widget, "frame", + x, y, width, height); + else + gtk_paint_shadow_gap (widget->style, widget->window, + widget->state, frame->shadow_type, + area, widget, "frame", + x, y, width, height, + GTK_POS_TOP, + x2, child_requisition.width + 2 * LABEL_PAD); } else gtk_paint_shadow (widget->style, widget->window, @@ -604,7 +612,7 @@ gtk_frame_size_request (GtkWidget *widget, requisition->width = child_requisition.width + 2 * LABEL_PAD + 2 * LABEL_SIDE_PAD; requisition->height = - MAX (0, child_requisition.height - GTK_WIDGET (widget)->style->ythickness); + MAX (0, child_requisition.height - widget->style->ythickness); } else { @@ -668,7 +676,7 @@ gtk_frame_size_allocate (GtkWidget *widget, child_allocation.x = frame->child_allocation.x + LABEL_SIDE_PAD + (frame->child_allocation.width - child_requisition.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD) * xalign + LABEL_PAD; - child_allocation.width = child_requisition.width; + child_allocation.width = MIN (child_requisition.width, new_allocation.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD); child_allocation.y = frame->child_allocation.y - MAX (child_requisition.height, widget->style->ythickness); child_allocation.height = child_requisition.height;