content: /* ===========================================================
   * JFreeChart : a free chart library for the Java(tm) platform
   * ===========================================================
   *
   * (C) Copyright 2000-2012, by Object Refinery Limited and Contributors.
   *
   * Project Info:  http://www.jfree.org/jfreechart/index.html
   *
   * This library is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as published by
   * the Free Software Foundation; either version 2.1 of the License, or
   * (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful, but
   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
   * License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this library; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
   * USA.
   *
   * [Oracle and Java are registered trademarks of Oracle and/or its affiliates. 
   * Other names may be trademarks of their respective owners.]
  
   * 
   * ----------
   * Align.java
   * ----------
   * (C) Copyright 2000-2012, by Object Refinery Limited and Contributors.
   *
   * Original Author:  Christian W. Zuckschwerdt;
   * Contributor(s):   David Gilbert (for Object Refinery Limited);
   *
   * Changes (from 30-May-2002)
   * --------------------------
   * 30-May-2002 : Added title (DG);
   * 13-Oct-2002 : Fixed errors reported by Checkstyle (DG);
   * 14-Jun-2012 : Moved from JCommon into JFreeChart (DG);
   *
   */
  
  package org.jfree.chart.ui;
  
  import java.awt.geom.Rectangle2D;
  
  /**
   * A utility class for aligning rectangles.
   */
  public final class Align {
  
      /** Center alignment. */
      public static final int CENTER = 0x00;
  
      /** Top alignment. */
      public static final int TOP = 0x01;
  
      /** Bottom alignment. */
      public static final int BOTTOM = 0x02;
  
      /** Left alignment. */
      public static final int LEFT = 0x04;
  
      /** Right alignment. */
      public static final int RIGHT = 0x08;
  
      /** Top/Left alignment. */
      public static final int TOP_LEFT = TOP | LEFT;
  
      /** Top/Right alignment. */
      public static final int TOP_RIGHT = TOP | RIGHT;
  
      /** Bottom/Left alignment. */
      public static final int BOTTOM_LEFT = BOTTOM | LEFT;
  
      /** Bottom/Right alignment. */
      public static final int BOTTOM_RIGHT = BOTTOM | RIGHT;
  
      /** Horizontal fit. */
      public static final int FIT_HORIZONTAL = LEFT | RIGHT;
  
      /** Vertical fit. */
      public static final int FIT_VERTICAL = TOP | BOTTOM;
  
      /** Complete fit. */
      public static final int FIT = FIT_HORIZONTAL | FIT_VERTICAL;
  
      /** North alignment (same as TOP). */
      public static final int NORTH = TOP;
  
      /** South alignment (same as BOTTOM). */
      public static final int SOUTH = BOTTOM;
  
      /** West alignment (same as LEFT). */
      public static final int WEST = LEFT;
  
      /** East alignment (same as RIGHT). */
      public static final int EAST = RIGHT;
  
      /** North/West alignment (same as TOP_LEFT). */
      public static final int NORTH_WEST = NORTH | WEST;
  
      /** North/East alignment (same as TOP_RIGHT). */
      public static final int NORTH_EAST = NORTH | EAST;
  
      /** South/West alignment (same as BOTTOM_LEFT). */
      public static final int SOUTH_WEST = SOUTH | WEST;
  
      /** South/East alignment (same as BOTTOM_RIGHT). */
      public static final int SOUTH_EAST = SOUTH | EAST;
  
      /**
       * Private constructor.
       */
      private Align() { 
          super();
      }
      
      /**
       * Aligns one rectangle (<code>rect</code>) relative to another rectangle (<code>frame</code>).
       *
       * @param rect  the rectangle to be aligned (<code>null</code> not permitted).
       * @param frame  the reference frame (<code>null</code> not permitted).
       * @param align  the alignment code.
       */
      public static void align(final Rectangle2D rect, final Rectangle2D frame, final int align) {
  
          double x = frame.getCenterX() - rect.getWidth() / 2.0;
          double y = frame.getCenterY() - rect.getHeight() / 2.0;
          double w = rect.getWidth();
          double h = rect.getHeight();
  
          if ((align & FIT_VERTICAL) == FIT_VERTICAL) {
              h = frame.getHeight();
          }
  
          if ((align & FIT_HORIZONTAL) == FIT_HORIZONTAL) {
              w = frame.getWidth();
          }
  
          if ((align & TOP) == TOP) {
              y = frame.getMinY();
          }
  
          if ((align & BOTTOM) == BOTTOM) {
              y = frame.getMaxY() - h;
          }
  
          if ((align & LEFT) == LEFT) {
              x = frame.getX();
          }
  
          if ((align & RIGHT) == RIGHT) {
              x = frame.getMaxX() - w;
          }
  
          rect.setRect(x, y, w, h);
  
      }
  
  }
  