From abc8eaa5f05ae75dc505807d4d66d2288a0930f0 Mon Sep 17 00:00:00 2001 From: ray Date: Sun, 17 Jul 2005 09:58:59 +0000 Subject: [PATCH] ScaledIcon. git-svn-id: https://samskivert.googlecode.com/svn/trunk@1676 6335cc39-0255-0410-8fd6-9bcaacd3b74c --- .../java/com/samskivert/swing/ScaledIcon.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 projects/samskivert/src/java/com/samskivert/swing/ScaledIcon.java diff --git a/projects/samskivert/src/java/com/samskivert/swing/ScaledIcon.java b/projects/samskivert/src/java/com/samskivert/swing/ScaledIcon.java new file mode 100644 index 00000000..847e4f63 --- /dev/null +++ b/projects/samskivert/src/java/com/samskivert/swing/ScaledIcon.java @@ -0,0 +1,79 @@ +// +// $Id: ScaledIcon.java,v 1.1 2004/04/23 16:46:37 ray Exp $ + +package com.samskivert.swing; + +import java.awt.Component; +import java.awt.Composite; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; + +import javax.swing.Icon; + +/** + * Draws an icon with a specified scale. + */ +public class ScaledIcon implements Icon +{ + /** + * Construct an icon that is drawn at 10% normal. + */ + public ScaledIcon (Icon icon) + { + this(icon, .1f); + } + + /** + * Construct a scaled icon that is drawn at the specified scale. + */ + public ScaledIcon (Icon icon, float scale) + { + _icon = icon; + _scale = scale; + } + + /** + * Construct a scaled icon restricted to its larger dimension. + */ + public ScaledIcon (Icon icon, int maxWidth, int maxHeight) + { + this(icon, Math.min(maxWidth / (float) icon.getIconWidth(), + maxHeight / (float) icon.getIconHeight())); + } + + // documentation inherited from interface Icon + public int getIconWidth () + { + return (int) Math.round(_icon.getIconWidth() * _scale); + } + + // documentation inherited from interface Icon + public int getIconHeight () + { + return (int) Math.round(_icon.getIconHeight() * _scale); + } + + // documentation inherited from interface Icon + public void paintIcon (Component c, Graphics g, int x, int y) + { + Graphics2D gfx = (Graphics2D) g; + AffineTransform otrans = gfx.getTransform(); + RenderingHints ohints = gfx.getRenderingHints(); + + gfx.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + gfx.scale(_scale, _scale); + _icon.paintIcon(c, g, x, y); + + gfx.setTransform(otrans); + gfx.setRenderingHints(ohints); + } + + /** The icon we're actually drawing. */ + protected Icon _icon; + + /** Our scale factor. */ + protected float _scale; +}