帆软使用的第三方框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

879 lines
26 KiB

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tiny Look and Feel *
* *
* (C) Copyright 2003 - 2007 Hans Bickel *
* *
* For licensing information and credits, please refer to the *
* comment in file de.muntjak.tinylookandfeel.TinyLookAndFeel *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package de.muntjak.tinylookandfeel;
import java.awt.*;
import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.plaf.ComponentUI;
import de.muntjak.tinylookandfeel.borders.TinyFrameBorder;
import de.muntjak.tinylookandfeel.borders.TinyInternalFrameBorder;
import de.muntjak.tinylookandfeel.controlpanel.*;
/**
* TinyWindowButtonUI
*
* @version 1.0
* @author Hans Bickel
*/
public class TinyWindowButtonUI extends TinyButtonUI {
private int type;
/** An icon to indicate that this button closes the windows */
public final static int CLOSE = 0;
/** An icon to indicate that this button maximizes the windows */
public final static int MAXIMIZE = 1;
/** An icon to indicate that this button minmizes / iconfies the windows */
public final static int MINIMIZE = 2;
public static ComponentUI createUI(JComponent c) {
throw new IllegalStateException("Must not be used this way.");
}
TinyWindowButtonUI(int type) {
this.type = type;
}
public void installDefaults(AbstractButton button) {
super.installDefaults(button);
button.setBorder(null);
button.setFocusable(false);
}
protected void paintFocus(Graphics g, AbstractButton b,
Rectangle viewRect, Rectangle textRect, Rectangle iconRect) {}
public void paint(Graphics g, JComponent c) {
AbstractButton button = (AbstractButton) c;
boolean frameSelected = false;
boolean frameMaximized = false;
if(c.getParent() instanceof TinyInternalFrameTitlePane) {
frameSelected = ((TinyInternalFrameTitlePane)c.getParent()).isFrameSelected();
frameMaximized = ((TinyInternalFrameTitlePane)c.getParent()).isFrameMaximized();
}
else if(c.getParent() instanceof TinyTitlePane) {
frameSelected = ((TinyTitlePane)c.getParent()).isSelected();
frameMaximized = ((TinyTitlePane)c.getParent()).isFrameMaximized();
}
int w = button.getWidth();
int h = button.getHeight();
// content area
Color col = null;
if(!frameSelected) {
if(button.isEnabled()) {
if(button.getModel().isPressed()) {
if(type == CLOSE) {
col = Theme.frameButtClosePressedColor[Theme.style].getColor();
}
else {
col = Theme.frameButtPressedColor[Theme.style].getColor();
}
}
else {
if(type == CLOSE) {
col = Theme.frameButtCloseColor[Theme.style].getColor();
}
else {
col = Theme.frameButtColor[Theme.style].getColor();
}
}
}
else {
if(type == CLOSE) {
col = Theme.frameButtCloseDisabledColor[Theme.style].getColor();
}
else {
col = Theme.frameButtDisabledColor[Theme.style].getColor();
}
}
}
else if(button.getModel().isPressed()) {
if(button.getModel().isRollover()) {
if(type == CLOSE) {
col = Theme.frameButtClosePressedColor[Theme.style].getColor();
}
else {
col = Theme.frameButtPressedColor[Theme.style].getColor();
}
}
else {
if(type == CLOSE) {
col = Theme.frameButtCloseColor[Theme.style].getColor();
}
else {
col = Theme.frameButtColor[Theme.style].getColor();
}
}
}
else if(button.getModel().isRollover()) {
if(type == CLOSE) {
col = Theme.frameButtCloseRolloverColor[Theme.style].getColor();
}
else {
col = Theme.frameButtRolloverColor[Theme.style].getColor();
}
}
else {
if(type == CLOSE) {
col = Theme.frameButtCloseColor[Theme.style].getColor();
}
else {
col = Theme.frameButtColor[Theme.style].getColor();
}
}
g.setColor(col);
switch(Theme.derivedStyle[Theme.style]) {
case Theme.TINY_STYLE:
drawTinyButton(g, button, col, w, h, frameSelected);
break;
case Theme.W99_STYLE:
drawWinButton(g, button, col, w, h, frameSelected);
break;
case Theme.YQ_STYLE:
drawXpButton(g, button, col, w, h, frameSelected);
break;
}
// draw symbol
if(!button.isEnabled()) {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolCloseDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolDisabledColor[Theme.style].getColor());
}
}
else {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolCloseColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolColor[Theme.style].getColor());
}
}
switch(Theme.derivedStyle[Theme.style]) {
case Theme.TINY_STYLE:
drawTinySymbol(g, button, col, w, h, frameSelected, frameMaximized);
break;
case Theme.W99_STYLE:
drawWinSymbol(g, button, col, w, h, frameSelected, frameMaximized);
break;
case Theme.YQ_STYLE:
drawXpSymbol(g, button, col, w, h, frameSelected, frameMaximized);
break;
}
}
private void drawTinyButton(
Graphics g, AbstractButton button, Color c, int w, int h, boolean frameSelected)
{
g.fillRect(1, 1, w - 2, h - 2);
}
private void drawWinButton(
Graphics g, AbstractButton button, Color c, int w, int h, boolean frameSelected)
{
g.fillRect(1, 1, w - 2, h - 2);
// Border
if((button.getModel().isPressed() && button.getModel().isRollover()) ||
(button.getModel().isPressed() && !frameSelected))
{
g.setColor(Theme.frameButtBorderColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameButtLightColor[Theme.style].getColor());
}
g.drawLine(0, 0, w - 2, 0);
g.drawLine(0, 1, 0, h - 2);
g.setColor(Theme.frameButtDarkColor[Theme.style].getColor());
if((button.getModel().isPressed() && button.getModel().isRollover()) ||
(button.getModel().isPressed() && !frameSelected))
{
g.drawLine(1, 1, w - 2, 1);
g.drawLine(1, 1, 1, h - 3);
}
else {
g.drawLine(1, h - 2, w - 2, h - 2);
g.drawLine(w - 2, 1, w - 2, h - 3);
}
if((button.getModel().isPressed() && button.getModel().isRollover()) ||
(button.getModel().isPressed() && !frameSelected))
{
g.setColor(Theme.frameButtLightColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameButtBorderColor[Theme.style].getColor());
}
g.drawLine(0, h - 1, w - 1, h - 1);
g.drawLine(w - 1, 0, w - 1, h - 2);
}
// Button for internal frames and dialogs
private void drawXpButton(Graphics g, AbstractButton button,
Color c, int w, int h, boolean frameSelected)
{
if(button.getClientProperty("externalFrameButton") == Boolean.TRUE) {
drawXpLargeButton(g, button, c, w, h, frameSelected);
return;
}
g.fillRect(1, 1, w - 2, h - 2);
boolean isPalette = false;
if(button.getParent() instanceof TinyInternalFrameTitlePane) {
if(((TinyInternalFrameTitlePane)button.getParent()).isPalette()) {
isPalette = true;
}
}
if(frameSelected) {
g.setColor(TinyInternalFrameBorder.frameUpperColor);
g.drawLine(0, 0, w - 1, 0);
g.drawLine(0, 1, 0, 1); // ol
g.drawLine(w - 1, 1, w - 1, 1); // or
g.setColor(TinyInternalFrameBorder.frameLowerColor);
g.drawLine(0, h - 1, w - 1, h - 1);
g.drawLine(0, h - 2, 0, h - 2); // ul
g.drawLine(w - 1, h - 2, w - 1, h - 2); // ur
}
else {
g.setColor(TinyInternalFrameBorder.disabledUpperColor);
g.drawLine(0, 0, w - 1, 0);
g.drawLine(0, 1, 0, 1); // ol
g.drawLine(w - 1, 1, w - 1, 1); // or
g.setColor(TinyInternalFrameBorder.disabledLowerColor);
g.drawLine(0, h - 1, w - 1, h - 1);
g.drawLine(0, h - 2, 0, h - 2); // ul
g.drawLine(w - 1, h - 2, w - 1, h - 2); // ur
}
Color col = null;
if(!button.isEnabled()) {
if(type == CLOSE) {
col = Theme.frameButtCloseBorderDisabledColor[Theme.style].getColor();
}
else {
col = Theme.frameButtBorderDisabledColor[Theme.style].getColor();
}
}
else {
if(type == CLOSE) {
col = Theme.frameButtCloseBorderColor[Theme.style].getColor();
}
else {
col = Theme.frameButtBorderColor[Theme.style].getColor();
}
}
DrawRoutines.drawRoundedBorder(g, col, 0, 0, w, h);
if(!button.isEnabled()) {
if(type == CLOSE) {
col = Theme.frameButtCloseLightDisabledColor[Theme.style].getColor();
}
else {
col = Theme.frameButtLightDisabledColor[Theme.style].getColor();
}
}
else {
if(type == CLOSE) {
col = Theme.frameButtCloseLightColor[Theme.style].getColor();
}
else {
col = Theme.frameButtLightColor[Theme.style].getColor();
}
}
g.setColor(col);
g.drawLine(2, 1, w - 3, 1);
g.drawLine(1, 2, 1, h - 3);
if(!button.isEnabled()) {
if(type == CLOSE) {
col = Theme.frameButtCloseDarkDisabledColor[Theme.style].getColor();
}
else {
col = Theme.frameButtDarkDisabledColor[Theme.style].getColor();
}
}
else {
if(type == CLOSE) {
col = Theme.frameButtCloseDarkColor[Theme.style].getColor();
}
else {
col = Theme.frameButtDarkColor[Theme.style].getColor();
}
}
g.setColor(col);
g.drawLine(w - 2, 2, w - 2, h - 3);
g.drawLine(2, h - 2, w - 3, h - 2);
}
private void drawXpLargeButton(Graphics g, AbstractButton b,
Color c, int w, int h, boolean frameSelected)
{
g.setColor(TinyFrameBorder.buttonUpperColor);
g.drawLine(0, 0, w - 1, 0);
g.setColor(TinyFrameBorder.buttonLowerColor);
g.drawLine(0, h - 1, w - 1, h - 1);
int spread1 = Theme.frameButtSpreadLight[Theme.style];
int spread2 = Theme.frameButtSpreadDark[Theme.style];
if(!b.isEnabled()) {
if(type == CLOSE) {
spread1 = Theme.frameButtCloseSpreadLightDisabled[Theme.style];
spread2 = Theme.frameButtCloseSpreadDarkDisabled[Theme.style];
}
else {
spread1 = Theme.frameButtSpreadLightDisabled[Theme.style];
spread2 = Theme.frameButtSpreadDarkDisabled[Theme.style];
}
}
else if(type == CLOSE) {
spread1 = Theme.frameButtCloseSpreadLight[Theme.style];
spread2 = Theme.frameButtCloseSpreadDark[Theme.style];
}
float spreadStep1 = 10.0f * spread1 / (h - 3);
float spreadStep2 = 10.0f * spread2 / (h - 3);
int halfY = h / 2;
int yd;
for(int y = 1; y < h - 1; y++) {
if(y < halfY) {
yd = halfY - y;
g.setColor(ColorRoutines.lighten(c, (int)(yd * spreadStep1)));
}
else if(y == halfY) {
g.setColor(c);
}
else {
yd = y - halfY;
g.setColor(ColorRoutines.darken(c, (int)(yd * spreadStep2)));
}
g.drawLine(2, y, w - 3, y);
if(y == 1 && b.isEnabled()) {
// left vertical line
g.drawLine(1, 2, 1, h - 3);
}
else if(y == h - 2) {
// right vertical line
g.drawLine(w - 2, 2, w - 2, h - 3);
}
}
if(!b.isEnabled()) {
if(type == CLOSE) {
DrawRoutines.drawRoundedBorder(g,
Theme.frameButtCloseBorderDisabledColor[Theme.style].getColor(), 0, 0, w, h);
}
else {
DrawRoutines.drawRoundedBorder(g,
Theme.frameButtBorderDisabledColor[Theme.style].getColor(), 0, 0, w, h);
}
}
else {
if(type == CLOSE) {
DrawRoutines.drawRoundedBorder(g,
Theme.frameButtCloseBorderColor[Theme.style].getColor(), 0, 0, w, h);
}
else {
DrawRoutines.drawRoundedBorder(g,
Theme.frameButtBorderColor[Theme.style].getColor(), 0, 0, w, h);
}
}
}
private void drawTinySymbol(Graphics g, AbstractButton button, Color c,
int w, int h, boolean frameSelected, boolean frameMaximized)
{
}
private void drawWinSymbol(Graphics g, AbstractButton button, Color c,
int w, int h, boolean frameSelected, boolean frameMaximized)
{
int x = 3; int y = 2;
if((button.getModel().isPressed() && button.getModel().isRollover()) ||
(button.getModel().isPressed() && !frameSelected))
{
x = 4; y = 3;
}
switch(type) {
case CLOSE:
g.drawLine(x + 1, y + 1, x + 2, y + 1);
g.drawLine(x + 7, y + 1, x + 8, y + 1);
g.drawLine(x + 2, y + 2, x + 3, y + 2);
g.drawLine(x + 6, y + 2, x + 7, y + 2);
g.drawLine(x + 3, y + 3, x + 6, y + 3);
g.drawLine(x + 4, y + 4, x + 5, y + 4);
g.drawLine(x + 3, y + 5, x + 6, y + 5);
g.drawLine(x + 2, y + 6, x + 3, y + 6);
g.drawLine(x + 6, y + 6, x + 7, y + 6);
g.drawLine(x + 1, y + 7, x + 2, y + 7);
g.drawLine(x + 7, y + 7, x + 8, y + 7);
break;
case MAXIMIZE:
if(frameMaximized) {
g.fillRect(x + 2, y, 6, 2);
g.drawLine(x + 2, y + 2, x + 2, y + 2);
g.drawLine(x + 6, y + 5, x + 7, y + 5);
g.drawLine(x + 7, y + 2, x + 7, y + 4);
g.drawLine(x, y + 3, x + 5, y + 3);
g.drawRect(x, y + 4, 5, 4);
}
else {
g.drawRect(x, y, 8, 8);
g.drawLine(x + 1, y + 1, x + 7, y + 1);
}
break;
case MINIMIZE:
g.drawRect(x + 1, y + 7, 6, 1);
break;
}
}
private void drawXpSymbol(Graphics g, AbstractButton button, Color c,
int w, int h, boolean frameSelected, boolean frameMaximized)
{
if(button.getClientProperty("externalFrameButton") == Boolean.TRUE) {
drawXpLargeSymbol(g, button, c, w, h, frameSelected, frameMaximized);
return;
}
if(button.getParent() instanceof TinyInternalFrameTitlePane) {
if(((TinyInternalFrameTitlePane)button.getParent()).isPalette()) {
drawXpSmallSymbol(g, button, c, w, h, frameSelected, frameMaximized);
return;
}
}
if(!frameSelected) {
if(button.isEnabled() && !button.getModel().isPressed()) {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolCloseColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolColor[Theme.style].getColor());
}
}
else {
if(type == CLOSE) {
if(button.getModel().isPressed()) {
g.setColor(Theme.frameSymbolClosePressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolCloseDisabledColor[Theme.style].getColor());
}
}
else {
if(button.getModel().isPressed()) {
g.setColor(Theme.frameSymbolPressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolDisabledColor[Theme.style].getColor());
}
}
}
}
else {
if(button.getModel().isPressed() && button.getModel().isRollover()) {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolClosePressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolPressedColor[Theme.style].getColor());
}
}
else {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolCloseColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolColor[Theme.style].getColor());
}
}
}
int x = 0; int y = 0;
switch(type) {
case CLOSE:
g.drawLine(x + 4, y + 3, x + 4, y + 3);
g.drawLine(x + 12, y + 3, x + 12, y + 3);
g.drawLine(x + 3, y + 4, x + 5, y + 4);
g.drawLine(x + 11, y + 4, x + 13, y + 4);
g.drawLine(x + 4, y + 5, x + 6, y + 5);
g.drawLine(x + 10, y + 5, x + 12, y + 5);
g.drawLine(x + 5, y + 6, x + 7, y + 6);
g.drawLine(x + 9, y + 6, x + 11, y + 6);
g.drawLine(x + 6, y + 7, x + 10, y + 7);
g.drawLine(x + 7, y + 8, x + 9, y + 8);
g.drawLine(x + 4, y + 13, x + 4, y + 13);
g.drawLine(x + 12, y + 13, x + 12, y + 13);
g.drawLine(x + 3, y + 12, x + 5, y + 12);
g.drawLine(x + 11, y + 12, x + 13, y + 12);
g.drawLine(x + 4, y + 11, x + 6, y + 11);
g.drawLine(x + 10, y + 11, x + 12, y + 11);
g.drawLine(x + 5, y + 10, x + 7, y + 10);
g.drawLine(x + 9, y + 10, x + 11, y + 10);
g.drawLine(x + 6, y + 9, x + 10, y + 9);
break;
case MAXIMIZE:
if(frameMaximized) {
g.fillRect(x + 6, y + 3, 8, 2);
g.drawLine(x + 6, y + 5, x + 6, y + 6);
g.drawLine(x + 11, y + 9, x + 13, y + 9);
g.drawLine(x + 13, y + 5, x + 13, y + 8);
g.drawLine(x + 3, y + 7, x + 10, y + 7);
g.drawRect(x + 3, y + 8, 7, 5);
}
else {
g.fillRect(x + 3, y + 3, 11, 2);
g.drawRect(x + 3, y + 5, 10, 8);
}
break;
case MINIMIZE:
g.fillRect(x + 3, y + 11, 7, 3);
break;
}
}
private void drawXpSmallSymbol(Graphics g, AbstractButton button, Color c,
int w, int h, boolean frameSelected, boolean frameMaximized)
{
if(!frameSelected) {
if(button.isEnabled() && !button.getModel().isPressed()) {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolCloseColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolColor[Theme.style].getColor());
}
}
else {
if(type == CLOSE) {
if(button.getModel().isPressed()) {
g.setColor(Theme.frameSymbolClosePressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolCloseDisabledColor[Theme.style].getColor());
}
}
else {
if(button.getModel().isPressed()) {
g.setColor(Theme.frameSymbolPressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolDisabledColor[Theme.style].getColor());
}
}
}
}
else {
if(button.getModel().isPressed() && button.getModel().isRollover()) {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolClosePressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolPressedColor[Theme.style].getColor());
}
}
else {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolCloseColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolColor[Theme.style].getColor());
}
}
}
int x = 0; int y = 0;
switch(type) {
case CLOSE:
g.drawLine(x + 3, y + 2, x + 3, y + 2);
g.drawLine(x + 9, y + 2, x + 9, y + 2);
g.drawLine(x + 2, y + 3, x + 4, y + 3);
g.drawLine(x + 8, y + 3, x + 10, y + 3);
g.drawLine(x + 3, y + 4, x + 5, y + 4);
g.drawLine(x + 7, y + 4, x + 9, y + 4);
g.drawLine(x + 4, y + 5, x + 8, y + 5);
g.drawLine(x + 5, y + 6, x + 7, y + 6);
g.drawLine(x + 4, y + 7, x + 8, y + 7);
g.drawLine(x + 3, y + 8, x + 5, y + 8);
g.drawLine(x + 7, y + 8, x + 9, y + 8);
g.drawLine(x + 2, y + 9, x + 4, y + 9);
g.drawLine(x + 8, y + 9, x + 10, y + 9);
g.drawLine(x + 3, y + 10, x + 3, y + 10);
g.drawLine(x + 9, y + 10, x + 9, y + 10);
break;
case MAXIMIZE:
if(frameMaximized) {
g.drawRect(x + 2, y + 6, 6, 4);
g.drawLine(x + 2, y + 5, x + 8, y + 5);
g.fillRect(x + 4, y + 2, x + 7, y + 2);
g.drawLine(x + 4, y + 4, x + 4, y + 4);
g.drawLine(x + 9, y + 7, x + 9, y + 7);
g.drawLine(x + 10, y + 4, x + 10, y + 7);
}
else {
g.drawLine(x + 2, y + 2, x + 10, y + 2);
g.drawRect(x + 2, y + 3, 8, 7);
}
break;
case MINIMIZE:
g.fillRect(x + 2, y + 8, 6, 3);
break;
}
}
private void drawXpLargeSymbol(Graphics g, AbstractButton b, Color c,
int w, int h, boolean frameSelected, boolean frameMaximized)
{
if(!frameSelected) {
if(b.isEnabled() && !b.getModel().isPressed()) {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolCloseColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolColor[Theme.style].getColor());
}
}
else {
if(type == CLOSE) {
if(b.getModel().isPressed()) {
g.setColor(Theme.frameSymbolClosePressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolCloseDisabledColor[Theme.style].getColor());
}
}
else {
if(b.getModel().isPressed()) {
g.setColor(Theme.frameSymbolPressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolDisabledColor[Theme.style].getColor());
}
}
}
}
else {
if(b.getModel().isPressed() && b.getModel().isRollover()) {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolClosePressedColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolPressedColor[Theme.style].getColor());
}
}
else {
if(type == CLOSE) {
g.setColor(Theme.frameSymbolCloseColor[Theme.style].getColor());
}
else {
g.setColor(Theme.frameSymbolColor[Theme.style].getColor());
}
}
}
int x = 0; int y = 0;
switch(type) {
case CLOSE:
g.drawLine(x + 5, y + 5, x + 6, y + 5);
g.drawLine(x + 14, y + 5, x + 15, y + 5);
g.drawLine(x + 5, y + 6, x + 7, y + 6);
g.drawLine(x + 13, y + 6, x + 15, y + 6);
g.drawLine(x + 6, y + 7, x + 8, y + 7);
g.drawLine(x + 12, y + 7, x + 14, y + 7);
g.drawLine(x + 7, y + 8, x + 9, y + 8);
g.drawLine(x + 11, y + 8, x + 13, y + 8);
g.drawLine(x + 8, y + 9, x + 12, y + 9);
g.drawLine(x + 9, y + 10, x + 11, y + 10);
g.drawLine(x + 5, y + 15, x + 6, y + 15);
g.drawLine(x + 14, y + 15, x + 15, y + 15);
g.drawLine(x + 5, y + 14, x + 7, y + 14);
g.drawLine(x + 13, y + 14, x + 15, y + 14);
g.drawLine(x + 6, y + 13, x + 8, y + 13);
g.drawLine(x + 12, y + 13, x + 14, y + 13);
g.drawLine(x + 7, y + 12, x + 9, y + 12);
g.drawLine(x + 11, y + 12, x + 13, y + 12);
g.drawLine(x + 8, y + 11, x + 12, y + 11);
break;
case MAXIMIZE:
if(frameMaximized) {
g.fillRect(x + 8, y + 4, 8, 2);
g.fillRect(x + 4, y + 9, 8, 2);
}
else {
g.fillRect(x + 5, y + 6, 10, 2);
}
break;
case MINIMIZE:
g.fillRect(x + 5, y + 14, 6, 2);
break;
}
Color col = null;
if(type == CLOSE) {
col = Theme.frameSymbolCloseLightColor[Theme.style].getColor();
}
else {
col = Theme.frameSymbolLightColor[Theme.style].getColor();
}
if(!frameSelected) {
col = ColorRoutines.getAverage(col, c);
}
g.setColor(col);
switch(type) {
case CLOSE:
// nothing
break;
case MAXIMIZE:
if(frameMaximized) {
g.drawLine(x + 7, y + 4, x + 7, y + 7);
g.drawLine(x + 9, y + 6, x + 14, y + 6);
g.drawLine(x + 15, y + 6, x + 15, y + 10);
g.drawLine(x + 13, y + 12, x + 16, y + 12);
g.drawLine(x + 3, y + 9, x + 3, y + 16);
g.drawLine(x + 3, y + 17, x + 12, y + 17);
g.drawLine(x + 5, y + 11, x + 10, y + 11);
g.drawLine(x + 11, y + 11, x + 11, y + 15);
}
else {
g.drawLine(x + 4, y + 6, x + 4, y + 15);
g.drawLine(x + 4, y + 16, x + 15, y + 16);
g.drawLine(x + 6, y + 8, x + 13, y + 8);
g.drawLine(x + 14, y + 8, x + 14, y + 14);
}
break;
case MINIMIZE:
g.drawLine(x + 4, y + 13, x + 4, y + 16);
g.drawLine(x + 5, y + 16, x + 11, y + 16);
break;
}
if(type == CLOSE) {
col = Theme.frameSymbolCloseDarkColor[Theme.style].getColor();
}
else {
col = Theme.frameSymbolDarkColor[Theme.style].getColor();
}
if(!frameSelected) {
col = ColorRoutines.getAverage(col, c);
}
g.setColor(col);
switch(type) {
case CLOSE:
g.drawLine(x + 5, y + 4, x + 6, y + 4);
g.drawLine(x + 14, y + 4, x + 15, y + 4);
g.drawLine(x + 7, y + 5, x + 7, y + 5);
g.drawLine(x + 13, y + 5, x + 13, y + 5);
g.drawLine(x + 8, y + 6, x + 8, y + 6);
g.drawLine(x + 12, y + 6, x + 12, y + 6);
g.drawLine(x + 9, y + 7, x + 9, y + 7);
g.drawLine(x + 11, y + 7, x + 11, y + 7);
g.drawLine(x + 10, y + 8, x + 10, y + 8);
g.drawLine(x + 8, y + 10, x + 8, y + 10);
g.drawLine(x + 12, y + 10, x + 12, y + 10);
g.drawLine(x + 7, y + 11, x + 7, y + 11);
g.drawLine(x + 13, y + 11, x + 13, y + 11);
g.drawLine(x + 6, y + 12, x + 6, y + 12);
g.drawLine(x + 14, y + 12, x + 14, y + 12);
g.drawLine(x + 5, y + 13, x + 5, y + 13);
g.drawLine(x + 15, y + 13, x + 15, y + 13);
g.drawLine(x + 4, y + 14, x + 4, y + 14);
g.drawLine(x + 16, y + 14, x + 16, y + 14);
break;
case MAXIMIZE:
if(frameMaximized) {
g.drawLine(x + 8, y + 3, x + 15, y + 3);
g.drawLine(x + 16, y + 3, x + 16, y + 11);
g.drawLine(x + 13, y + 11, x + 15, y + 11);
g.drawLine(x + 8, y + 6, x + 8, y + 7);
g.drawLine(x + 4, y + 8, x + 11, y + 8);
g.drawLine(x + 12, y + 8, x + 12, y + 16);
g.drawLine(x + 4, y + 16, x + 11, y + 16);
g.drawLine(x + 4, y + 11, x + 4, y + 15);
}
else {
g.drawLine(x + 5, y + 5, x + 14, y + 5);
g.drawLine(x + 15, y + 5, x + 15, y + 15);
g.drawLine(x + 5, y + 15, x + 14, y + 15);
g.drawLine(x + 5, y + 8, x + 5, y + 14);
}
break;
case MINIMIZE:
g.drawLine(x + 5, y + 13, x + 10, y + 13);
g.drawLine(x + 11, y + 13, x + 11, y + 15);
break;
}
}
/**
* Creates a new Window Button UI for the specified type
* @param type one of MINIMIZE, MAXIMIZE, CLOSE
* @return TinyWindowButtonUI
*/
public static TinyWindowButtonUI createButtonUIForType(int type) {
return new TinyWindowButtonUI(type);
}
/**
* @see javax.swing.plaf.basic.BasicButtonUI#getPreferredSize(javax.swing.JComponent)
*/
public Dimension getPreferredSize(JComponent c) {
if(((AbstractButton)c).getClientProperty("externalFrameButton") == Boolean.TRUE) {
return Theme.frameExternalButtonSize[Theme.derivedStyle[Theme.style]];
}
else {
if(c.getParent() instanceof TinyInternalFrameTitlePane) {
if(((TinyInternalFrameTitlePane)c.getParent()).isPalette()) {
return Theme.framePaletteButtonSize[Theme.derivedStyle[Theme.style]];
}
}
return Theme.frameInternalButtonSize[Theme.derivedStyle[Theme.style]];
}
}
}