package org.limewire.ui.swing.painter.factories; import java.awt.Color; import org.jdesktop.application.Resource; import org.limewire.ui.swing.painter.ButtonBackgroundPainter; import org.limewire.ui.swing.painter.ButtonForegroundPainter; import org.limewire.ui.swing.painter.DarkButtonBackgroundPainter; import org.limewire.ui.swing.painter.FlatButtonBackgroundPainter; import org.limewire.ui.swing.painter.GreenButtonBackgroundPainter; import org.limewire.ui.swing.painter.LightButtonBackgroundPainter; import org.limewire.ui.swing.painter.PopupButtonBackgroundPainter; import org.limewire.ui.swing.painter.BorderPainter.AccentType; import org.limewire.ui.swing.painter.ButtonBackgroundPainter.DrawMode; import org.limewire.ui.swing.painter.ButtonForegroundPainter.FontTransform; import org.limewire.ui.swing.util.GuiUtils; import com.google.inject.Inject; /** * Creates LW skinned foreground and background painters for JXButtons. * Foreground painters manage the painting of the button text and icon, * background painters draw the actual button, any borders, and * shadowing/accents. */ public class ButtonPainterFactory { @Resource private Color miniHoverTextForeground; @Resource private Color miniDownTextForeground; @Resource private Color darkFullHoverTextForeground; @Resource private Color darkFullDownTextForeground; @Resource private Color darkFullDisabledTextForeground; @Resource private int miniArcWidth; @Resource private int miniArcHeight; @Resource private Color miniBackgroundPressed; @Resource private Color miniBackgroundRollover; @Resource private int linkArcWidth; @Resource private int linkArcHeight; @Resource private Color linkBackgroundPressed; @Resource private Color linkBackgroundRollover; @Resource private Color linkDownTextForeground; @Inject ButtonPainterFactory() { GuiUtils.assignResources(this); } /** * Creates the foreground painter for pop up button style used * in mini combo boxes. */ public ButtonForegroundPainter createMiniButtonForegroundPainter() { return new ButtonForegroundPainter(miniHoverTextForeground, miniDownTextForeground, Color.GRAY); } /** * Creates the foreground painter for pop up button style used * in the link like combo boxes. */ public ButtonForegroundPainter createLinkButtonForegroundPainter() { return new ButtonForegroundPainter(null, linkDownTextForeground, null, FontTransform.NO_CHANGE, FontTransform.REMOVE_UNDERLINE, FontTransform.NO_CHANGE); } /** * Creates light styled foreground painter. */ public ButtonForegroundPainter createLightFullButtonForegroundPainter() { return new ButtonForegroundPainter(); } /** * Creates the painter used to draw the text and icon on the dark styled button * across different states. */ public ButtonForegroundPainter createDarkFullButtonForegroundPainter() { return new ButtonForegroundPainter(darkFullHoverTextForeground, darkFullDownTextForeground, darkFullDisabledTextForeground); } /** * Creates the default background painter for the buttons used for mini combo * boxes. At this time these buttons have no background painted until a * mouse over event. When the mouse is over they pop out to indicate an * action can be made. */ public PopupButtonBackgroundPainter createMiniButtonBackgroundPainter() { return new PopupButtonBackgroundPainter(miniBackgroundPressed, miniBackgroundRollover, miniArcWidth, miniArcHeight); } /** * Creates the default background painter for the buttons used for link * like combo boxes. At this time these buttons have no background painted until a * mouse over event. When the mouse is over they pop out to indicate an * action can be made. */ public PopupButtonBackgroundPainter createLinkButtonBackgroundPainter() { return new PopupButtonBackgroundPainter(linkBackgroundPressed, linkBackgroundRollover, linkArcWidth, linkArcHeight); } /** * Creates a background painter for buttons with the lighter colour scheme. * These are usually placed on components with generally lighter colouring * that the dark buttons. */ public ButtonBackgroundPainter createLightFullButtonBackgroundPainter() { return new LightButtonBackgroundPainter(); } /** * Creates a background painter for buttons with the green colour scheme. * These are usually placed on components with generally lighter colouring * that the dark buttons. */ public ButtonBackgroundPainter createGreenFullButtonBackgroundPainter() { return new GreenButtonBackgroundPainter(); } /** * Creates a background painter for the buttons with darker colour schemes, however * allows overriding of the default draw mode (left rounded, fully rounded, etc.) * and accent type (shadow, bubble, etc.). Buttons with the dark scheme are usually * used on the dark header bars where a certain accent type looks good. This factory * method is used for creating buttons to be used in other locations. */ public ButtonBackgroundPainter createDarkFullButtonBackgroundPainter(DrawMode mode, AccentType accent) { return new DarkButtonBackgroundPainter(mode, accent); } /** * Creates a background painter for buttons that only need a rounded border and no * mouseover or click effects. */ public FlatButtonBackgroundPainter createFlatButtonBackgroundPainter() { return new FlatButtonBackgroundPainter(); } }