blob: f4d8a61eda5ccf73e38fd4ef53607a2c9afa8d81 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.draw2d;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Insets;
/**
* CompoundBorder allows for the nesting of two borders. The nested borders are referred
* to as the <i>inner</i> and <i>outer</i> borders.
*/
public class CompoundBorder
extends AbstractBorder
{
/** The inner Border. */
protected Border inner;
/** The outer Border. */
protected Border outer;
/**
* Constructs a default CompoundBorder with no borders under it.
*
* @since 2.0
*/
public CompoundBorder() { }
/**
* Constructs a CompoundBorder with the two borders specified as input.
*
* @param outer Border which is drawn on the outside
* @param inner Border which is drawn inside the outer border
*
* @since 2.0
*/
public CompoundBorder(Border outer, Border inner) {
this.outer = outer;
this.inner = inner;
}
/**
* Returns the inner border of this CompoundBorder.
*
* @return The inner border
* @since 2.0
*/
public Border getInnerBorder() {
return inner;
}
/**
* Returns the total insets required to hold both the inner and outer borders of this
* CompoundBorder.
*
* @param figure Figure for which this is the border
* @return The total insets for this border
* @since 2.0
*/
public Insets getInsets(IFigure figure) {
Insets insets = null;
if (inner != null)
insets = inner.getInsets(figure);
else
insets = new Insets();
if (outer != null) {
Insets moreInsets = outer.getInsets(figure);
insets = insets.getAdded(moreInsets);
}
return insets;
}
/**
* @see org.eclipse.draw2d.Border#getPreferredSize(IFigure)
*/
public Dimension getPreferredSize(IFigure fig) {
Dimension prefSize = new Dimension(inner.getPreferredSize(fig));
Insets outerInsets = outer.getInsets(fig);
prefSize.expand(outerInsets.getWidth(), outerInsets.getHeight());
prefSize.union(outer.getPreferredSize(fig));
return prefSize;
}
/**
* Returns the outer border of this CompoundBorder.
*
* @return The outer border
* @since 2.0
*/
public Border getOuterBorder() {
return outer;
}
/**
* Returns <code>true</code> if this border is opaque. Return value is dependent on the
* opaque state of both the borders it contains. Both borders have to be opaque for this
* border to be opaque. In the absence of any of the borders, this border is not opaque.
*
* @return <code>true</code> if this border is opaque
*/
public boolean isOpaque() {
return ((inner != null) ? inner.isOpaque() : false)
&& ((outer != null) ? outer.isOpaque() : false);
}
/**
* @see org.eclipse.draw2d.Border#paint(IFigure, Graphics, Insets)
*/
public void paint(IFigure figure, Graphics g, Insets insets) {
if (outer != null) {
g.pushState();
outer.paint(figure, g, insets);
g.popState();
insets = insets.getAdded(outer.getInsets(figure));
}
if (inner != null)
inner.paint(figure, g, insets);
}
}