Blame gtk/gtkalignment.c

Packit Service fb6fa5
/* GTK - The GIMP Toolkit
Packit Service fb6fa5
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Lesser General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Lesser General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Lesser General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
/*
Packit Service fb6fa5
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
Packit Service fb6fa5
 * file for a list of people on the GTK+ Team.  See the ChangeLog
Packit Service fb6fa5
 * files for a list of changes.  These files are distributed with
Packit Service fb6fa5
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * SECTION:gtkalignment
Packit Service fb6fa5
 * @Short_description: A widget which controls the alignment and size of its child
Packit Service fb6fa5
 * @Title: GtkAlignment
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The #GtkAlignment widget controls the alignment and size of its child widget.
Packit Service fb6fa5
 * It has four settings: xscale, yscale, xalign, and yalign.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The scale settings are used to specify how much the child widget should
Packit Service fb6fa5
 * expand to fill the space allocated to the #GtkAlignment.
Packit Service fb6fa5
 * The values can range from 0 (meaning the child doesn't expand at all) to
Packit Service fb6fa5
 * 1 (meaning the child expands to fill all of the available space).
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The align settings are used to place the child widget within the available
Packit Service fb6fa5
 * area. The values range from 0 (top or left) to 1 (bottom or right).
Packit Service fb6fa5
 * Of course, if the scale settings are both set to 1, the alignment settings
Packit Service fb6fa5
 * have no effect.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include "config.h"
Packit Service fb6fa5
#include "gtkalignment.h"
Packit Service fb6fa5
#include "gtkprivate.h"
Packit Service fb6fa5
#include "gtkintl.h"
Packit Service fb6fa5
#include "gtkalias.h"
Packit Service fb6fa5
Packit Service fb6fa5
enum {
Packit Service fb6fa5
  PROP_0,
Packit Service fb6fa5
Packit Service fb6fa5
  PROP_XALIGN,
Packit Service fb6fa5
  PROP_YALIGN,
Packit Service fb6fa5
  PROP_XSCALE,
Packit Service fb6fa5
  PROP_YSCALE,
Packit Service fb6fa5
Packit Service fb6fa5
  PROP_TOP_PADDING,
Packit Service fb6fa5
  PROP_BOTTOM_PADDING,
Packit Service fb6fa5
  PROP_LEFT_PADDING,
Packit Service fb6fa5
  PROP_RIGHT_PADDING
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
#define GTK_ALIGNMENT_GET_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_ALIGNMENT, GtkAlignmentPrivate))
Packit Service fb6fa5
Packit Service fb6fa5
struct _GtkAlignmentPrivate
Packit Service fb6fa5
{
Packit Service fb6fa5
  guint padding_top;
Packit Service fb6fa5
  guint padding_bottom;
Packit Service fb6fa5
  guint padding_left;
Packit Service fb6fa5
  guint padding_right;
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static void gtk_alignment_size_request  (GtkWidget         *widget,
Packit Service fb6fa5
					 GtkRequisition    *requisition);
Packit Service fb6fa5
static void gtk_alignment_size_allocate (GtkWidget         *widget,
Packit Service fb6fa5
					 GtkAllocation     *allocation);
Packit Service fb6fa5
static void gtk_alignment_set_property (GObject         *object,
Packit Service fb6fa5
                                        guint            prop_id,
Packit Service fb6fa5
                                        const GValue    *value,
Packit Service fb6fa5
                                        GParamSpec      *pspec);
Packit Service fb6fa5
static void gtk_alignment_get_property (GObject         *object,
Packit Service fb6fa5
                                        guint            prop_id,
Packit Service fb6fa5
                                        GValue          *value,
Packit Service fb6fa5
                                        GParamSpec      *pspec);
Packit Service fb6fa5
Packit Service fb6fa5
G_DEFINE_TYPE (GtkAlignment, gtk_alignment, GTK_TYPE_BIN)
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_alignment_class_init (GtkAlignmentClass *class)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GObjectClass *gobject_class;
Packit Service fb6fa5
  GtkWidgetClass *widget_class;
Packit Service fb6fa5
Packit Service fb6fa5
  gobject_class = (GObjectClass*) class;
Packit Service fb6fa5
  widget_class = (GtkWidgetClass*) class;
Packit Service fb6fa5
  
Packit Service fb6fa5
  gobject_class->set_property = gtk_alignment_set_property;
Packit Service fb6fa5
  gobject_class->get_property = gtk_alignment_get_property;
Packit Service fb6fa5
Packit Service fb6fa5
  widget_class->size_request = gtk_alignment_size_request;
Packit Service fb6fa5
  widget_class->size_allocate = gtk_alignment_size_allocate;
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_class_install_property (gobject_class,
Packit Service fb6fa5
                                   PROP_XALIGN,
Packit Service fb6fa5
                                   g_param_spec_float("xalign",
Packit Service fb6fa5
                                                      P_("Horizontal alignment"),
Packit Service fb6fa5
                                                      P_("Horizontal position of child in available space. 0.0 is left aligned, 1.0 is right aligned"),
Packit Service fb6fa5
                                                      0.0,
Packit Service fb6fa5
                                                      1.0,
Packit Service fb6fa5
                                                      0.5,
Packit Service fb6fa5
                                                      GTK_PARAM_READWRITE));
Packit Service fb6fa5
   
Packit Service fb6fa5
  g_object_class_install_property (gobject_class,
Packit Service fb6fa5
                                   PROP_YALIGN,
Packit Service fb6fa5
                                   g_param_spec_float("yalign",
Packit Service fb6fa5
                                                      P_("Vertical alignment"),
Packit Service fb6fa5
                                                      P_("Vertical position of child in available space. 0.0 is top aligned, 1.0 is bottom aligned"),
Packit Service fb6fa5
                                                      0.0,
Packit Service fb6fa5
                                                      1.0,
Packit Service fb6fa5
						      0.5,
Packit Service fb6fa5
                                                      GTK_PARAM_READWRITE));
Packit Service fb6fa5
  g_object_class_install_property (gobject_class,
Packit Service fb6fa5
                                   PROP_XSCALE,
Packit Service fb6fa5
                                   g_param_spec_float("xscale",
Packit Service fb6fa5
                                                      P_("Horizontal scale"),
Packit Service fb6fa5
                                                      P_("If available horizontal space is bigger than needed for the child, how much of it to use for the child. 0.0 means none, 1.0 means all"),
Packit Service fb6fa5
                                                      0.0,
Packit Service fb6fa5
                                                      1.0,
Packit Service fb6fa5
                                                      1.0,
Packit Service fb6fa5
                                                      GTK_PARAM_READWRITE));
Packit Service fb6fa5
  g_object_class_install_property (gobject_class,
Packit Service fb6fa5
                                   PROP_YSCALE,
Packit Service fb6fa5
                                   g_param_spec_float("yscale",
Packit Service fb6fa5
                                                      P_("Vertical scale"),
Packit Service fb6fa5
                                                      P_("If available vertical space is bigger than needed for the child, how much of it to use for the child. 0.0 means none, 1.0 means all"),
Packit Service fb6fa5
                                                      0.0,
Packit Service fb6fa5
                                                      1.0,
Packit Service fb6fa5
                                                      1.0,
Packit Service fb6fa5
                                                      GTK_PARAM_READWRITE));
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * GtkAlignment:top-padding:
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The padding to insert at the top of the widget.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.4
Packit Service fb6fa5
 */
Packit Service fb6fa5
  g_object_class_install_property (gobject_class,
Packit Service fb6fa5
                                   PROP_TOP_PADDING,
Packit Service fb6fa5
                                   g_param_spec_uint("top-padding",
Packit Service fb6fa5
                                                      P_("Top Padding"),
Packit Service fb6fa5
                                                      P_("The padding to insert at the top of the widget."),
Packit Service fb6fa5
                                                      0,
Packit Service fb6fa5
                                                      G_MAXINT,
Packit Service fb6fa5
                                                      0,
Packit Service fb6fa5
                                                      GTK_PARAM_READWRITE));
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * GtkAlignment:bottom-padding:
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The padding to insert at the bottom of the widget.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.4
Packit Service fb6fa5
 */
Packit Service fb6fa5
  g_object_class_install_property (gobject_class,
Packit Service fb6fa5
                                   PROP_BOTTOM_PADDING,
Packit Service fb6fa5
                                   g_param_spec_uint("bottom-padding",
Packit Service fb6fa5
                                                      P_("Bottom Padding"),
Packit Service fb6fa5
                                                      P_("The padding to insert at the bottom of the widget."),
Packit Service fb6fa5
                                                      0,
Packit Service fb6fa5
                                                      G_MAXINT,
Packit Service fb6fa5
                                                      0,
Packit Service fb6fa5
                                                      GTK_PARAM_READWRITE));
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * GtkAlignment:left-padding:
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The padding to insert at the left of the widget.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.4
Packit Service fb6fa5
 */
Packit Service fb6fa5
  g_object_class_install_property (gobject_class,
Packit Service fb6fa5
                                   PROP_LEFT_PADDING,
Packit Service fb6fa5
                                   g_param_spec_uint("left-padding",
Packit Service fb6fa5
                                                      P_("Left Padding"),
Packit Service fb6fa5
                                                      P_("The padding to insert at the left of the widget."),
Packit Service fb6fa5
                                                      0,
Packit Service fb6fa5
                                                      G_MAXINT,
Packit Service fb6fa5
                                                      0,
Packit Service fb6fa5
                                                      GTK_PARAM_READWRITE));
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * GtkAlignment:right-padding:
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The padding to insert at the right of the widget.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.4
Packit Service fb6fa5
 */
Packit Service fb6fa5
  g_object_class_install_property (gobject_class,
Packit Service fb6fa5
                                   PROP_RIGHT_PADDING,
Packit Service fb6fa5
                                   g_param_spec_uint("right-padding",
Packit Service fb6fa5
                                                      P_("Right Padding"),
Packit Service fb6fa5
                                                      P_("The padding to insert at the right of the widget."),
Packit Service fb6fa5
                                                      0,
Packit Service fb6fa5
                                                      G_MAXINT,
Packit Service fb6fa5
                                                      0,
Packit Service fb6fa5
                                                      GTK_PARAM_READWRITE));
Packit Service fb6fa5
Packit Service fb6fa5
  g_type_class_add_private (gobject_class, sizeof (GtkAlignmentPrivate));  
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_alignment_init (GtkAlignment *alignment)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkAlignmentPrivate *priv;
Packit Service fb6fa5
  
Packit Service fb6fa5
  gtk_widget_set_has_window (GTK_WIDGET (alignment), FALSE);
Packit Service fb6fa5
  gtk_widget_set_redraw_on_allocate (GTK_WIDGET (alignment), FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  alignment->xalign = 0.5;
Packit Service fb6fa5
  alignment->yalign = 0.5;
Packit Service fb6fa5
  alignment->xscale = 1.0;
Packit Service fb6fa5
  alignment->yscale = 1.0;
Packit Service fb6fa5
Packit Service fb6fa5
  /* Initialize padding with default values: */
Packit Service fb6fa5
  priv = GTK_ALIGNMENT_GET_PRIVATE (alignment);
Packit Service fb6fa5
  priv->padding_top = 0;
Packit Service fb6fa5
  priv->padding_bottom = 0;
Packit Service fb6fa5
  priv->padding_left = 0;
Packit Service fb6fa5
  priv->padding_right = 0;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_alignment_new:
Packit Service fb6fa5
 * @xalign: the horizontal alignment of the child widget, from 0 (left) to 1
Packit Service fb6fa5
 *  (right).
Packit Service fb6fa5
 * @yalign: the vertical alignment of the child widget, from 0 (top) to 1
Packit Service fb6fa5
 *  (bottom).
Packit Service fb6fa5
 * @xscale: the amount that the child widget expands horizontally to fill up
Packit Service fb6fa5
 *  unused space, from 0 to 1.
Packit Service fb6fa5
 *  A value of 0 indicates that the child widget should never expand.
Packit Service fb6fa5
 *  A value of 1 indicates that the child widget will expand to fill all of the
Packit Service fb6fa5
 *  space allocated for the #GtkAlignment.
Packit Service fb6fa5
 * @yscale: the amount that the child widget expands vertically to fill up
Packit Service fb6fa5
 *  unused space, from 0 to 1. The values are similar to @xscale.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Creates a new #GtkAlignment.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Returns: the new #GtkAlignment.
Packit Service fb6fa5
 */
Packit Service fb6fa5
GtkWidget*
Packit Service fb6fa5
gtk_alignment_new (gfloat xalign,
Packit Service fb6fa5
		   gfloat yalign,
Packit Service fb6fa5
		   gfloat xscale,
Packit Service fb6fa5
		   gfloat yscale)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkAlignment *alignment;
Packit Service fb6fa5
Packit Service fb6fa5
  alignment = g_object_new (GTK_TYPE_ALIGNMENT, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  alignment->xalign = CLAMP (xalign, 0.0, 1.0);
Packit Service fb6fa5
  alignment->yalign = CLAMP (yalign, 0.0, 1.0);
Packit Service fb6fa5
  alignment->xscale = CLAMP (xscale, 0.0, 1.0);
Packit Service fb6fa5
  alignment->yscale = CLAMP (yscale, 0.0, 1.0);
Packit Service fb6fa5
Packit Service fb6fa5
  return GTK_WIDGET (alignment);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_alignment_set_property (GObject         *object,
Packit Service fb6fa5
			    guint            prop_id,
Packit Service fb6fa5
			    const GValue    *value,
Packit Service fb6fa5
			    GParamSpec      *pspec)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkAlignment *alignment;
Packit Service fb6fa5
  GtkAlignmentPrivate *priv;
Packit Service fb6fa5
  
Packit Service fb6fa5
  alignment = GTK_ALIGNMENT (object);
Packit Service fb6fa5
  priv = GTK_ALIGNMENT_GET_PRIVATE (alignment);
Packit Service fb6fa5
  
Packit Service fb6fa5
  switch (prop_id)
Packit Service fb6fa5
    {
Packit Service fb6fa5
    case PROP_XALIGN:
Packit Service fb6fa5
      gtk_alignment_set (alignment,
Packit Service fb6fa5
			 g_value_get_float (value),
Packit Service fb6fa5
			 alignment->yalign,
Packit Service fb6fa5
			 alignment->xscale,
Packit Service fb6fa5
			 alignment->yscale);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_YALIGN:
Packit Service fb6fa5
      gtk_alignment_set (alignment,
Packit Service fb6fa5
			 alignment->xalign,
Packit Service fb6fa5
			 g_value_get_float (value),
Packit Service fb6fa5
			 alignment->xscale,
Packit Service fb6fa5
			 alignment->yscale);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_XSCALE:
Packit Service fb6fa5
      gtk_alignment_set (alignment,
Packit Service fb6fa5
			 alignment->xalign,
Packit Service fb6fa5
			 alignment->yalign,
Packit Service fb6fa5
			 g_value_get_float (value),
Packit Service fb6fa5
			 alignment->yscale);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_YSCALE:
Packit Service fb6fa5
      gtk_alignment_set (alignment,
Packit Service fb6fa5
			 alignment->xalign,
Packit Service fb6fa5
			 alignment->yalign,
Packit Service fb6fa5
			 alignment->xscale,
Packit Service fb6fa5
			 g_value_get_float (value));
Packit Service fb6fa5
      break;
Packit Service fb6fa5
      
Packit Service fb6fa5
    /* Padding: */
Packit Service fb6fa5
    case PROP_TOP_PADDING:
Packit Service fb6fa5
      gtk_alignment_set_padding (alignment,
Packit Service fb6fa5
			 g_value_get_uint (value),
Packit Service fb6fa5
			 priv->padding_bottom,
Packit Service fb6fa5
			 priv->padding_left,
Packit Service fb6fa5
			 priv->padding_right);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_BOTTOM_PADDING:
Packit Service fb6fa5
      gtk_alignment_set_padding (alignment,
Packit Service fb6fa5
			 priv->padding_top,
Packit Service fb6fa5
			 g_value_get_uint (value),
Packit Service fb6fa5
			 priv->padding_left,
Packit Service fb6fa5
			 priv->padding_right);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_LEFT_PADDING:
Packit Service fb6fa5
      gtk_alignment_set_padding (alignment,
Packit Service fb6fa5
			 priv->padding_top,
Packit Service fb6fa5
			 priv->padding_bottom,
Packit Service fb6fa5
			 g_value_get_uint (value),
Packit Service fb6fa5
			 priv->padding_right);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_RIGHT_PADDING:
Packit Service fb6fa5
      gtk_alignment_set_padding (alignment,
Packit Service fb6fa5
			 priv->padding_top,
Packit Service fb6fa5
			 priv->padding_bottom,
Packit Service fb6fa5
			 priv->padding_left,
Packit Service fb6fa5
			 g_value_get_uint (value));
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    
Packit Service fb6fa5
    default:
Packit Service fb6fa5
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_alignment_get_property (GObject         *object,
Packit Service fb6fa5
			    guint            prop_id,
Packit Service fb6fa5
			    GValue          *value,
Packit Service fb6fa5
			    GParamSpec      *pspec)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkAlignment *alignment;
Packit Service fb6fa5
  GtkAlignmentPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  alignment = GTK_ALIGNMENT (object);
Packit Service fb6fa5
  priv = GTK_ALIGNMENT_GET_PRIVATE (alignment);
Packit Service fb6fa5
   
Packit Service fb6fa5
  switch (prop_id)
Packit Service fb6fa5
    {
Packit Service fb6fa5
    case PROP_XALIGN:
Packit Service fb6fa5
      g_value_set_float(value, alignment->xalign);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_YALIGN:
Packit Service fb6fa5
      g_value_set_float(value, alignment->yalign);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_XSCALE:
Packit Service fb6fa5
      g_value_set_float(value, alignment->xscale);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_YSCALE:
Packit Service fb6fa5
      g_value_set_float(value, alignment->yscale);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
Packit Service fb6fa5
    /* Padding: */
Packit Service fb6fa5
    case PROP_TOP_PADDING:
Packit Service fb6fa5
      g_value_set_uint (value, priv->padding_top);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_BOTTOM_PADDING:
Packit Service fb6fa5
      g_value_set_uint (value, priv->padding_bottom);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_LEFT_PADDING:
Packit Service fb6fa5
      g_value_set_uint (value, priv->padding_left);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case PROP_RIGHT_PADDING:
Packit Service fb6fa5
      g_value_set_uint (value, priv->padding_right);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
      
Packit Service fb6fa5
    default:
Packit Service fb6fa5
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_alignment_set:
Packit Service fb6fa5
 * @alignment: a #GtkAlignment.
Packit Service fb6fa5
 * @xalign: the horizontal alignment of the child widget, from 0 (left) to 1
Packit Service fb6fa5
 *  (right).
Packit Service fb6fa5
 * @yalign: the vertical alignment of the child widget, from 0 (top) to 1
Packit Service fb6fa5
 *  (bottom).
Packit Service fb6fa5
 * @xscale: the amount that the child widget expands horizontally to fill up
Packit Service fb6fa5
 *  unused space, from 0 to 1.
Packit Service fb6fa5
 *  A value of 0 indicates that the child widget should never expand.
Packit Service fb6fa5
 *  A value of 1 indicates that the child widget will expand to fill all of the
Packit Service fb6fa5
 *  space allocated for the #GtkAlignment.
Packit Service fb6fa5
 * @yscale: the amount that the child widget expands vertically to fill up
Packit Service fb6fa5
 *  unused space, from 0 to 1. The values are similar to @xscale.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the #GtkAlignment values.
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_alignment_set (GtkAlignment *alignment,
Packit Service fb6fa5
		   gfloat        xalign,
Packit Service fb6fa5
		   gfloat        yalign,
Packit Service fb6fa5
		   gfloat        xscale,
Packit Service fb6fa5
		   gfloat        yscale)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_ALIGNMENT (alignment));
Packit Service fb6fa5
Packit Service fb6fa5
  xalign = CLAMP (xalign, 0.0, 1.0);
Packit Service fb6fa5
  yalign = CLAMP (yalign, 0.0, 1.0);
Packit Service fb6fa5
  xscale = CLAMP (xscale, 0.0, 1.0);
Packit Service fb6fa5
  yscale = CLAMP (yscale, 0.0, 1.0);
Packit Service fb6fa5
Packit Service fb6fa5
  if (   (alignment->xalign != xalign)
Packit Service fb6fa5
      || (alignment->yalign != yalign)
Packit Service fb6fa5
      || (alignment->xscale != xscale)
Packit Service fb6fa5
      || (alignment->yscale != yscale))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_object_freeze_notify (G_OBJECT (alignment));
Packit Service fb6fa5
      if (alignment->xalign != xalign)
Packit Service fb6fa5
        {
Packit Service fb6fa5
           alignment->xalign = xalign;
Packit Service fb6fa5
           g_object_notify (G_OBJECT (alignment), "xalign");
Packit Service fb6fa5
        }
Packit Service fb6fa5
      if (alignment->yalign != yalign)
Packit Service fb6fa5
        {
Packit Service fb6fa5
           alignment->yalign = yalign;
Packit Service fb6fa5
           g_object_notify (G_OBJECT (alignment), "yalign");
Packit Service fb6fa5
        }
Packit Service fb6fa5
      if (alignment->xscale != xscale)
Packit Service fb6fa5
        {
Packit Service fb6fa5
           alignment->xscale = xscale;
Packit Service fb6fa5
           g_object_notify (G_OBJECT (alignment), "xscale");
Packit Service fb6fa5
        }
Packit Service fb6fa5
      if (alignment->yscale != yscale)
Packit Service fb6fa5
        {
Packit Service fb6fa5
           alignment->yscale = yscale;
Packit Service fb6fa5
           g_object_notify (G_OBJECT (alignment), "yscale");
Packit Service fb6fa5
        }
Packit Service fb6fa5
      g_object_thaw_notify (G_OBJECT (alignment));
Packit Service fb6fa5
Packit Service fb6fa5
      if (GTK_BIN (alignment)->child)
Packit Service fb6fa5
        gtk_widget_queue_resize (GTK_BIN (alignment)->child);
Packit Service fb6fa5
      gtk_widget_queue_draw (GTK_WIDGET (alignment));
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_alignment_size_request (GtkWidget      *widget,
Packit Service fb6fa5
			    GtkRequisition *requisition)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkBin *bin;
Packit Service fb6fa5
  GtkAlignmentPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  bin = GTK_BIN (widget);
Packit Service fb6fa5
  priv = GTK_ALIGNMENT_GET_PRIVATE (widget);
Packit Service fb6fa5
Packit Service fb6fa5
  requisition->width = GTK_CONTAINER (widget)->border_width * 2;
Packit Service fb6fa5
  requisition->height = GTK_CONTAINER (widget)->border_width * 2;
Packit Service fb6fa5
Packit Service fb6fa5
  if (bin->child && gtk_widget_get_visible (bin->child))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GtkRequisition child_requisition;
Packit Service fb6fa5
      
Packit Service fb6fa5
      gtk_widget_size_request (bin->child, &child_requisition);
Packit Service fb6fa5
Packit Service fb6fa5
      requisition->width += child_requisition.width;
Packit Service fb6fa5
      requisition->height += child_requisition.height;
Packit Service fb6fa5
Packit Service fb6fa5
      /* Request extra space for the padding: */
Packit Service fb6fa5
      requisition->width += (priv->padding_left + priv->padding_right);
Packit Service fb6fa5
      requisition->height += (priv->padding_top + priv->padding_bottom);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_alignment_size_allocate (GtkWidget     *widget,
Packit Service fb6fa5
			     GtkAllocation *allocation)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkAlignment *alignment;
Packit Service fb6fa5
  GtkBin *bin;
Packit Service fb6fa5
  GtkAllocation child_allocation;
Packit Service fb6fa5
  GtkRequisition child_requisition;
Packit Service fb6fa5
  gint width, height;
Packit Service fb6fa5
  gint border_width;
Packit Service fb6fa5
  gint padding_horizontal, padding_vertical;
Packit Service fb6fa5
  GtkAlignmentPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  padding_horizontal = 0;
Packit Service fb6fa5
  padding_vertical = 0;
Packit Service fb6fa5
Packit Service fb6fa5
  widget->allocation = *allocation;
Packit Service fb6fa5
  alignment = GTK_ALIGNMENT (widget);
Packit Service fb6fa5
  bin = GTK_BIN (widget);
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (bin->child && gtk_widget_get_visible (bin->child))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_get_child_requisition (bin->child, &child_requisition);
Packit Service fb6fa5
Packit Service fb6fa5
      border_width = GTK_CONTAINER (alignment)->border_width;
Packit Service fb6fa5
Packit Service fb6fa5
      priv = GTK_ALIGNMENT_GET_PRIVATE (widget);
Packit Service fb6fa5
      padding_horizontal = priv->padding_left + priv->padding_right;
Packit Service fb6fa5
      padding_vertical = priv->padding_top + priv->padding_bottom;
Packit Service fb6fa5
Packit Service fb6fa5
      width  = MAX (1, allocation->width - padding_horizontal - 2 * border_width);
Packit Service fb6fa5
      height = MAX (1, allocation->height - padding_vertical - 2 * border_width);
Packit Service fb6fa5
    
Packit Service fb6fa5
      if (width > child_requisition.width)
Packit Service fb6fa5
	child_allocation.width = (child_requisition.width *
Packit Service fb6fa5
				  (1.0 - alignment->xscale) +
Packit Service fb6fa5
				  width * alignment->xscale);
Packit Service fb6fa5
      else
Packit Service fb6fa5
	child_allocation.width = width;
Packit Service fb6fa5
      
Packit Service fb6fa5
      if (height > child_requisition.height)
Packit Service fb6fa5
	child_allocation.height = (child_requisition.height *
Packit Service fb6fa5
				   (1.0 - alignment->yscale) +
Packit Service fb6fa5
				   height * alignment->yscale);
Packit Service fb6fa5
      else
Packit Service fb6fa5
	child_allocation.height = height;
Packit Service fb6fa5
Packit Service fb6fa5
      if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
Packit Service fb6fa5
	child_allocation.x = (1.0 - alignment->xalign) * (width - child_allocation.width) + allocation->x + border_width + priv->padding_right;
Packit Service fb6fa5
      else 
Packit Service fb6fa5
	child_allocation.x = alignment->xalign * (width - child_allocation.width) + allocation->x + border_width + priv->padding_left;
Packit Service fb6fa5
Packit Service fb6fa5
      child_allocation.y = alignment->yalign * (height - child_allocation.height) + allocation->y + border_width + priv->padding_top;
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_widget_size_allocate (bin->child, &child_allocation);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_alignment_set_padding:
Packit Service fb6fa5
 * @alignment: a #GtkAlignment
Packit Service fb6fa5
 * @padding_top: the padding at the top of the widget
Packit Service fb6fa5
 * @padding_bottom: the padding at the bottom of the widget
Packit Service fb6fa5
 * @padding_left: the padding at the left of the widget
Packit Service fb6fa5
 * @padding_right: the padding at the right of the widget.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the padding on the different sides of the widget.
Packit Service fb6fa5
 * The padding adds blank space to the sides of the widget. For instance,
Packit Service fb6fa5
 * this can be used to indent the child widget towards the right by adding
Packit Service fb6fa5
 * padding on the left.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.4
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_alignment_set_padding (GtkAlignment    *alignment,
Packit Service fb6fa5
			   guint            padding_top,
Packit Service fb6fa5
			   guint            padding_bottom,
Packit Service fb6fa5
			   guint            padding_left,
Packit Service fb6fa5
			   guint            padding_right)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkAlignmentPrivate *priv;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_ALIGNMENT (alignment));
Packit Service fb6fa5
Packit Service fb6fa5
  priv = GTK_ALIGNMENT_GET_PRIVATE (alignment);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_freeze_notify (G_OBJECT (alignment));
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->padding_top != padding_top)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      priv->padding_top = padding_top;
Packit Service fb6fa5
      g_object_notify (G_OBJECT (alignment), "top-padding");
Packit Service fb6fa5
    }
Packit Service fb6fa5
  if (priv->padding_bottom != padding_bottom)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      priv->padding_bottom = padding_bottom;
Packit Service fb6fa5
      g_object_notify (G_OBJECT (alignment), "bottom-padding");
Packit Service fb6fa5
    }
Packit Service fb6fa5
  if (priv->padding_left != padding_left)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      priv->padding_left = padding_left;
Packit Service fb6fa5
      g_object_notify (G_OBJECT (alignment), "left-padding");
Packit Service fb6fa5
    }
Packit Service fb6fa5
  if (priv->padding_right != padding_right)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      priv->padding_right = padding_right;
Packit Service fb6fa5
      g_object_notify (G_OBJECT (alignment), "right-padding");
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_thaw_notify (G_OBJECT (alignment));
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Make sure that the widget and children are redrawn with the new setting: */
Packit Service fb6fa5
  if (GTK_BIN (alignment)->child)
Packit Service fb6fa5
    gtk_widget_queue_resize (GTK_BIN (alignment)->child);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_queue_draw (GTK_WIDGET (alignment));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_alignment_get_padding:
Packit Service fb6fa5
 * @alignment: a #GtkAlignment
Packit Service fb6fa5
 * @padding_top: (out) (allow-none): location to store the padding for
Packit Service fb6fa5
 *     the top of the widget, or %NULL
Packit Service fb6fa5
 * @padding_bottom: (out) (allow-none): location to store the padding
Packit Service fb6fa5
 *     for the bottom of the widget, or %NULL
Packit Service fb6fa5
 * @padding_left: (out) (allow-none): location to store the padding
Packit Service fb6fa5
 *     for the left of the widget, or %NULL
Packit Service fb6fa5
 * @padding_right: (out) (allow-none): location to store the padding
Packit Service fb6fa5
 *     for the right of the widget, or %NULL
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Gets the padding on the different sides of the widget.
Packit Service fb6fa5
 * See gtk_alignment_set_padding ().
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.4
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_alignment_get_padding (GtkAlignment    *alignment,
Packit Service fb6fa5
			   guint           *padding_top,
Packit Service fb6fa5
			   guint           *padding_bottom,
Packit Service fb6fa5
			   guint           *padding_left,
Packit Service fb6fa5
			   guint           *padding_right)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkAlignmentPrivate *priv;
Packit Service fb6fa5
 
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_ALIGNMENT (alignment));
Packit Service fb6fa5
Packit Service fb6fa5
  priv = GTK_ALIGNMENT_GET_PRIVATE (alignment);
Packit Service fb6fa5
  if(padding_top)
Packit Service fb6fa5
    *padding_top = priv->padding_top;
Packit Service fb6fa5
  if(padding_bottom)
Packit Service fb6fa5
    *padding_bottom = priv->padding_bottom;
Packit Service fb6fa5
  if(padding_left)
Packit Service fb6fa5
    *padding_left = priv->padding_left;
Packit Service fb6fa5
  if(padding_right)
Packit Service fb6fa5
    *padding_right = priv->padding_right;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
#define __GTK_ALIGNMENT_C__
Packit Service fb6fa5
#include "gtkaliasdef.c"