/* * Copyright (c) 2005 Matthew Hall 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: * Matthew Hall - initial API and implementation */ package org.eclipse.nebula.paperclips.core.border; import org.eclipse.nebula.paperclips.core.grid.GridPrint; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; /** * Interface for calculating and drawing borders in a BorderPrint. * * @author Matthew Hall */ public interface BorderPainter { /** * Returns the border inset, in pixels, from the left. * * @return the border inset, in pixels, from the left. */ public int getLeft(); /** * Returns the border inset, in pixels, from the right. * * @return the border inset, in pixels, from the right. */ public int getRight(); /** * Returns the sum of the left and right border insets. * * @return the sum of the left and right border insets. */ public int getWidth(); /** * Returns the border inset, in pixels, from the top. * * @param open * If true, the inset of an open border will be returned. If * false, the inset of a closed border will be returned. * @return the border inset, in pixels, from the top. */ public int getTop(boolean open); /** * Returns the border inset, in pixels, from the bottom. * * @param open * If true, the inset of an open border will be returned. If * false, the inset of a closed border will be returned. * @return the border inset, in pixels, from the bottom. */ public int getBottom(boolean open); /** * Returns the sum of the top and bottom border insets. * * @param topOpen * If true, the inset of an open border will be returned. If * false, the inset of a closed border will be returned. * @param bottomOpen * If true, the inset of an open border will be returned. If * false, the inset of a closed border will be returned. * @return the sum of the top and bottom border insets. */ public int getHeight(boolean topOpen, boolean bottomOpen); /** * Returns the sum of the maximum top and bottom border insets. * * @return the sum of the maximum top and bottom border insets. */ public int getMaxHeight(); /** * Returns the x and y distance that two of the same BorderPainters would * overlap to create the appearance of a single border between the two. This * method is used by GridPrint whenever the horizontal and/or vertical * spacing fields are set to {@link GridPrint#BORDER_OVERLAP }. * * @return the distance that this border painter would overlap an adjacent * one. */ public Point getOverlap(); /** * Paints a border around the specified region. Depending on the type of * border, the top and bottom of may be painted differently depending on the * values of <code>topOpen</code> and <code>bottomOpen</code>. * * @param gc * The graphics context to paint on. * @param x * The x coordinate of the top left corner of the border. * @param y * The y coordinate of the top left corner of the border. * @param width * The width of the border to paint * @param height * The height of the border to paint * @param topOpen * If true, the top border should be drawn "open," to indicate * that this is the continuation of a border in a previous * iteration. If false, the border should be drawn "closed" to * indicate that this is the first iteration on the BorderPrint's * target. * @param bottomOpen * If true, the bottom border should be drawn "open," to indicate * that the BorderPrint's target was not consumed in this * iteration. If false, the bottom border should be drawn * "closed," to indicate that the BorderPrint's target completed * during this iteration. */ public void paint(GC gc, int x, int y, int width, int height, boolean topOpen, boolean bottomOpen); /** * Disposes the system resources allocated by this BorderPainter. The * dispose method is <b>not</b> a permanent disposal of a BorderPainter. It * is intended to reclaim system resources, however future calls to * paint(GC,int,int) may require that the resources be allocated again. */ public void dispose(); }