001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: /*
042: * TabPainter.java
043: *
044: * Created on December 3, 2003, 4:22 PM
045: */
046:
047: package org.netbeans.swing.tabcontrol.plaf;
048:
049: import javax.swing.*;
050: import javax.swing.border.Border;
051: import java.awt.*;
052:
053: /**
054: * An extention to Border which can provide a non-rectangular interior region
055: * that will contain the tab's content, and actually paint that interior. The
056: * goal of this class is to make it extremely easy to plug in different painting
057: * logic without having to write an entire UI delegate.
058: *
059: * @author Tim Boudreau
060: */
061: public interface TabPainter extends Border {
062:
063: /**
064: * Get the polygon representing the tag. Clicks outside this polygon inside
065: * the tab's rectangle will be ignored. This polygon makes up the bounds of
066: * the tab. <p><code>AbstractTabsUI</code> contains generic support for
067: * drawing drag and drop target indications. If want to use it rather than
068: * write your own, you need to specify the polygon returned by this method
069: * with the following point order: The last two points in the point array
070: * of the polygon <strong>must be the bottom left corner, followed by the
071: * bottom right corner</strong>. In other words, start at the upper left
072: * corner when constructing the polygon, and end at the bottom right corner,
073: * using no more than one point for the bottom left and right corners:
074: * <pre>
075: * start here --> /---------
076: * |
077: * finish here --> ----------
078: * </pre>
079: */
080: Polygon getInteriorPolygon(Component renderer);
081:
082: /**
083: * Paint the interior (as defined by getInteriorPolygon()) as appropriate
084: * for the tab. Implementations will presumably use different colors to
085: * manage selection, activated state, etc.
086: */
087: void paintInterior(Graphics g, Component renderer);
088:
089: /**
090: * Get the close button rectangle for this tab. May contain no implementation
091: * if supportsCloseButton() returns false."
092: *
093: * @param jc The current renderer
094: * @param rect A rectangle that should be configured with the close button
095: * bounds
096: * @param bounds The bounds relative to which the close button rectangle
097: * should be determined
098: */
099: void getCloseButtonRectangle(JComponent jc, Rectangle rect,
100: Rectangle bounds);
101:
102: /**
103: * Returns true if close button is supported, false otherwise.
104: *
105: * @param renderer The current renderer
106: * @return true if close button is supported, false otherwise
107: */
108: boolean supportsCloseButton(JComponent renderer);
109: }
|