
com.jidesoft.plaf.aqua.AquaJideTabbedPaneUI Maven / Gradle / Ivy
/*
* @(#)WindowsTabbedPaneUI.java
*
* Copyright 2002 JIDE Software Inc. All rights reserved.
*/
package com.jidesoft.plaf.aqua;
import com.jidesoft.plaf.vsnet.VsnetJideTabbedPaneUI;
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) {
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