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

net.sf.fmj.ejmf.toolkit.gui.controls.skins.ejmf.BasicArrowButton Maven / Gradle / Ivy

There is a newer version: 1.0.2-jitsi
Show newest version
/*
 * @(#)BasicArrowButton.java	1.8 97/11/11
 *
 * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
 *
 * This software is the confidential and proprietary information of Sun
 * Microsystems, Inc. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Sun.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
 * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
 * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
 * THIS SOFTWARE OR ITS DERIVATIVES.
 *
 */
package net.sf.fmj.ejmf.toolkit.gui.controls.skins.ejmf;

import java.awt.*;

import javax.swing.*;

/**
 * JButton object that draws a scaled Arrow in one of the cardinal directions.
 *
 * @version 1.8 11/11/97
 * @author David Kloba
 */
public class BasicArrowButton extends BasicControlButton
{
    protected int direction;

    public BasicArrowButton(int direction)
    {
        setDirection(direction);
        setBackground(UIManager.getColor("control"));
    }

    public int getDirection()
    {
        return direction;
    }

    @Override
    public Dimension getMaximumSize()
    {
        return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
    }

    @Override
    public Dimension getMinimumSize()
    {
        return new Dimension(5, 5);
    }

    @Override
    public Dimension getPreferredSize()
    {
        return new Dimension(16, 16);
    }

    @Override
    public boolean isFocusTraversable()
    {
        return false;
    }

    @Override
    public void paint(Graphics g)
    {
        Color origColor;
        boolean isPressed, isEnabled;
        int w, h, size;

        w = getSize().width;
        h = getSize().height;
        origColor = g.getColor();
        isPressed = getModel().isPressed();
        isEnabled = isEnabled();

        g.setColor(getBackground());
        g.fillRect(1, 1, w - 2, h - 2);

        // / Draw the proper Border
        if (isPressed)
        {
            g.setColor(UIManager.getColor("controlShadow"));
            g.drawRect(0, 0, w - 1, h - 1);
        } else
        {
            // Using the background color set above
            g.drawLine(0, 0, 0, h - 1);
            g.drawLine(1, 0, w - 2, 0);

            g.setColor(UIManager.getColor("controlHighlight")); // inner 3D
                                                                // border
            g.drawLine(1, 1, 1, h - 3);
            g.drawLine(2, 1, w - 3, 1);

            g.setColor(UIManager.getColor("controlShadow")); // inner 3D border
            g.drawLine(1, h - 2, w - 2, h - 2);
            g.drawLine(w - 2, 1, w - 2, h - 3);

            g.setColor(UIManager.getColor("controlDkShadow")); // black drop
                                                               // shadow __|
            g.drawLine(0, h - 1, w - 1, h - 1);
            g.drawLine(w - 1, h - 1, w - 1, 0);
        }

        // If there's no room to draw arrow, bail
        if (h < 5 || w < 5)
        {
            g.setColor(origColor);
            return;
        }

        if (isPressed)
        {
            g.translate(1, 1);
        }

        // Draw the arrow
        size = Math.min((h - 4) / 3, (w - 4) / 3);
        size = Math.max(size, 2);
        paintTriangle(g, (w - size) / 2, (h - size) / 2, size, direction,
                isEnabled);

        // Reset the Graphics back to it's original settings
        if (isPressed)
        {
            g.translate(-1, -1);
        }
        g.setColor(origColor);

    }

    @Override
    protected void paintIcon(Graphics g, int x, int y, int size,
            boolean isEnabled)
    {
        // paint is over-ridden from BasicControlButton
        // so paintIcon is no-op.
    }

    public void paintTriangle(Graphics g, int x, int y, int size,
            int direction, boolean isEnabled)
    {
        Color oldColor = g.getColor();
        int mid, i, j;

        j = 0;
        size = Math.max(size, 2);
        mid = size / 2;

        g.translate(x, y);
        if (isEnabled)
            g.setColor(UIManager.getColor("controlDkShadow"));
        else
            g.setColor(UIManager.getColor("controlShadow"));

        switch (direction)
        {
        case NORTH:
            for (i = 0; i < size; i++)
            {
                g.drawLine(mid - i, i, mid + i, i);
            }
            if (!isEnabled)
            {
                g.setColor(UIManager.getColor("controlHighlight"));
                g.drawLine(mid - i + 2, i, mid + i, i);
            }
            break;
        case SOUTH:
            if (!isEnabled)
            {
                g.translate(1, 1);
                g.setColor(UIManager.getColor("controlHighlight"));
                for (i = size - 1; i >= 0; i--)
                {
                    g.drawLine(mid - i, j, mid + i, j);
                    j++;
                }
                g.translate(-1, -1);
                g.setColor(UIManager.getColor("controlShadow"));
            }

            j = 0;
            for (i = size - 1; i >= 0; i--)
            {
                g.drawLine(mid - i, j, mid + i, j);
                j++;
            }
            break;
        case WEST:
            for (i = 0; i < size; i++)
            {
                g.drawLine(i, mid - i, i, mid + i);
            }
            if (!isEnabled)
            {
                g.setColor(UIManager.getColor("controlHighlight"));
                g.drawLine(i, mid - i + 2, i, mid + i);
            }
            break;
        case EAST:
            if (!isEnabled)
            {
                g.translate(1, 1);
                g.setColor(UIManager.getColor("controlHighlight"));
                for (i = size - 1; i >= 0; i--)
                {
                    g.drawLine(j, mid - i, j, mid + i);
                    j++;
                }
                g.translate(-1, -1);
                g.setColor(UIManager.getColor("controlShadow"));
            }

            j = 0;
            for (i = size - 1; i >= 0; i--)
            {
                g.drawLine(j, mid - i, j, mid + i);
                j++;
            }
            break;
        }
        g.translate(-x, -y);
        g.setColor(oldColor);
    }

    public void setDirection(int dir)
    {
        direction = dir;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy