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
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]]; |
|
} |
|
} |
|
}
|
|
|