001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.runtime;
011:
012: import org.eclipse.jface.resource.CompositeImageDescriptor;
013: import org.eclipse.jface.resource.ImageDescriptor;
014: import org.eclipse.swt.graphics.ImageData;
015: import org.eclipse.swt.graphics.Point;
016:
017: public class OverlayIcon extends CompositeImageDescriptor {
018:
019: static final int DEFAULT_WIDTH = 16;
020: static final int DEFAULT_HEIGHT = 16;
021:
022: private Point fSize = null;
023:
024: private ImageDescriptor fBase;
025: private ImageDescriptor fOverlays[][];
026:
027: public OverlayIcon(ImageDescriptor base,
028: ImageDescriptor[][] overlays) {
029: fBase = base;
030: if (fBase == null)
031: fBase = ImageDescriptor.getMissingImageDescriptor();
032: fOverlays = overlays;
033: fSize = new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT);
034: }
035:
036: public OverlayIcon(ImageDescriptor base,
037: ImageDescriptor[][] overlays, Point size) {
038: fBase = base;
039: if (fBase == null)
040: fBase = ImageDescriptor.getMissingImageDescriptor();
041: fOverlays = overlays;
042: fSize = size;
043: }
044:
045: protected void drawBottomLeft(ImageDescriptor[] overlays) {
046: if (overlays == null)
047: return;
048: int length = overlays.length;
049: int x = 0;
050: for (int i = 0; i < 3; i++) {
051: if (i < length && overlays[i] != null) {
052: ImageData id = overlays[i].getImageData();
053: drawImage(id, x, getSize().y - id.height);
054: x += id.width;
055: }
056: }
057: }
058:
059: protected void drawBottomRight(ImageDescriptor[] overlays) {
060: if (overlays == null)
061: return;
062: int length = overlays.length;
063: int x = getSize().x;
064: for (int i = 2; i >= 0; i--) {
065: if (i < length && overlays[i] != null) {
066: ImageData id = overlays[i].getImageData();
067: x -= id.width;
068: drawImage(id, x, getSize().y - id.height);
069: }
070: }
071: }
072:
073: protected void drawCompositeImage(int width, int height) {
074: ImageData bg = fBase.getImageData();
075: drawImage(bg, 0, 0);
076:
077: if (fOverlays != null) {
078: if (fOverlays.length > 0)
079: drawTopRight(fOverlays[0]);
080:
081: if (fOverlays.length > 1)
082: drawBottomRight(fOverlays[1]);
083:
084: if (fOverlays.length > 2)
085: drawBottomLeft(fOverlays[2]);
086:
087: if (fOverlays.length > 3)
088: drawTopLeft(fOverlays[3]);
089: }
090: }
091:
092: protected void drawTopLeft(ImageDescriptor[] overlays) {
093: if (overlays == null)
094: return;
095: int length = overlays.length;
096: int x = 0;
097: for (int i = 0; i < 3; i++) {
098: if (i < length && overlays[i] != null) {
099: ImageData id = overlays[i].getImageData();
100: drawImage(id, x, 0);
101: x += id.width;
102: }
103: }
104: }
105:
106: protected void drawTopRight(ImageDescriptor[] overlays) {
107: if (overlays == null)
108: return;
109: int length = overlays.length;
110: int x = getSize().x;
111: for (int i = 2; i >= 0; i--) {
112: if (i < length && overlays[i] != null) {
113: ImageData id = overlays[i].getImageData();
114: x -= id.width;
115: drawImage(id, x, 0);
116: }
117: }
118: }
119:
120: protected Point getSize() {
121: return fSize;
122: }
123: }
|