All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jgoodies.looks.plastic.PlasticIconFactory Maven / Gradle / Ivy

Go to download

The JGoodies Looks make your Swing applications and applets look better. They have been optimized for readability, precise micro-design and usability. And they simplify the multi-platform support by using similar widget dimensions. In addition, many people have reviewed them as elegant.

The newest version!
/*
 * Copyright (c) 2001-2014 JGoodies Software GmbH. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  o Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 *  o Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 *  o Neither the name of JGoodies Software GmbH nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package com.jgoodies.looks.plastic;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.io.Serializable;

import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.metal.MetalLookAndFeel;

/**
 * Factory class that vends {@code Icon}s for the
 * JGoodies Plastic look and feel.
 * These icons are used extensively in Plastic via the defaults mechanism.
 * While other look and feels often use GIFs for icons, creating icons
 * in code facilitates switching to other themes.
 * 

* Each method in this class returns either an {@code Icon} or {@code null}, * where {@code null} implies that there is no default icon. * * @author Karsten Lentzsch * @version $Revision: 1.11 $ */ final class PlasticIconFactory { private PlasticIconFactory() { // Overrides default constructor; prevents instantiation. } // Helper method utilized by the CheckBoxIcon and the CheckBoxMenuItemIcon. private static void drawCheck(Graphics g, int x, int y) { g.translate(x, y); g.drawLine(3, 5, 3, 5); g.fillRect(3, 6, 2, 2); g.drawLine(4, 8, 9, 3); g.drawLine(5, 8, 9, 4); g.drawLine(5, 9, 9, 5); g.translate(-x, -y); } private static class CheckBoxIcon implements Icon, UIResource, Serializable { private static final int SIZE = 13; @Override public int getIconWidth() { return SIZE; } @Override public int getIconHeight() { return SIZE; } @Override public void paintIcon(Component c, Graphics g, int x, int y) { JCheckBox cb = (JCheckBox) c; ButtonModel model = cb.getModel(); if (model.isEnabled()) { if (cb.isBorderPaintedFlat()) { g.setColor(PlasticLookAndFeel.getControlDarkShadow()); g.drawRect(x, y, SIZE - 2, SIZE - 2); // inside box g.setColor(PlasticLookAndFeel.getControlHighlight()); g.fillRect(x+1, y+1, SIZE-3, SIZE-3); } else if (model.isPressed() && model.isArmed()) { g.setColor(MetalLookAndFeel.getControlShadow()); g.fillRect(x, y, SIZE - 1, SIZE - 1); PlasticUtils.drawPressed3DBorder(g, x, y, SIZE, SIZE); } else { PlasticUtils.drawFlush3DBorder(g, x, y, SIZE, SIZE); } g.setColor(MetalLookAndFeel.getControlInfo()); } else { g.setColor(MetalLookAndFeel.getControlShadow()); g.drawRect(x, y, SIZE - 2, SIZE - 2); } if (model.isSelected()) { drawCheck(g, x, y); } } } private static class CheckBoxMenuItemIcon implements Icon, UIResource, Serializable { private static final int SIZE = 13; @Override public int getIconWidth() { return SIZE; } @Override public int getIconHeight() { return SIZE; } @Override public void paintIcon(Component c, Graphics g, int x, int y) { JMenuItem b = (JMenuItem) c; if (b.isSelected()) { drawCheck(g, x, y + 1); } } } private static class RadioButtonMenuItemIcon implements Icon, UIResource, Serializable { private static final int SIZE = 13; @Override public int getIconWidth() { return SIZE; } @Override public int getIconHeight() { return SIZE; } @Override public void paintIcon(Component c, Graphics g, int x, int y) { JMenuItem b = (JMenuItem) c; if (b.isSelected()) { drawDot(g, x, y); } } private static void drawDot(Graphics g, int x, int y) { g.translate(x, y); g.drawLine(5, 4, 8, 4); g.fillRect(4, 5, 6, 4); g.drawLine(5, 9, 8, 9); g.translate(-x, -y); } } private static class MenuArrowIcon implements Icon, UIResource, Serializable { private static final int WIDTH = 4; private static final int HEIGHT = 8; @Override public void paintIcon( Component c, Graphics g, int x, int y ) { JMenuItem b = (JMenuItem) c; g.translate( x, y ); if (PlasticUtils.isLeftToRight(b) ) { g.drawLine( 0, 0, 0, 7 ); g.drawLine( 1, 1, 1, 6 ); g.drawLine( 2, 2, 2, 5 ); g.drawLine( 3, 3, 3, 4 ); } else { g.drawLine( 4, 0, 4, 7 ); g.drawLine( 3, 1, 3, 6 ); g.drawLine( 2, 2, 2, 5 ); g.drawLine( 1, 3, 1, 4 ); } g.translate( -x, -y ); } @Override public int getIconWidth() { return WIDTH; } @Override public int getIconHeight() { return HEIGHT; } } /** * Paints a minus sign button icon used in trees. * Uses a white background, gray border, and black foreground. */ private static class ExpandedTreeIcon implements Icon, Serializable { protected static final int SIZE = 9; protected static final int HALF_SIZE = 4; @Override public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(Color.WHITE); g.fillRect(x, y, SIZE - 1, SIZE - 1); g.setColor(Color.GRAY); g.drawRect(x, y, SIZE - 1, SIZE - 1); g.setColor(Color.BLACK); g.drawLine(x + 2, y + HALF_SIZE, x + SIZE - 3, y + HALF_SIZE); } @Override public int getIconWidth() { return SIZE; } @Override public int getIconHeight() { return SIZE; } } /** * The plus sign button icon used in trees. */ private static class CollapsedTreeIcon extends ExpandedTreeIcon { @Override public void paintIcon(Component c, Graphics g, int x, int y) { super.paintIcon(c, g, x, y); g.drawLine(x + HALF_SIZE, y + 2, x + HALF_SIZE, y + SIZE - 3); } } /** * The arrow button used in comboboxes. */ private static class ComboBoxButtonIcon implements Icon, Serializable { @Override public void paintIcon(Component c, Graphics g, int x, int y) { JComponent component = (JComponent) c; int iconWidth = getIconWidth(); g.translate(x, y); g.setColor( component.isEnabled() ? MetalLookAndFeel.getControlInfo() : MetalLookAndFeel.getControlShadow() ); g.drawLine( 0, 0, iconWidth - 1, 0 ); g.drawLine( 1, 1, 1 + iconWidth - 3, 1 ); g.drawLine( 2, 2, 2 + iconWidth - 5, 2 ); g.drawLine( 3, 3, 3 + iconWidth - 7, 3 ); /* int startY = (((h + 1) - arrowHeight) / 2) + arrowHeight - 1; int startX = (w / 2); // System.out.println( "startX2 :" + startX + " startY2 :"+startY); for (int line = 0; line < arrowHeight; line++) { g.drawLine( startX - line, startY - line, startX + line + 1, startY - line); }*/ g.translate( -x, -y ); } @Override public int getIconWidth() { return 8; } @Override public int getIconHeight() { return 4; } } // Cached Access to Icons *********************************************************** private static Icon checkBoxIcon; private static Icon checkBoxMenuItemIcon; private static Icon radioButtonMenuItemIcon; private static Icon menuArrowIcon; private static Icon expandedTreeIcon; private static Icon collapsedTreeIcon; private static Icon comboBoxButtonIcon; /** * Answers an {@code Icon} used for {@code JCheckBox}es. */ static Icon getCheckBoxIcon() { if (checkBoxIcon == null) { checkBoxIcon = new CheckBoxIcon(); } return checkBoxIcon; } /** * Answers an {@code Icon} used for {@code JCheckButtonMenuItem}s. */ static Icon getCheckBoxMenuItemIcon() { if (checkBoxMenuItemIcon == null) { checkBoxMenuItemIcon = new CheckBoxMenuItemIcon(); } return checkBoxMenuItemIcon; } /** * Answers an {@code Icon} used for {@code JRadioButtonMenuItem}s. */ static Icon getRadioButtonMenuItemIcon() { if (radioButtonMenuItemIcon == null) { radioButtonMenuItemIcon = new RadioButtonMenuItemIcon(); } return radioButtonMenuItemIcon; } /** * Answers an {@code Icon} used for arrows in {@code JMenu}s. */ static Icon getMenuArrowIcon() { if (menuArrowIcon == null) { menuArrowIcon = new MenuArrowIcon(); } return menuArrowIcon; } /** * Answers an {@code Icon} used in {@code JTree}s. */ static Icon getExpandedTreeIcon() { if (expandedTreeIcon == null) { expandedTreeIcon = new ExpandedTreeIcon(); } return expandedTreeIcon; } /** * Answers an {@code Icon} used in {@code JTree}s. */ static Icon getCollapsedTreeIcon() { if (collapsedTreeIcon == null) { collapsedTreeIcon = new CollapsedTreeIcon(); } return collapsedTreeIcon; } /** * Answers an {@code Icon} used in {@code JComboBox}es. */ static Icon getComboBoxButtonIcon() { if (comboBoxButtonIcon == null) { comboBoxButtonIcon = new ComboBoxButtonIcon(); } return comboBoxButtonIcon; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy