com.jidesoft.plaf.aqua.AquaJideTabbedPaneUI Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jide-oss Show documentation
Show all versions of jide-oss Show documentation
JIDE Common Layer (Professional Swing Components)
/*
* @(#)WindowsTabbedPaneUI.java
*
* Copyright 2002 JIDE Software Inc. All rights reserved.
*/
package com.jidesoft.plaf.aqua;
import com.jidesoft.plaf.vsnet.VsnetJideTabbedPaneUI;
import com.jidesoft.swing.TabColorProvider;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import java.awt.*;
/**
* JideTabbedPane UI implementation
*/
public class AquaJideTabbedPaneUI extends VsnetJideTabbedPaneUI
{
public static ComponentUI createUI(JComponent c)
{
return new AquaJideTabbedPaneUI();
}
@Override
protected void paintTabBackground(Graphics g, int tabPlacement,
int tabIndex,
int x, int y, int w, int h,
boolean isSelected)
{
super.paintTabBackground(g, tabPlacement, tabIndex, x, y, w, h, isSelected);
if (_tabPane.getTabColorProvider() != null && _tabPane.getTabColorProvider().getBackgroundAt(tabIndex) != null)
{
return;
}
if (tabIndex >= 0 && tabIndex < _tabPane.getTabCount())
{
Component component = _tabPane.getComponentAt(tabIndex);
if (component instanceof TabColorProvider && ((TabColorProvider) component).getTabBackground() != null)
{
return;
}
}
if (!PAINT_TAB_BACKGROUND)
{
return;
}
if (!isSelected)
{
return;
}
Color[] color = AquaJideUtils.isGraphite() ? AquaJideUtils.AQUA_GRAPHITE : AquaJideUtils.AQUA_BLUE;
if (tabRegion != null)
{
Graphics2D g2d = (Graphics2D) g;
switch (tabPlacement)
{
case LEFT:
AquaJideUtils.fillAquaGradientVertical(g2d, tabRegion, color);
break;
case RIGHT:
AquaJideUtils.fillAquaGradientVertical(g2d, tabRegion, color);
break;
case BOTTOM:
AquaJideUtils.fillAquaGradientHorizontal(g2d, tabRegion, color);
break;
case TOP:
default:
AquaJideUtils.fillAquaGradientHorizontal(g2d, tabRegion, color);
break;
}
}
}
@Override
protected void paintFocusIndicator(Graphics g, int tabPlacement, Rectangle[] rects, int tabIndex, Rectangle iconRect, Rectangle textRect, boolean isSelected)
{
// no focus rect here
}
@Override
protected boolean isRoundedCorner()
{
return true;
}
protected boolean isShading()
{
return true;
}
@Override
protected Color getBorderEdgeColor()
{
return _shadow;
}
@Override
protected TabCloseButton createNoFocusButton(int type)
{
return new AquaTabCloseButton(type);
}
private static final Color COLOR1 = new Color(130, 130, 130);
private static final Color COLOR2 = new Color(86, 86, 86);
private static final Color COLOR3 = new Color(252, 252, 252);
public class AquaTabCloseButton extends TabCloseButton
{
/**
* Resets the UI property to a value from the current look and feel.
* @see JComponent#updateUI
*/
@Override
public void updateUI()
{
super.updateUI();
setMargin(new Insets(0, 0, 0, 0));
setBorder(BorderFactory.createEmptyBorder());
setFocusPainted(false);
}
public AquaTabCloseButton()
{
this(CLOSE_BUTTON);
}
public AquaTabCloseButton(int type)
{
addMouseMotionListener(this);
addMouseListener(this);
setContentAreaFilled(false);
setType(type);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(16, 16);
}
@Override
public Dimension getMinimumSize()
{
return new Dimension(5, 5);
}
@Override
public Dimension getMaximumSize()
{
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
@Override
protected void paintComponent(Graphics g)
{
if (!isEnabled())
{
setMouseOver(false);
setMousePressed(false);
}
// draw "icons" antialiased
AquaJideUtils.antialiasShape(g, true);
Color color = g.getColor();
if (isMouseOver() && isMousePressed())
{
g.setColor(COLOR1);
g.fillOval(2, 2, getWidth() - 4, getHeight() - 4);
g.setColor(COLOR2);
}
else if (isMouseOver())
{
g.setColor(COLOR1);
g.fillOval(2, 2, getWidth() - 4, getHeight() - 4);
g.setColor(COLOR3);
}
else
{
g.setColor(COLOR1);
}
int centerX = getWidth() >> 1;
int centerY = getHeight() >> 1;
switch (getType())
{
case CLOSE_BUTTON:
if (isEnabled())
{
g.drawLine(centerX - 2, centerY - 2, centerX + 2, centerY + 2);
g.drawLine(centerX - 3, centerY - 2, centerX + 1, centerY + 2);
g.drawLine(centerX + 2, centerY - 2, centerX - 2, centerY + 2);
g.drawLine(centerX + 1, centerY - 2, centerX - 3, centerY + 2);
}
else
{
g.drawLine(centerX - 3, centerY - 3, centerX + 3, centerY + 3);
g.drawLine(centerX + 3, centerY - 3, centerX - 3, centerY + 3);
}
break;
case EAST_BUTTON:
// a bit smaller on Aqua
//
// |
// ||
// |||
// |||*
// |||
// ||
// |
//
{
if (_tabPane.getTabPlacement() == TOP || _tabPane.getTabPlacement() == BOTTOM)
{
int x = centerX + 2, y = centerY; // start point. mark as * above
if (isEnabled())
{
g.drawLine(x - 3, y - 3, x - 3, y + 3);
g.drawLine(x - 2, y - 2, x - 2, y + 2);
g.drawLine(x - 1, y - 1, x - 1, y + 1);
g.drawLine(x, y, x, y);
}
else
{
g.drawLine(x - 3, y - 3, x, y);
g.drawLine(x - 3, y - 3, x - 3, y + 3);
g.drawLine(x - 3, y + 3, x, y);
}
}
else
{
int x = centerX, y = centerY + 2; // start point. mark as * above
if (isEnabled())
{
g.drawLine(x - 3, y - 3, x + 3, y - 3);
g.drawLine(x - 2, y - 2, x + 2, y - 2);
g.drawLine(x - 1, y - 1, x + 1, y - 1);
g.drawLine(x, y, x, y);
}
else
{
g.drawLine(x - 3, y - 3, x, y);
g.drawLine(x - 3, y - 3, x + 3, y - 3);
g.drawLine(x + 3, y - 3, x, y);
}
}
}
break;
case WEST_BUTTON:
{
// a bit smaller on Aqua
//
// |
// ||
// |||
// *|||
// |||
// ||
// |
//
//
{
if (_tabPane.getTabPlacement() == TOP || _tabPane.getTabPlacement() == BOTTOM)
{
int x = centerX - 3, y = centerY; // start point. mark as * above
if (isEnabled())
{
g.drawLine(x, y, x, y);
g.drawLine(x + 1, y - 1, x + 1, y + 1);
g.drawLine(x + 2, y - 2, x + 2, y + 2);
g.drawLine(x + 3, y - 3, x + 3, y + 3);
}
else
{
g.drawLine(x, y, x + 3, y - 3);
g.drawLine(x, y, x + 3, y + 3);
g.drawLine(x + 3, y - 3, x + 3, y + 3);
}
}
else
{
int x = centerX, y = centerY - 2; // start point. mark as * above
if (isEnabled())
{
g.drawLine(x, y, x, y);
g.drawLine(x - 1, y + 1, x + 1, y + 1);
g.drawLine(x - 2, y + 2, x + 2, y + 2);
g.drawLine(x - 3, y + 3, x + 3, y + 3);
}
else
{
g.drawLine(x, y, x - 3, y + 3);
g.drawLine(x, y, x + 3, y + 3);
g.drawLine(x - 3, y + 3, x + 3, y + 3);
}
}
}
break;
}
case LIST_BUTTON:
{
int x = centerX, y = centerY + 2; // start point. mark as * above
g.drawLine(x - 3, y - 3, x + 3, y - 3);
g.drawLine(x - 2, y - 2, x + 2, y - 2);
g.drawLine(x - 1, y - 1, x + 1, y - 1);
g.drawLine(x, y, x, y);
break;
}
}
g.setColor(color);
// Disable antialiasing for shapes
AquaJideUtils.antialiasShape(g, false);
}
@Override
public boolean isOpaque()
{
return false;
}
}
@Override
protected void prepareEditor(TabEditor e, int tabIndex)
{
e.setOpaque(true);
super.prepareEditor(e, tabIndex);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy