/* * @(#)QuaquaNativeImageBevelBorder.java * * Copyright (c) 2011 Werner Randelshofer, Immensee, Switzerland. * All rights reserved. * * You may not use, copy or modify this file, except in compliance with the * license agreement you entered into with Werner Randelshofer. * For details see accompanying license terms. */ package ch.randelshofer.quaqua.border; import ch.randelshofer.quaqua.osx.OSXAquaPainter; import ch.randelshofer.quaqua.osx.OSXAquaPainter.Widget; import ch.randelshofer.quaqua.util.InsetsUtil; import java.awt.Component; import java.awt.Graphics; import java.awt.Insets; import java.awt.image.BufferedImage; import javax.swing.plaf.UIResource; /** * {@code QuaquaNativeImageBevelBorder}. * <p> * Renders a native border once into an ImageBevelBorder and then uses * the ImageBevelBorder for further rendering. * * @author Werner Randelshofer * @version $Id: QuaquaNativeImageBevelBorder.java 439 2011-08-28 10:05:15Z wrandelshofer $ */ public class QuaquaNativeImageBevelBorder extends VisualMarginBorder implements UIResource { private OSXAquaPainter.Widget widget; private ImageBevelBorder imageBevelBorder; private Insets painterInsets; private Insets imageBevelInsets; private Insets borderInsets; private Insets visualMargin; private boolean fill; public QuaquaNativeImageBevelBorder(Widget widget, Insets painterInsets, Insets imageBevelInsets, Insets borderInsets, boolean fill) { this.widget = widget; this.painterInsets = painterInsets; this.imageBevelInsets = imageBevelInsets; this.borderInsets = borderInsets; this.visualMargin = new Insets(3, 3, 3, 3); this.fill=fill; } @Override public void paintBorder(Component cc, Graphics g, int x, int y, int width, int height) { if (imageBevelBorder == null) { imageBevelBorder = createImageBeveBorder(); } imageBevelBorder.paintBorder(cc, g, x, y, width, height); } protected ImageBevelBorder createImageBeveBorder() { // PREPARE THE PAINTER // ------------------- OSXAquaPainter painter = new OSXAquaPainter(); painter.setWidget(widget); // Create an ImageBevelBorder // ------------------------------------------- BufferedImage image; ImageBevelBorder ibb; int fixedWidth, fixedHeight; fixedWidth = 32; fixedHeight = 32; image = new BufferedImage(fixedWidth, fixedHeight, BufferedImage.TYPE_INT_ARGB_PRE); /* Graphics2D pg = painterImg.createGraphics(); pg.setColor(new Color(0x0, true)); pg.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC)); pg.fillRect(0, 0, painterImg.getWidth(), painterImg.getHeight()); pg.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); pg.dispose();*/ painter.paint(image,// painterInsets.left, painterInsets.top,// image.getWidth() - painterInsets.left - painterInsets.right, image.getHeight() - painterInsets.top - painterInsets.bottom); ibb = new ImageBevelBorder(image, imageBevelInsets, borderInsets, fill); return ibb; } @Override public Insets getBorderInsets(Component c, Insets insets) { Insets ins = super.getBorderInsets(c, insets); InsetsUtil.addTo(borderInsets, ins); return ins; } @Override public boolean isBorderOpaque() { return false; } public static class UIResource extends QuaquaNativeImageBevelBorder implements javax.swing.plaf.UIResource { public UIResource(Widget widget, Insets painterInsets, Insets imageBevelInsets, Insets borderInsets, boolean fill) { super(widget, painterInsets, imageBevelInsets, borderInsets, fill); } } }