Coverage Report - org.dishevelled.iconbundle.impl.IconBundleUtils
 
Classes in this File Line Coverage Branch Coverage Complexity
IconBundleUtils
92%
26/28
N/A
1.333
IconBundleUtils$1
100%
15/15
100%
6/6
1.333
 
 1  
 /*
 2  
 
 3  
     dsh-iconbundle  Bundles of variants for icon images.
 4  
     Copyright (c) 2003-2011 held jointly by the individual authors.
 5  
 
 6  
     This library is free software; you can redistribute it and/or modify it
 7  
     under the terms of the GNU Lesser General Public License as published
 8  
     by the Free Software Foundation; either version 3 of the License, or (at
 9  
     your option) any later version.
 10  
 
 11  
     This library is distributed in the hope that it will be useful, but WITHOUT
 12  
     ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
 13  
     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 14  
     License for more details.
 15  
 
 16  
     You should have received a copy of the GNU Lesser General Public License
 17  
     along with this library;  if not, write to the Free Software Foundation,
 18  
     Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA.
 19  
 
 20  
     > http://www.fsf.org/licensing/licenses/lgpl.html
 21  
     > http://www.opensource.org/licenses/lgpl-license.php
 22  
 
 23  
 */
 24  
 package org.dishevelled.iconbundle.impl;
 25  
 
 26  
 import java.awt.Color;
 27  
 import java.awt.Image;
 28  
 
 29  
 import java.awt.image.Raster;
 30  
 import java.awt.image.RasterOp;
 31  
 import java.awt.image.RescaleOp;
 32  
 import java.awt.image.BufferedImage;
 33  
 import java.awt.image.WritableRaster;
 34  
 
 35  
 /**
 36  
  * IconBundle static utility class.
 37  
  *
 38  
  * @author  Michael Heuer
 39  
  * @version $Revision: 974 $ $Date: 2011-01-04 21:40:23 -0600 (Tue, 04 Jan 2011) $
 40  
  */
 41  4508270
 public final class IconBundleUtils
 42  
 {
 43  
     /** Intensity factor for red. */
 44  
     private static final float RED_FACTOR = 0.30f;
 45  
 
 46  
     /** Intensity factor for green. */
 47  
     private static final float GREEN_FACTOR = 0.59f;
 48  
 
 49  
     /** Intensity factor for blue. */
 50  
     private static final float BLUE_FACTOR = 0.11f;
 51  
 
 52  
     /** Pixel array size. */
 53  
     private static final int PIXEL_ARRAY_SIZE = 4;
 54  
 
 55  
     /** Medium grey color component. */
 56  
     private static final int MEDIUM_GREY = 127;
 57  
 
 58  
     /** Disabled pattern factor. */
 59  
     private static final float DISABLED_PATTERN_FACTOR = 0.7f;
 60  
 
 61  
     /**
 62  
      * RescaleOp for saturating active images.
 63  
      */
 64  1
     private static final RescaleOp ACTIVE_OP = new RescaleOp(new float[] { 0.8f, 0.8f, 0.8f, 1.0f },
 65  
                                                              new float[] { 0.0f, 0.0f, 0.0f, 0.0f },
 66  
                                                              null);
 67  
     //private static final RescaleOp ACTIVE_OP = new RescaleOp(0.8f, 0.0f, null);
 68  
 
 69  
     /**
 70  
      * RescaleOp for saturating mouseover images.
 71  
      */
 72  1
     private static final RescaleOp MOUSEOVER_OP = new RescaleOp(new float[] { 1.2f, 1.2f, 1.2f, 1.0f },
 73  
                                                                 new float[] { 0.0f, 0.0f, 0.0f, 0.0f },
 74  
                                                                 null);
 75  
     //private static final RescaleOp MOUSEOVER_OP = new RescaleOp(1.2f, 0.0f, null);
 76  
 
 77  
     /**
 78  
      * RescaleOp for creating translucent dragging images.
 79  
      */
 80  1
     private static final RescaleOp DRAGGING_OP = new RescaleOp(new float[] { 1.0f, 1.0f, 1.0f, 0.2f },
 81  
                                                                new float[] { 0.0f, 0.0f, 0.0f, 0.0f },
 82  
                                                                null);
 83  
 
 84  
     /**
 85  
      * RescaleOp for desaturating disabled images.
 86  
      */
 87  1
     private static final RescaleOp DISABLED_SATURATION_OP = new RescaleOp(new float[] { 0.8f, 0.8f, 0.8f, 1.0f },
 88  
                                                                           new float[] { 0.0f, 0.0f, 0.0f, 0.0f },
 89  
                                                                          null);
 90  
     //private static final RescaleOp DISABLED_SATURATION_OP = new RescaleOp(0.8f, 0.0f, null);
 91  
 
 92  
 
 93  
     /**
 94  
      * RasterOp for creating the pattern overlay for disabled images.
 95  
      */
 96  1
     private static final RasterOp DISABLED_PATTERN_OP = new AbstractRasterOp()
 97  1
         {
 98  
 
 99  
             /** {@inheritDoc} */
 100  
             public WritableRaster filter(final Raster src, final WritableRaster dest)
 101  
             {
 102  
                 float intensity;
 103  910
                 float[] pixel = new float[PIXEL_ARRAY_SIZE];
 104  
 
 105  54860
                 for (int x = 0, w = src.getWidth(); x < w; x++)
 106  
                 {
 107  4562220
                     for (int y = 0, h = src.getHeight(); y < h; y++)
 108  
                     {
 109  4508270
                         pixel = src.getPixel(x, y, pixel);
 110  4508270
                         intensity = calculateIntensity(pixel[0], pixel[1], pixel[2]);
 111  
 
 112  4508270
                         if (((x + y) % 2) == 0)
 113  
                         {
 114  2254590
                             pixel[0] = (intensity / 2) + MEDIUM_GREY;
 115  2254590
                             pixel[1] = (intensity / 2) + MEDIUM_GREY;
 116  2254590
                             pixel[2] = (intensity / 2) + MEDIUM_GREY;
 117  
                         }
 118  
                         else
 119  
                         {
 120  2253680
                             pixel[0] *= DISABLED_PATTERN_FACTOR;
 121  2253680
                             pixel[1] *= DISABLED_PATTERN_FACTOR;
 122  2253680
                             pixel[2] *= DISABLED_PATTERN_FACTOR;
 123  
                         }
 124  4508270
                         dest.setPixel(x, y, pixel);
 125  
                     }
 126  
                 }
 127  910
                 return dest;
 128  
             }
 129  
         };
 130  
 
 131  
 
 132  
     /**
 133  
      * Private constructor.
 134  
      */
 135  
     private IconBundleUtils()
 136  0
     {
 137  
         // empty
 138  0
     }
 139  
 
 140  
 
 141  
     /**
 142  
      * Calculate a measure of intensity for the specified RGB values.
 143  
      *
 144  
      * @param r red value
 145  
      * @param g green value
 146  
      * @param b blue value
 147  
      * @return a measure of intensity for the specified RGB values
 148  
      */
 149  
     private static float calculateIntensity(final float r, final float g, final float b)
 150  
     {
 151  4508270
         return (float) (r * RED_FACTOR + g * GREEN_FACTOR + b * BLUE_FACTOR);
 152  
     }
 153  
 
 154  
     /**
 155  
      * Make the specified source image active.
 156  
      *
 157  
      * @param src source image
 158  
      * @return filtered source image
 159  
      */
 160  
     public static Image makeActive(final BufferedImage src)
 161  
     {
 162  
         /*
 163  
         BufferedImage dest;
 164  
         try
 165  
         {
 166  
             dest = new BufferedImage(src.getColorModel(),
 167  
                                                src.copyData(null),
 168  
                                                src.isAlphaPremultiplied(),
 169  
                                                null);
 170  
         }
 171  
         catch (IllegalArgumentException e)
 172  
         {
 173  
             dest = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_ARGB);
 174  
             Graphics2D graphics = dest.createGraphics();
 175  
             graphics.drawImage(src, 0, 0, null);
 176  
             graphics.dispose();
 177  
         }
 178  
         */
 179  910
         BufferedImage dest = new BufferedImage(src.getColorModel(),
 180  
                                                src.copyData(null),
 181  
                                                src.isAlphaPremultiplied(),
 182  
                                                null);
 183  910
         ACTIVE_OP.filter(src, dest);
 184  910
         return dest;
 185  
     }
 186  
 
 187  
     /**
 188  
      * Make the specified source image disabled.
 189  
      *
 190  
      * @param src source image
 191  
      * @return filtered source image
 192  
      */
 193  
     public static Image makeDisabled(final BufferedImage src)
 194  
     {
 195  910
         BufferedImage dest = new BufferedImage(src.getColorModel(),
 196  
                                                src.copyData(null),
 197  
                                                src.isAlphaPremultiplied(),
 198  
                                                null);
 199  910
         DISABLED_SATURATION_OP.filter(src, dest);
 200  910
         DISABLED_PATTERN_OP.filter(src.getRaster(), dest.getRaster());
 201  910
         return dest;
 202  
     }
 203  
 
 204  
     /**
 205  
      * Make the specified source image dragging.
 206  
      *
 207  
      * @param src source image
 208  
      * @return filtered source image
 209  
      */
 210  
     public static Image makeDragging(final BufferedImage src)
 211  
     {
 212  910
         BufferedImage dest = new BufferedImage(src.getColorModel(),
 213  
                                                src.copyData(null),
 214  
                                                src.isAlphaPremultiplied(),
 215  
                                                null);
 216  910
         DRAGGING_OP.filter(src, dest);
 217  910
         return dest;
 218  
     }
 219  
 
 220  
     /**
 221  
      * Make the specified source image mouseover.
 222  
      *
 223  
      * @param src source image
 224  
      * @return filtered source image
 225  
      */
 226  
     public static Image makeMouseover(final BufferedImage src)
 227  
     {
 228  1820
         BufferedImage dest = new BufferedImage(src.getColorModel(),
 229  
                                                src.copyData(null),
 230  
                                                src.isAlphaPremultiplied(),
 231  
                                                null);
 232  1820
         MOUSEOVER_OP.filter(src, dest);
 233  1820
         return dest;
 234  
     }
 235  
 
 236  
     /**
 237  
      * Make the specified source image selected.
 238  
      *
 239  
      * @param src source image
 240  
      * @param selectionColor selection color
 241  
      * @return filtered source image
 242  
      */
 243  
     public static Image makeSelected(final BufferedImage src, final Color selectionColor)
 244  
     {
 245  1820
         BufferedImage dest = new BufferedImage(src.getColorModel(),
 246  
                                                src.copyData(null),
 247  
                                                src.isAlphaPremultiplied(),
 248  
                                                null);
 249  1820
         RasterOp selectionOp = new SelectionRasterOp(selectionColor);
 250  1820
         selectionOp.filter(src.getRaster(), dest.getRaster());
 251  1820
         selectionOp = null;
 252  1820
         return dest;
 253  
     }
 254  
 
 255  
     /**
 256  
      * Make the specified source image selected mouseover.
 257  
      *
 258  
      * @param src source image
 259  
      * @param selectionColor selection color
 260  
      * @return filtered source image
 261  
      */
 262  
     public static Image makeSelectedMouseover(final BufferedImage src, final Color selectionColor)
 263  
     {
 264  910
         return makeMouseover((BufferedImage) makeSelected(src, selectionColor));
 265  
     }
 266  
 }