/*
* Copyright 2011 Uwe Krueger.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mandelsoft.swing;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
/**
*
* @author Uwe Krüger
*/
public class Rectangles {
private static class Unmodifiable extends Rectangle2D.Double {
public Unmodifiable(double x, double y, double w, double h)
{
super.setRect(x, y, w, h);
}
@Override
public void setRect(double x, double y, double w, double h)
{
throw new UnsupportedOperationException();
}
@Override
public void setRect(Rectangle2D r)
{
throw new UnsupportedOperationException();
}
}
public static String toString(Rectangle2D lo)
{
if (lo==null) return "[null]";
return "["+lo.getX()+","+lo.getY()+","+lo.getWidth()+","+lo.getHeight()+"]";
}
public static Rectangle2D unmodifiable(Rectangle2D r)
{
if (r==null || r instanceof Unmodifiable) return r;
return new Unmodifiable(r.getX(),r.getY(),r.getWidth(),r.getHeight());
}
public static Rectangle2D create(Rectangle2D r)
{
if (r==null) return null;
return new Rectangle2D.Double(r.getX(),r.getY(),r.getWidth(),r.getHeight());
}
public static Rectangle2D create(Point2D p1, Point2D p2)
{
double x1 = Math.min(p1.getX(), p2.getX());
double x2 = Math.max(p1.getX(), p2.getX());
double y1 = Math.min(p1.getY(), p2.getY());
double y2 = Math.max(p1.getY(), p2.getY());
return new Rectangle2D.Double(x1, y1, x2-x1, y2-y1);
}
public static Rectangle2D create(Interval2D x, Interval2D y)
{
return new Rectangle2D.Double(x.getMin(), y.getMin(), x.size(), y.size());
}
///////////////////////////////////////////////////////////////////////////
public static Point2D location(Rectangle2D r)
{
return new Point2D.Double(r.getX(), r.getY());
}
public static Dimension2D size(Rectangle2D r)
{
return new Dimensions.Dimension(r.getWidth(),r.getHeight());
}
public static Point2D center(Rectangle2D r)
{
return new Point2D.Double(r.getCenterX(), r.getCenterY());
}
///////////////////////////////////////////////////////////////////////////
static public class mod {
public static void setSize(Rectangle2D r, double w, double h)
{
r.setFrame(r.getX(), r.getY(), w, h);
}
public static void setSize(Rectangle2D r, Dimension2D d)
{
r.setFrame(r.getX(), r.getY(), d.getWidth(), d.getHeight());
}
public static void setLocation(Rectangle2D r, double x, double y)
{
r.setFrame(x, y, r.getWidth(), r.getHeight());
}
public static void setLocation(Rectangle2D r, Point2D p)
{
r.setFrame(p.getX(), p.getY(), r.getWidth(), r.getHeight());
}
public static void translate(Rectangle2D r, Dimension2D d)
{
translate(r, d.getWidth(), d.getHeight());
}
public static void translate(Rectangle2D r, double dx, double dy)
{
r.setFrame(r.getX()+dx,
r.getY()+dy,
r.getWidth(),
r.getHeight());
}
public static void grow(Rectangle2D r, Dimension2D d)
{
grow(r, d.getWidth(), d.getHeight());
}
public static void grow(Rectangle2D r, double dx, double dy)
{
r.setFrame(r.getX(), r.getY(),
r.getWidth()+dx, r.getHeight()+dy);
}
public static void shrink(Rectangle2D r, Dimension2D d)
{
shrink(r, d.getWidth(), d.getHeight());
}
public static void shrink(Rectangle2D r, double dx, double dy)
{
r.setFrame(r.getX(), r.getY(), r.getWidth()-dx, r.getHeight()-dy);
}
public static void limit(Rectangle2D r, Dimension2D d)
{
limit(r, d.getWidth(), d.getHeight());
}
public static void limit(Rectangle2D r, double w, double h)
{
r.setFrame(r.getX(), r.getY(), Math.min(r.getWidth(), w),
Math.min(r.getHeight(), h));
}
}
///////////////////////////////////////////////////////////////////////////
static public class op {
public static Rectangle2D translate(Rectangle2D r, Dimension2D d)
{
return translate(r, d.getWidth(), d.getHeight());
}
public static Rectangle2D translate(Rectangle2D r, double dx, double dy)
{
return new Rectangle2D.Double(r.getX()+dx,
r.getY()+dy,
r.getWidth(),
r.getHeight());
}
public static Rectangle2D grow(Rectangle2D r, Dimension2D d)
{
return grow(r, d.getWidth(), d.getHeight());
}
public static Rectangle2D grow(Rectangle2D r, double dx, double dy)
{
return new Rectangle2D.Double(r.getX(), r.getY(),
r.getWidth()+dx, r.getHeight()+dy);
}
public static Rectangle2D shrink(Rectangle2D r, Dimension2D d)
{
return shrink(r, d.getWidth(), d.getHeight());
}
public static Rectangle2D shrink(Rectangle2D r, double dx, double dy)
{
return new Rectangle2D.Double(r.getX(), r.getY(),
r.getWidth()-dx, r.getHeight()-dy);
}
}
}