001/* ======================================================================== 002 * JCommon : a free general purpose class library for the Java(tm) platform 003 * ======================================================================== 004 * 005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jcommon/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 * ---------- 028 * Align.java 029 * ---------- 030 * (C) Copyright 2000-2004, by Object Refinery Limited and Contributors. 031 * 032 * Original Author: Christian W. Zuckschwerdt; 033 * Contributor(s): David Gilbert (for Object Refinery Limited); 034 * 035 * $Id: Align.java,v 1.5 2005/10/18 13:18:34 mungady Exp $ 036 * 037 * Changes (from 30-May-2002) 038 * -------------------------- 039 * 30-May-2002 : Added title (DG); 040 * 13-Oct-2002 : Fixed errors reported by Checkstyle (DG); 041 * 042 */ 043 044package org.jfree.ui; 045 046import java.awt.geom.Rectangle2D; 047 048/** 049 * A utility class for aligning rectangles. 050 * 051 * @author David Gilbert 052 */ 053public final class Align { 054 055 /** Center alignment. */ 056 public static final int CENTER = 0x00; 057 058 /** Top alignment. */ 059 public static final int TOP = 0x01; 060 061 /** Bottom alignment. */ 062 public static final int BOTTOM = 0x02; 063 064 /** Left alignment. */ 065 public static final int LEFT = 0x04; 066 067 /** Right alignment. */ 068 public static final int RIGHT = 0x08; 069 070 /** Top/Left alignment. */ 071 public static final int TOP_LEFT = TOP | LEFT; 072 073 /** Top/Right alignment. */ 074 public static final int TOP_RIGHT = TOP | RIGHT; 075 076 /** Bottom/Left alignment. */ 077 public static final int BOTTOM_LEFT = BOTTOM | LEFT; 078 079 /** Bottom/Right alignment. */ 080 public static final int BOTTOM_RIGHT = BOTTOM | RIGHT; 081 082 /** Horizontal fit. */ 083 public static final int FIT_HORIZONTAL = LEFT | RIGHT; 084 085 /** Vertical fit. */ 086 public static final int FIT_VERTICAL = TOP | BOTTOM; 087 088 /** Complete fit. */ 089 public static final int FIT = FIT_HORIZONTAL | FIT_VERTICAL; 090 091 /** North alignment (same as TOP). */ 092 public static final int NORTH = TOP; 093 094 /** South alignment (same as BOTTOM). */ 095 public static final int SOUTH = BOTTOM; 096 097 /** West alignment (same as LEFT). */ 098 public static final int WEST = LEFT; 099 100 /** East alignment (same as RIGHT). */ 101 public static final int EAST = RIGHT; 102 103 /** North/West alignment (same as TOP_LEFT). */ 104 public static final int NORTH_WEST = NORTH | WEST; 105 106 /** North/East alignment (same as TOP_RIGHT). */ 107 public static final int NORTH_EAST = NORTH | EAST; 108 109 /** South/West alignment (same as BOTTOM_LEFT). */ 110 public static final int SOUTH_WEST = SOUTH | WEST; 111 112 /** South/East alignment (same as BOTTOM_RIGHT). */ 113 public static final int SOUTH_EAST = SOUTH | EAST; 114 115 /** 116 * Private constructor. 117 */ 118 private Align() { 119 super(); 120 } 121 122 /** 123 * Aligns one rectangle (<code>rect</code>) relative to another rectangle (<code>frame</code>). 124 * 125 * @param rect the rectangle to be aligned (<code>null</code> not permitted). 126 * @param frame the reference frame (<code>null</code> not permitted). 127 * @param align the alignment code. 128 */ 129 public static void align(final Rectangle2D rect, final Rectangle2D frame, final int align) { 130 131 double x = frame.getCenterX() - rect.getWidth() / 2.0; 132 double y = frame.getCenterY() - rect.getHeight() / 2.0; 133 double w = rect.getWidth(); 134 double h = rect.getHeight(); 135 136 if ((align & FIT_VERTICAL) == FIT_VERTICAL) { 137 h = frame.getHeight(); 138 } 139 140 if ((align & FIT_HORIZONTAL) == FIT_HORIZONTAL) { 141 w = frame.getWidth(); 142 } 143 144 if ((align & TOP) == TOP) { 145 y = frame.getMinY(); 146 } 147 148 if ((align & BOTTOM) == BOTTOM) { 149 y = frame.getMaxY() - h; 150 } 151 152 if ((align & LEFT) == LEFT) { 153 x = frame.getX(); 154 } 155 156 if ((align & RIGHT) == RIGHT) { 157 x = frame.getMaxX() - w; 158 } 159 160 rect.setRect(x, y, w, h); 161 162 } 163 164}