Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright (c) 2005-2010 Flamingo Kirill Grouchnikov. 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 Flamingo Kirill Grouchnikov 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 org.pushingpixels.flamingo.internal.utils;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;
public class ButtonSizingUtils {
private static ButtonSizingUtils instance;
private Insets outsets;
private Insets toggleOutsets;
public static synchronized ButtonSizingUtils getInstance() {
if (instance == null)
instance = new ButtonSizingUtils();
return instance;
}
private ButtonSizingUtils() {
this.outsets = this.syncOutsets(new JButton(""));
this.toggleOutsets = this.syncOutsets(new JToggleButton(""));
UIManager.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if ("lookAndFeel".equals(evt.getPropertyName())) {
outsets = syncOutsets(new JButton(""));
toggleOutsets = syncOutsets(new JToggleButton(""));
}
}
});
}
private Insets syncOutsets(AbstractButton renderer) {
JPanel panel = new JPanel(null);
renderer.putClientProperty("JButton.buttonStyle", "square");
renderer.setFocusable(false);
renderer.setOpaque(false);
panel.add(renderer);
renderer.setBounds(0, 0, 100, 50);
GraphicsEnvironment e = GraphicsEnvironment
.getLocalGraphicsEnvironment();
GraphicsDevice d = e.getDefaultScreenDevice();
GraphicsConfiguration c = d.getDefaultConfiguration();
BufferedImage compatibleImage = c.createCompatibleImage(100, 50,
Transparency.TRANSLUCENT);
renderer.paint(compatibleImage.getGraphics());
// analyze top
int top = 0;
for (int i = 0; i < 25; i++) {
int rgba = compatibleImage.getRGB(50, i);
int alpha = (rgba >>> 24) & 0xFF;
if (alpha == 255) {
top = i;
break;
}
}
// analyze bottom
int bottom = 0;
for (int i = 49; i > 25; i--) {
int rgba = compatibleImage.getRGB(50, i);
int alpha = (rgba >>> 24) & 0xFF;
if (alpha == 255) {
bottom = 49 - i;
break;
}
}
// analyze left
int left = 0;
for (int i = 0; i < 50; i++) {
int rgba = compatibleImage.getRGB(i, 25);
int alpha = (rgba >>> 24) & 0xFF;
if (alpha == 255) {
left = i;
break;
}
}
// analyze right
int right = 0;
for (int i = 99; i > 50; i--) {
int rgba = compatibleImage.getRGB(i, 25);
int alpha = (rgba >>> 24) & 0xFF;
if (alpha == 255) {
right = 99 - i;
break;
}
}
return new Insets(top, left, bottom, right);
}
public Insets getOutsets() {
return new Insets(outsets.top, outsets.left, outsets.bottom,
outsets.right);
}
public Insets getToggleOutsets() {
return new Insets(toggleOutsets.top, toggleOutsets.left,
toggleOutsets.bottom, toggleOutsets.right);
}
}