package com.explodingpixels.macwidgets;
import java.awt.Color;
import java.awt.Component;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import com.explodingpixels.painter.MacWidgetsPainter;
import com.explodingpixels.widgets.WindowUtils;
public class MacPainterFactory {
// iApp Header painters. //////////////////////////////////////////////////////////////////////
public static MacWidgetsPainter<Component> createIAppUnpressedUnselectedHeaderPainter() {
return new MacWidgetsPainter<Component>() {
private Color TOP_GRADIENT_COLOR = new Color(0xdbdbdb);
private Color BOTTOM_GRADIENT_COLOR = new Color(0xbbbbbb);
public void paint(Graphics2D graphics2D, Component component,
int width, int height) {
paintLeopardGradientSelection(
TOP_GRADIENT_COLOR, BOTTOM_GRADIENT_COLOR,
TOP_GRADIENT_COLOR, BOTTOM_GRADIENT_COLOR,
graphics2D, width, height);
}
};
}
public static MacWidgetsPainter<Component> createIAppPressedUnselectedHeaderPainter() {
return new MacWidgetsPainter<Component>() {
private Color TOP_GRADIENT_COLOR = new Color(0xc4c4c4);
private Color BOTTOM_GRADIENT_COLOR = new Color(0x959595);
public void paint(Graphics2D graphics2D, Component component,
int width, int height) {
paintLeopardGradientSelection(
TOP_GRADIENT_COLOR, BOTTOM_GRADIENT_COLOR,
TOP_GRADIENT_COLOR, BOTTOM_GRADIENT_COLOR,
graphics2D, width, height);
}
};
}
public static MacWidgetsPainter<Component> createIAppUnpressedSelectedHeaderPainter() {
return new MacWidgetsPainter<Component>() {
private Color TOP_GRADIENT_COLOR = new Color(0xc2cfdd);
private Color BOTTOM_GRADIENT_COLOR = new Color(0x7d93b2);
public void paint(Graphics2D graphics2D, Component component,
int width, int height) {
paintLeopardGradientSelection(
TOP_GRADIENT_COLOR, MacColorUtils.LEOPARD_BORDER_COLOR,
TOP_GRADIENT_COLOR, BOTTOM_GRADIENT_COLOR,
graphics2D, width, height);
}
};
}
public static MacWidgetsPainter<Component> createIAppPressedSelectedHeaderPainter() {
return new MacWidgetsPainter<Component>() {
private Color TOP_GRADIENT_COLOR = new Color(0xa6b7cb);
private Color BOTTOM_GRADIENT_COLOR = new Color(0x536b90);
public void paint(Graphics2D graphics2D, Component component,
int width, int height) {
paintLeopardGradientSelection(
TOP_GRADIENT_COLOR, MacColorUtils.LEOPARD_BORDER_COLOR,
TOP_GRADIENT_COLOR, BOTTOM_GRADIENT_COLOR,
graphics2D, width, height);
}
};
}
// Selection painters. ////////////////////////////////////////////////////////////////////////
/**
* Paints a graident with a single pixel border at the top of the component
* and a single pixel border at the bottom.
*
* @param topLineColor the color of the top line border.
* @param bottomLineColor the color of the bottom line border.
* @param topGradientColor the top color to use in creating the gradient
* paint.
* @param bottomGradientColor the bottom color to use in creating the
* gradient paint.
* @param graphics2D the {@link java.awt.Graphics2D} to render into. This graphics
* context need not be restore state upon completion.
* @param width the width of the component to render into.
* @param height the height of the component to render into.
*/
private static void paintLeopardGradientSelection(
Color topLineColor,
Color bottomLineColor,
Color topGradientColor,
Color bottomGradientColor,
Graphics2D graphics2D,
int width, int height) {
// create the paint - start the gradient one pixel from the top
// of the component and finish the gradient one pixel from the
// bottom.
GradientPaint paint = new GradientPaint(
0, 1, topGradientColor,
0, height - 2, bottomGradientColor);
// install the paint and fill a rectangle with it.
graphics2D.setPaint(paint);
graphics2D.fillRect(0, 0, width, height);
// set the graphics color and draw a line across the top of the
// component.
graphics2D.setColor(topLineColor);
graphics2D.drawLine(0, 0, width, 0);
// set the graphics color and draw a line across the bottom of the
// component.
graphics2D.setColor(bottomLineColor);
graphics2D.drawLine(0, height - 1, width, height - 1);
}
/**
* Creates a {@link com.explodingpixels.painter.MacWidgetsPainter} that paints a Mac unified tool bar gradient.
*
* @return a {@code Painter} that paints a Mac unified tool bar gradient.
*/
public static MacWidgetsPainter<Component> createTexturedWindowWorkaroundPainter() {
return new MacWidgetsPainter<Component>() {
private Color ACTIVE_TOP_GRADIENT_COLOR = new Color(0xbcbcbc);
private Color ACTIVE_BOTTOM_GRADIENT_COLOR = new Color(0x9a9a9a);
private Color INACTIVE_TOP_GRADIENT_COLOR = new Color(0xe4e4e4);
private Color INACTIVE_BOTTOM_GRADIENT_COLOR = new Color(0xd1d1d1);
public void paint(Graphics2D graphics2D, Component component, int width, int height) {
boolean containedInActiveWindow = WindowUtils.isParentWindowFocused(component);
Color topColor = containedInActiveWindow
? ACTIVE_TOP_GRADIENT_COLOR : INACTIVE_TOP_GRADIENT_COLOR;
Color bottomColor = containedInActiveWindow
? ACTIVE_BOTTOM_GRADIENT_COLOR : INACTIVE_BOTTOM_GRADIENT_COLOR;
GradientPaint paint = new GradientPaint(0, 1, topColor, 0, height, bottomColor);
graphics2D.setPaint(paint);
graphics2D.fillRect(0, 0, width, height);
}
};
}
}