]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkframe.c
Without setting "detail-width-chars" and "detail-height-rows"
[~andy/gtk] / gtk / gtkframe.c
index b27fdb205aa21a01e16a66f8d10083ecb17cc7cc..e118823204405cc3a5ed87d93bf4ad9cdf5e78ae 100644 (file)
@@ -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;