Package org.gradle.gradleplugin.userinterface.swing.common

Source Code of org.gradle.gradleplugin.userinterface.swing.common.BorderlessImageButton$HighlightMouseListener

/*
* Copyright 2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gradle.gradleplugin.userinterface.swing.common;

import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.KeyStroke;
import javax.swing.plaf.metal.MetalButtonUI;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;

/**
* This is button that has no border and only an image. It highlights when the user moves over it. This style was
* modeled after Idea. This was used because the borders on toolbars can get a little busy and this looks a little
* cleaner.
*
* @author mhunsicker
*/
public class BorderlessImageButton extends JButton {
    private Color oldBackgroundColor;

    public BorderlessImageButton(Action action, Icon icon) {
        super(action);
        setUI();

        // If icon exist use icon otherwise let button use text ( if available ?).
        if (action.getValue(Action.SMALL_ICON) != null) {
            setText(null);
        }

        String name = (String) action.getValue(action.NAME);
        InputMap inputMap = this.getInputMap(this.WHEN_IN_FOCUSED_WINDOW);
        KeyStroke keyStroke = (KeyStroke) action.getValue(action.ACCELERATOR_KEY);
        inputMap.put(keyStroke, name);

        init(icon);
    }

    private void setUI() {
        // This fixes an issue where the WindowsButtonUI wants to draw a border
        // around a button that isn't in a toolbar.  This occurs even if you set
        // an empty border because it ignores your border and draws its own.
        setUI(MetalButtonUI.createUI(this));
    }

    private void init(Icon icon) {
        setBorder(BorderlessUtility.DEFAULT_BORDER);
        addMouseListener(new HighlightMouseListener());

        setText(null);

        if (icon != null) {
            setIcon(icon);

            int height = icon.getIconHeight();
            int width = icon.getIconWidth();
            Dimension preferredSize = new Dimension(width + 2, height + 2); //plus 2 for the border

            setMinimumSize(preferredSize);
            setMaximumSize(preferredSize);
            setPreferredSize(preferredSize);
            setFocusPainted(false);
        }
    }

    private class HighlightMouseListener extends MouseAdapter {
        private HighlightMouseListener() {
        }

        public void mouseEntered(MouseEvent event) {
            if (getAction() != null ? getAction().isEnabled() : isEnabled()) {
                oldBackgroundColor = BorderlessImageButton.this.getBackground();
                BorderlessImageButton.this.setBackground(BorderlessUtility.ON_MOUSE_OVER_BACKGROUND);
                BorderlessImageButton.this.setBorder(BorderlessUtility.ON_MOUSEOVER_BORDER);
            }
        }

        public void mousePressed(MouseEvent event) {
            if (getAction() != null ? getAction().isEnabled() : isEnabled()) {
                BorderlessImageButton.this.setBackground(BorderlessUtility.ON_BUTTON_PRESSED_BACKGROUND);
            }
        }

        public void mouseReleased(MouseEvent event) {
            if (getAction() != null ? getAction().isEnabled() : isEnabled()) {
                // do a hit test to make sure the mouse is being released inside the button
                Rectangle2D buttonRect = BorderlessImageButton.this.getBounds();
                if (buttonRect.contains(event.getPoint())) {
                    BorderlessImageButton.this.setBackground(BorderlessUtility.ON_MOUSE_OVER_BACKGROUND);
                }
            }
        }

        public void mouseExited(MouseEvent event) {
            BorderlessImageButton.this.setBackground(oldBackgroundColor);
            BorderlessImageButton.this.setBorder(BorderlessUtility.DEFAULT_BORDER);
        }
    }
}
TOP

Related Classes of org.gradle.gradleplugin.userinterface.swing.common.BorderlessImageButton$HighlightMouseListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.