/*
* Copyright 2005 MH-Software-Entwicklung. All rights reserved.
* Use is subject to license terms.
*/
package com.jtattoo.plaf;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.*;
/**
* @author Michael Hagen
*/
public class BaseBorders {
private static Border focusFrameBorder = null;
private static Border textFieldBorder = null;
private static Border spinnerBorder = null;
private static Border comboBoxBorder = null;
private static Border progressBarBorder = null;
private static Border tableHeaderBorder = null;
private static Border popupMenuBorder = null;
private static Border menuItemBorder = null;
private static Border toolBarBorder = null;
private static Border toolButtonBorder = null;
private static Border paletteBorder = null;
private static Border scrollPaneBorder = null;
private static Border tableScrollPaneBorder = null;
private static Border tabbedPaneBorder = null;
private static Border desktopIconBorder = null;
public static void initDefaults() {
textFieldBorder = null;
spinnerBorder = null;
comboBoxBorder = null;
progressBarBorder = null;
tableHeaderBorder = null;
popupMenuBorder = null;
menuItemBorder = null;
toolBarBorder = null;
toolButtonBorder = null;
paletteBorder = null;
scrollPaneBorder = null;
tableScrollPaneBorder = null;
tabbedPaneBorder = null;
desktopIconBorder = null;
}
//------------------------------------------------------------------------------------
// Lazy access methods
//------------------------------------------------------------------------------------
public static Border getFocusFrameBorder() {
if (focusFrameBorder == null) {
focusFrameBorder = new FocusFrameBorder();
}
return focusFrameBorder;
}
//------------------------------------------------------------------------------------
// Lazy access methods
//------------------------------------------------------------------------------------
public static Border getTextBorder() {
if (textFieldBorder == null) {
textFieldBorder = new TextFieldBorder();
}
return textFieldBorder;
}
public static Border getSpinnerBorder() {
if (spinnerBorder == null) {
spinnerBorder = new SpinnerBorder();
}
return spinnerBorder;
}
public static Border getTextFieldBorder() {
return getTextBorder();
}
public static Border getComboBoxBorder() {
if (comboBoxBorder == null) {
comboBoxBorder = new ComboBoxBorder();
}
return comboBoxBorder;
}
public static Border getProgressBarBorder() {
if (progressBarBorder == null) {
progressBarBorder = BorderFactory.createLineBorder(ColorHelper.darker(AbstractLookAndFeel.getBackgroundColor(), 30));
}
return progressBarBorder;
}
public static Border getTableHeaderBorder() {
if (tableHeaderBorder == null) {
tableHeaderBorder = new TableHeaderBorder();
}
return tableHeaderBorder;
}
public static Border getPopupMenuBorder() {
if (popupMenuBorder == null) {
if (AbstractLookAndFeel.getTheme().isMenuOpaque()) {
popupMenuBorder = new PopupMenuBorder();
} else {
popupMenuBorder = new PopupMenuShadowBorder();
}
}
return popupMenuBorder;
}
public static Border getMenuItemBorder() {
if (menuItemBorder == null) {
menuItemBorder = new MenuItemBorder();
}
return menuItemBorder;
}
public static Border getToolBarBorder() {
if (toolBarBorder == null) {
toolBarBorder = new ToolBarBorder();
}
return toolBarBorder;
}
public static Border getToolButtonBorder() {
if (toolButtonBorder == null) {
toolButtonBorder = new ToolButtonBorder();
}
return toolButtonBorder;
}
public static Border getMenuBarBorder() {
return BorderFactory.createEmptyBorder(1, 1, 1, 1);
}
public static Border getPaletteBorder() {
if (paletteBorder == null) {
paletteBorder = new PaletteBorder();
}
return paletteBorder;
}
public static Border getScrollPaneBorder() {
if (scrollPaneBorder == null) {
scrollPaneBorder = new ScrollPaneBorder(false);
}
return scrollPaneBorder;
}
public static Border getTableScrollPaneBorder() {
if (tableScrollPaneBorder == null) {
tableScrollPaneBorder = new ScrollPaneBorder(true);
}
return tableScrollPaneBorder;
}
public static Border getTabbedPaneBorder() {
if (tabbedPaneBorder == null) {
tabbedPaneBorder = BorderFactory.createEmptyBorder(1, 1, 1, 1);
}
return tabbedPaneBorder;
}
public static Border getDesktopIconBorder() {
if (desktopIconBorder == null) {
desktopIconBorder = new BorderUIResource.CompoundBorderUIResource(
new LineBorder(AbstractLookAndFeel.getWindowBorderColor(), 1),
new MatteBorder(2, 2, 1, 2, AbstractLookAndFeel.getWindowBorderColor()));
}
return desktopIconBorder;
}
//------------------------------------------------------------------------------------
// Implementation of border classes
//------------------------------------------------------------------------------------
public static class FocusFrameBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(2, 2, 2, 2);
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Color hiColor = ColorHelper.brighter(AbstractLookAndFeel.getTheme().getFocusFrameColor(), 60);
Color loColor = AbstractLookAndFeel.getTheme().getFocusFrameColor();
g.setColor(loColor);
g.drawRect(x, y, width - 1, height - 1);
g.setColor(hiColor);
g.drawRect(x + 1, y + 1, width - 3, height - 3);
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class FocusFrameBorder
public static class TextFieldBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(2, 2, 2, 2);
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
g.setColor(AbstractLookAndFeel.getTheme().getFrameColor());
g.drawRect(x, y, width - 1, height - 1);
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class TextFieldBorder
public static class SpinnerBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(1, 1, 1, 1);
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
g.setColor(AbstractLookAndFeel.getTheme().getFrameColor());
g.drawRect(x, y, width - 1, height - 1);
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class SpinnerBorder
public static class ComboBoxBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(1, 1, 1, 1);
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
g.setColor(AbstractLookAndFeel.getTheme().getFrameColor());
g.drawRect(x, y, width - 1, height - 1);
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class ComboBoxBorder
public static class TableHeaderBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(2, 2, 2, 0);
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
Color cHi = AbstractLookAndFeel.getControlHighlight();
Color cLo = AbstractLookAndFeel.getControlShadow();
JTattooUtilities.draw3DBorder(g, cHi, cLo, x, y, w, h);
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class TableHeaderBorder
public static class ScrollPaneBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(2, 2, 2, 2);
private static final Insets tableInsets = new Insets(1, 1, 1, 1);
private boolean tableBorder = false;
public ScrollPaneBorder(boolean tableBorder) {
this.tableBorder = tableBorder;
}
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
g.setColor(AbstractLookAndFeel.getTheme().getFrameColor());
g.drawRect(x, y, w - 1, h - 1);
g.setColor(ColorHelper.brighter(AbstractLookAndFeel.getTheme().getBackgroundColor(), 50));
g.drawRect(x + 1, y + 1, w - 3, h - 3);
}
public Insets getBorderInsets(Component c) {
if (tableBorder) {
return new Insets(tableInsets.top, tableInsets.left, tableInsets.bottom, tableInsets.right);
} else {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
Insets ins = getBorderInsets(c);
borderInsets.left = ins.left;
borderInsets.top = ins.top;
borderInsets.right = ins.right;
borderInsets.bottom = ins.bottom;
return borderInsets;
}
} // class ScrollPaneBorder
public static class PopupMenuBorder extends AbstractBorder implements UIResource {
protected static final Font logoFont = new Font("Dialog", Font.BOLD, 12);
protected Insets logoInsets = new Insets(2, 18, 1, 1);
protected Insets insets = new Insets(2, 1, 1, 1);
public boolean hasLogo() {
return ((AbstractLookAndFeel.getTheme().getLogoString() != null) && (AbstractLookAndFeel.getTheme().getLogoString().length() > 0));
}
public void paintLogo(Graphics2D g2D, int w, int h) {
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D imageGraphics = image.createGraphics();
Color logoColor = AbstractLookAndFeel.getTheme().getMenuSelectionBackgroundColor();
imageGraphics.setColor(logoColor);
imageGraphics.fillRect(0, 0, w, h);
imageGraphics.setFont(logoFont);
FontMetrics fm = imageGraphics.getFontMetrics();
AffineTransform at = new AffineTransform();
at.setToRotation(Math.PI + (Math.PI / 2));
imageGraphics.setTransform(at);
int xs = -h + 4;
int ys = fm.getAscent() + 2;
imageGraphics.setColor(ColorHelper.darker(logoColor, 20));
imageGraphics.drawString(JTattooUtilities.getClippedText(AbstractLookAndFeel.getTheme().getLogoString(), fm, h - 16), xs - 1, ys + 1);
imageGraphics.setColor(Color.white);
imageGraphics.drawString(JTattooUtilities.getClippedText(AbstractLookAndFeel.getTheme().getLogoString(), fm, h - 16), xs, ys);
Rectangle2D r2D = new Rectangle2D.Double(0, 0, w, h);
TexturePaint texturePaint = new TexturePaint(image, r2D);
g2D.setPaint(texturePaint);
g2D.fillRect(0, 0, w, h);
}
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
int dx = getBorderInsets(c).left;
Color logoColor = AbstractLookAndFeel.getMenuSelectionBackgroundColor();
Color menuColor = AbstractLookAndFeel.getMenuBackgroundColor();
Color borderColorLo = AbstractLookAndFeel.getFrameColor();
Color borderColorHi = ColorHelper.brighter(AbstractLookAndFeel.getMenuSelectionBackgroundColor(), 50);
g.setColor(logoColor);
g.fillRect(x, y, dx - 1, h - 1);
if (hasLogo()) {
paintLogo((Graphics2D) g, dx, h);
}
g.setColor(borderColorHi);
g.drawLine(x + 1, y + 1, x + dx, y + 1);
g.drawLine(x + 1, y + 1, x + 1, y + h - 1);
g.setColor(ColorHelper.brighter(menuColor, 50.0));
g.drawLine(x + dx, y + 1, x + w - 2, y + 1);
g.setColor(borderColorLo);
g.drawLine(x + dx - 1, y + 1, x + dx - 1, y + h - 1);
g.drawRect(x, y, w - 1, h - 1);
}
public Insets getBorderInsets(Component c) {
if (hasLogo()) {
return new Insets(logoInsets.top, logoInsets.left, logoInsets.bottom, logoInsets.right);
} else {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
Insets ins = getBorderInsets(c);
borderInsets.left = ins.left;
borderInsets.top = ins.top;
borderInsets.right = ins.right;
borderInsets.bottom = ins.bottom;
return borderInsets;
}
} // class PopupMenuBorder
public static class PopupMenuShadowBorder extends PopupMenuBorder {
private static final int shadowSize = 3;
public PopupMenuShadowBorder() {
logoInsets = new Insets(2, 18, shadowSize + 1, shadowSize + 1);
insets = new Insets(2, 1, shadowSize + 1, shadowSize + 1);
}
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
Graphics2D g2D = (Graphics2D) g;
Composite composite = g2D.getComposite();
AlphaComposite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f);
g2D.setComposite(alpha);
int dx = getBorderInsets(c).left;
Color logoColor = AbstractLookAndFeel.getTheme().getMenuSelectionBackgroundColor();
Color borderColorLo = AbstractLookAndFeel.getFrameColor();
Color borderColorHi = ColorHelper.brighter(AbstractLookAndFeel.getMenuSelectionBackgroundColor(), 50);
g.setColor(logoColor);
g.fillRect(x, y, dx - 1, h - 1 - shadowSize);
if (hasLogo()) {
paintLogo(g2D, dx, h - shadowSize);
}
alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, AbstractLookAndFeel.getTheme().getMenuAlpha());
g2D.setComposite(alpha);
g.setColor(borderColorHi);
g.drawLine(x + 1, y + 1, x + dx, y + 1);
g.drawLine(x + 1, y + 1, x + 1, y + h - shadowSize - 1);
g.setColor(Color.white);
g.drawLine(x + dx, y + 1, x + w - 2, y + 1);
g.setColor(borderColorLo);
g.drawLine(x + dx - 1, y + 1, x + dx - 1, y + h - shadowSize - 1);
g.drawRect(x, y, w - shadowSize - 1, h - shadowSize - 1);
// paint the shadow
g2D.setColor(Color.black);
float alphaValue = 0.6f;
for (int i = 0; i < shadowSize; i++) {
alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alphaValue);
g2D.setComposite(alpha);
g.drawLine(x + w - shadowSize + i, y + shadowSize, x + w - shadowSize + i, y + h - shadowSize - 1 + i);
g.drawLine(x + shadowSize, y + h - shadowSize + i, x + w - shadowSize + i, y + h - shadowSize + i);
alphaValue -= (alphaValue / 2);
}
g2D.setComposite(composite);
}
} // class PopupMenuShadowBorder
public static class MenuItemBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(2, 2, 2, 2);
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
JMenuItem b = (JMenuItem) c;
ButtonModel model = b.getModel();
Color borderColorLo = AbstractLookAndFeel.getFrameColor();
Color borderColorHi = ColorHelper.brighter(AbstractLookAndFeel.getMenuSelectionBackgroundColor(), 50);
if (c.getParent() instanceof JMenuBar) {
if (model.isArmed() || model.isSelected()) {
g.setColor(borderColorLo);
g.drawLine(x, y, x + w - 1, y);
g.drawLine(x, y, x, y + h - 1);
g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1);
g.setColor(borderColorHi);
g.drawLine(x + 1, y + 1, x + w - 2, y + 1);
g.drawLine(x + 1, y + 1, x + 1, y + h - 2);
}
} else {
if (model.isArmed() || (c instanceof JMenu && model.isSelected())) {
g.setColor(borderColorLo);
g.drawLine(x, y, x + w - 1, y);
g.drawLine(x, y + h - 1, x + w - 1, y + h - 1);
g.setColor(borderColorHi);
g.drawLine(x, y + 1, x + w - 2, y + 1);
}
}
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class MenuItemBorder
public static class ToolBarBorder extends AbstractBorder implements UIResource, SwingConstants {
private static final Color shadow = new Color(160, 160, 160);
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
if (((JToolBar) c).isFloatable()) {
Graphics2D g2D = (Graphics2D) g;
Composite composite = g2D.getComposite();
AlphaComposite alpha = alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
g2D.setComposite(alpha);
if (((JToolBar) c).getOrientation() == HORIZONTAL) {
if (!JTattooUtilities.isLeftToRight(c)) {
x += w - 15;
}
g.setColor(Color.white);
g.drawLine(x + 3, y + 4, x + 3, h - 5);
g.drawLine(x + 6, y + 3, x + 6, h - 4);
g.drawLine(x + 9, y + 4, x + 9, h - 5);
g.setColor(shadow);
g.drawLine(x + 4, y + 4, x + 4, h - 5);
g.drawLine(x + 7, y + 3, x + 7, h - 4);
g.drawLine(x + 10, y + 4, x + 10, h - 5);
} else {
// vertical
g.setColor(Color.white);
g.drawLine(x + 3, y + 3, w - 4, y + 3);
g.drawLine(x + 3, y + 6, w - 4, y + 6);
g.drawLine(x + 3, y + 9, w - 4, y + 9);
g.setColor(shadow);
g.drawLine(x + 3, y + 4, w - 4, y + 4);
g.drawLine(x + 3, y + 7, w - 4, y + 7);
g.drawLine(x + 3, y + 10, w - 4, y + 10);
}
g2D.setComposite(composite);
}
}
public Insets getBorderInsets(Component c) {
Insets insets = new Insets(2, 2, 2, 2);
if (((JToolBar) c).isFloatable()) {
if (((JToolBar) c).getOrientation() == HORIZONTAL) {
if (JTattooUtilities.isLeftToRight(c)) {
insets.left = 15;
} else {
insets.right = 15;
}
} else {
insets.top = 15;
}
}
Insets margin = ((JToolBar) c).getMargin();
if (margin != null) {
insets.left += margin.left;
insets.top += margin.top;
insets.right += margin.right;
insets.bottom += margin.bottom;
}
return insets;
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
Insets insets = getBorderInsets(c);
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class ToolBarBorder
public static class ToolButtonBorder implements Border, UIResource {
private static final Insets insets = new Insets(2, 2, 2, 2);
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
AbstractButton button = (AbstractButton) c;
ButtonModel model = button.getModel();
Color frameColor = AbstractLookAndFeel.getToolbarBackgroundColor();
Color frameHiColor = ColorHelper.brighter(frameColor, 10);
Color frameLoColor = ColorHelper.darker(frameColor, 30);
JTattooUtilities.draw3DBorder(g, frameHiColor, frameLoColor, x, y, w, h);
if ((model.isPressed() && model.isArmed()) || model.isSelected()) {
JTattooUtilities.draw3DBorder(g, frameLoColor, frameHiColor, x, y, w, h);
} else {
JTattooUtilities.draw3DBorder(g, frameLoColor, frameHiColor, x, y, w, h);
JTattooUtilities.draw3DBorder(g, frameHiColor, frameLoColor, x + 1, y + 1, w - 2, h - 2);
}
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
public boolean isBorderOpaque() {
return true;
}
} // class ToolButtonBorder
public static class PaletteBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(1, 1, 1, 1);
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
if (JTattooUtilities.isFrameActive((JComponent) c)) {
g.setColor(AbstractLookAndFeel.getWindowBorderColor());
} else {
g.setColor(AbstractLookAndFeel.getWindowInactiveBorderColor());
}
g.drawRect(x, y, w - 1, h - 1);
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class PaletteBorder
public static class BaseInternalFrameBorder extends AbstractBorder implements UIResource {
protected final int dw = 5;
protected final int trackWidth = 22;
protected final Insets insets = new Insets(dw, dw, dw, dw);
protected final Insets paletteInsets = new Insets(3, 3, 3, 3);
public BaseInternalFrameBorder() {
insets.top = dw;
}
public boolean isResizable(Component c) {
boolean resizable = true;
if (c instanceof JDialog) {
JDialog dialog = (JDialog) c;
resizable = dialog.isResizable();
} else if (c instanceof JInternalFrame) {
JInternalFrame frame = (JInternalFrame) c;
resizable = frame.isResizable();
} else if (c instanceof JRootPane) {
JRootPane jp = (JRootPane) c;
if (jp.getParent() instanceof JFrame) {
JFrame frame = (JFrame) c.getParent();
resizable = frame.isResizable();
} else if (jp.getParent() instanceof JDialog) {
JDialog dialog = (JDialog) c.getParent();
resizable = dialog.isResizable();
}
}
return resizable;
}
public boolean isActive(Component c) {
boolean active = true;
if (c instanceof JDialog) {
JDialog dlg = (JDialog) c;
if (dlg.getParent() instanceof JComponent) {
return JTattooUtilities.isActive((JComponent) (dlg.getParent()));
}
} else if (c instanceof JInternalFrame) {
JInternalFrame frame = (JInternalFrame) c;
active = frame.isSelected();
if (active) {
return JTattooUtilities.isActive(frame);
}
} else if (c instanceof JRootPane) {
JRootPane jp = (JRootPane) c;
if (jp.getTopLevelAncestor() instanceof Window) {
Window window = (Window) jp.getTopLevelAncestor();
return JTattooUtilities.isWindowActive(window);
}
}
return active;
}
public int getTitleHeight(Component c) {
int th = 21;
int fh = getBorderInsets(c).top + getBorderInsets(c).bottom;
if (c instanceof JDialog) {
JDialog dialog = (JDialog) c;
th = dialog.getSize().height - dialog.getContentPane().getSize().height - fh - 1;
if (dialog.getJMenuBar() != null) {
th -= dialog.getJMenuBar().getSize().height;
}
} else if (c instanceof JInternalFrame) {
JInternalFrame frame = (JInternalFrame) c;
th = frame.getSize().height - frame.getRootPane().getSize().height - fh - 1;
if (frame.getJMenuBar() != null) {
th -= frame.getJMenuBar().getSize().height;
}
} else if (c instanceof JRootPane) {
JRootPane jp = (JRootPane) c;
if (jp.getParent() instanceof JFrame) {
JFrame frame = (JFrame) c.getParent();
th = frame.getSize().height - frame.getContentPane().getSize().height - fh - 1;
if (frame.getJMenuBar() != null) {
th -= frame.getJMenuBar().getSize().height;
}
} else if (jp.getParent() instanceof JDialog) {
JDialog dialog = (JDialog) c.getParent();
th = dialog.getSize().height - dialog.getContentPane().getSize().height - fh - 1;
if (dialog.getJMenuBar() != null) {
th -= dialog.getJMenuBar().getSize().height;
}
}
}
return th;
}
public Insets getBorderInsets(Component c) {
if (isResizable(c)) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
} else {
return new Insets(paletteInsets.top, paletteInsets.left, paletteInsets.bottom, paletteInsets.right);
}
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
Insets ins = getBorderInsets(c);
borderInsets.left = ins.left;
borderInsets.top = ins.top;
borderInsets.right = ins.right;
borderInsets.bottom = ins.bottom;
return borderInsets;
}
} // class BaseInternalFrameBorder
public static class Down3DBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(1, 1, 1, 1);
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
Color frameColor = AbstractLookAndFeel.getTheme().getBackgroundColor();
JTattooUtilities.draw3DBorder(g, ColorHelper.darker(frameColor, 20), ColorHelper.brighter(frameColor, 80), x, y, w, h);
}
public Insets getBorderInsets(Component c) {
return new Insets(insets.top, insets.left, insets.bottom, insets.right);
}
public Insets getBorderInsets(Component c, Insets borderInsets) {
borderInsets.left = insets.left;
borderInsets.top = insets.top;
borderInsets.right = insets.right;
borderInsets.bottom = insets.bottom;
return borderInsets;
}
} // class Down3DBorder
} // class BaseBorders