]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/gfx/RGBAdjustmentImageDescriptor.java
Implement ImageDescriptor.getImageData(int zoom)
[simantics/platform.git] / bundles / org.simantics.utils.ui / src / org / simantics / utils / ui / gfx / RGBAdjustmentImageDescriptor.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 /*
13  * 27.12.2006
14  */
15 package org.simantics.utils.ui.gfx;
16
17 import org.eclipse.jface.resource.ImageDescriptor;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.graphics.ImageData;
20 import org.eclipse.swt.graphics.PaletteData;
21 import org.eclipse.swt.graphics.RGB;
22
23 /**
24  * RGBAdjustmentImageDescriptor
25  * @author Toni Kalajainen
26  */
27 @SuppressWarnings("deprecation")
28 public class RGBAdjustmentImageDescriptor extends ImageDescriptor {
29     
30     public static final PaletteData DEFAULT_PALETTEDATA = 
31         new PaletteData(0x00ff0000, 0x0000ff00, 0x000000ff);
32     
33     ImageDescriptor desc;
34     int r,g,b;
35
36     public RGBAdjustmentImageDescriptor(ImageDescriptor image, int r, int g, int b)
37     {
38         desc = image;
39         this.r = r;
40         this.g = g;
41         this.b = b;        
42     }
43
44     @Override
45     public ImageData getImageData() {
46         PaletteData palette = DEFAULT_PALETTEDATA;        
47         ImageData orig = ImageCache.getInstance().getImage(desc).getImageData();
48         ImageData id = new ImageData(orig.width, orig.height, 24, palette);
49         id.setAlpha(0,0,0);
50         PaletteData origPalette = orig.palette;        
51         
52         ImageData mask = null;
53         if (orig.getTransparencyType()==SWT.TRANSPARENCY_MASK ||
54             orig.getTransparencyType()==SWT.TRANSPARENCY_PIXEL)        
55             mask = orig.getTransparencyMask();
56         
57         for (int x=0; x<orig.width; x++)
58             for (int y=0; y<orig.height; y++) {
59                 RGB rgb = origPalette.getRGB( orig.getPixel(x, y) );
60                 
61                 int nr = Math.min(255, (rgb.red*r)>>8);
62                 int ng = Math.min(255, (rgb.green*g)>>8);
63                 int nb = Math.min(255, (rgb.blue*b)>>8);
64                 
65                 rgb = new RGB( nr, ng, nb );
66                 id.setPixel(x, y, palette.getPixel(rgb));
67                 int alpha;
68                 if (mask==null) 
69                     alpha = orig.getAlpha(x, y);
70                 else
71                     alpha = (mask.getPixel(x, y)==1?255:0);
72                 id.setAlpha(x, y, alpha);
73             }        
74         return id;
75     }
76     
77     @Override
78     public boolean equals(Object obj) {
79         if (obj==this) return true;
80         if (!(obj instanceof RGBAdjustmentImageDescriptor))
81             return false;
82         RGBAdjustmentImageDescriptor other = (RGBAdjustmentImageDescriptor) obj;
83         return other.desc.equals(desc) && other.r==r && other.g==g && other.b==b;        
84     }
85     
86     @Override
87     public int hashCode() {
88         return desc.hashCode() ^ r^g^b;
89     }
90     
91 }