package com.alibaba.luaview.debugger.ui;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import javax.swing.Icon;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
public class EclipseTabbedPaneUI extends BasicTabbedPaneUI {
public static final Color LINE_COLOR = new Color(182, 188, 203);
private static final int R = 13;
@Override
protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected) {
if (tabPlacement == BOTTOM) {
g.setColor(LINE_COLOR);
g.drawLine(x, y + h - 1, x + w, y + h - 1);
}
if (tabPlacement == TOP && isSelected) {
g.setColor(LINE_COLOR);
Shape shape = g.getClip();
g.setClip(x, y, w + 2, h);
g.drawRoundRect(x, y, w, h + R + R, R, R);
g.setClip(shape);
}
}
protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects, int tabIndex, Rectangle iconRect, Rectangle textRect) {
super.paintTab(g, tabPlacement, rects, tabIndex, iconRect, textRect);
}
/**
* Give selected tab blue color with a gradient!!.
*
* FIXME: with Plastic L&F the unselected background is too dark
*/
@Override
protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected) {
// Color color = UIManager.getColor("control");
if (isSelected) {
if (tabPlacement == TOP) {
g.setColor(Color.white);
g.fillRoundRect(x, y, w, h + R + R, R, R);
}
} else {
}
}
/**
* Do not paint a focus indicator.
*/
@Override
protected void paintFocusIndicator(Graphics arg0, int arg1, Rectangle[] arg2, int arg3, Rectangle arg4, Rectangle arg5, boolean arg6) {
// Leave it
}
/**
* We do not want the tab to "lift up" when it is selected.
*/
@Override
protected void installDefaults() {
super.installDefaults();
tabAreaInsets = new Insets(0, 0, 0, 0);
selectedTabPadInsets = new Insets(0, 0, 0, 0);
contentBorderInsets = new Insets(1, 0, 0, 0);
}
/**
* Nor do we want the label to move.
*/
@Override
protected int getTabLabelShiftY(int tabPlacement, int tabIndex, boolean isSelected) {
return 0;
}
/**
* Increase the tab height a bit
*/
@Override
protected int calculateTabHeight(int tabPlacement, int tabIndex, int fontHeight) {
return fontHeight + 4;
}
@Override
protected void layoutLabel(int arg0, FontMetrics arg1, int arg2, String arg3, Icon arg4, Rectangle arg5, Rectangle arg6, Rectangle arg7, boolean arg8) {
super.layoutLabel(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
}
/**
* Selected labels have a white color.
*/
@Override
protected void paintText(Graphics tempG, int tabPlacement, Font font, FontMetrics metrics, int tabIndex, String title, Rectangle textRect,
boolean isSelected) {
Graphics2D g = (Graphics2D) tempG;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (isSelected && tabPlacement == TOP) {
g.setColor(Color.BLACK);
} else {
g.setColor(Color.BLACK);
}
g.drawString(title, textRect.x, textRect.y + metrics.getAscent());
}
@Override
protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
int taille = 0;
taille = super.calculateTabWidth(tabPlacement, tabIndex, metrics);
return taille;
}
@Override
protected void paintContentBorderTopEdge(Graphics g, int tabPlacement, int selectedIndex, int x, int y, int w, int h) {
if (selectedIndex != -1 && tabPlacement == TOP) {
g.setColor(LINE_COLOR);
g.drawLine(x, y, x + w, y);
}
if (tabPlacement == BOTTOM) {
// g.setColor(Color.black);
// g.drawLine(x, y + h - 1, x + w, y + h - 1);
}
}
@Override
protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement, int selectedIndex, int x, int y, int w, int h) {
g.setColor(LINE_COLOR);
g.drawLine(x, y + h, x + w, y + h);
}
@Override
protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement, int selectedIndex, int x, int y, int w, int h) {
// do nothingx, y, x, y + h);
}
@Override
protected void paintContentBorderRightEdge(Graphics g, int tabPlacement, int selectedIndex, int x, int y, int w, int h) {
// do nothing
}
// @Override
// protected MouseListener createMouseListener() {
// return new CloseHandler();
// }
//
// class CloseHandler extends MouseHandler {
// public CloseHandler() {
// super();
// }
//
// public void mouseReleased(MouseEvent e) {
// int x = e.getX();
// int y = e.getY();
// int tabIndex = -1;
// int tabCount = tabPane.getTabCount();
// for (int i = 0; i < tabCount; i++) {
// if (rects[i].contains(x, y)) {
// tabIndex = i;
// break;
// }
// }
//
// if (tabIndex >= 0 && !e.isPopupTrigger()) {
// Rectangle tabRect = rects[tabIndex];
// y = y - tabRect.y;
// if ((x >= tabRect.x + tabRect.width - 18) && (x <= tabRect.x +
// tabRect.width - 8) && (y >= 5) && (y <= 15)) {
// tabPane.remove(tabIndex);
// }
// }
// }
// }
}