blob: 8ff4e729d9d9915329b2077d596b793be1951647 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.update.internal.ui.parts;
import org.eclipse.jface.resource.*;
import org.eclipse.swt.graphics.*;
/**
* An OverlayIcon consists of a main icon and several adornments.
*/
public class OverlayIcon extends CompositeImageDescriptor {
static final int DEFAULT_WIDTH= 16;
static final int DEFAULT_HEIGHT= 16;
private Point fSize= null;
private ImageDescriptor fBase;
private ImageDescriptor fOverlays[][];
public OverlayIcon(ImageDescriptor base, ImageDescriptor[][] overlays) {
fBase= base;
if (fBase == null)
fBase= ImageDescriptor.getMissingImageDescriptor();
fOverlays= overlays;
fSize= new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
public OverlayIcon(ImageDescriptor base, ImageDescriptor[][] overlays, Point size) {
fBase= base;
if (fBase == null)
fBase= ImageDescriptor.getMissingImageDescriptor();
fOverlays= overlays;
fSize= size;
}
protected void drawBottomLeft(ImageDescriptor[] overlays) {
if (overlays == null)
return;
int length= overlays.length;
int x= 0;
for (int i= 0; i < 3; i++) {
if (i < length && overlays[i] != null) {
ImageData id= overlays[i].getImageData();
drawImage(id, x, getSize().y-id.height);
x+= id.width;
}
}
}
protected void drawBottomRight(ImageDescriptor[] overlays) {
if (overlays == null)
return;
int length= overlays.length;
int x= getSize().x;
for (int i= 2; i >= 0; i--) {
if (i < length && overlays[i] != null) {
ImageData id= overlays[i].getImageData();
x-= id.width;
drawImage(id, x, getSize().y-id.height);
}
}
}
protected void drawCompositeImage(int width, int height) {
ImageData bg= fBase.getImageData();
drawImage(bg, 0, 0);
if (fOverlays != null) {
if (fOverlays.length > 0)
drawTopRight( fOverlays[0]);
if (fOverlays.length > 1)
drawBottomRight(fOverlays[1]);
if (fOverlays.length > 2)
drawBottomLeft(fOverlays[2]);
if (fOverlays.length > 3)
drawTopLeft(fOverlays[3]);
}
}
protected void drawTopLeft(ImageDescriptor[] overlays) {
if (overlays == null)
return;
int length= overlays.length;
int x= 0;
for (int i= 0; i < 3; i++) {
if (i < length && overlays[i] != null) {
ImageData id= overlays[i].getImageData();
drawImage(id, x, 0);
x+= id.width;
}
}
}
protected void drawTopRight(ImageDescriptor[] overlays) {
if (overlays == null)
return;
int length= overlays.length;
int x= getSize().x;
for (int i= 2; i >= 0; i--) {
if (i < length && overlays[i] != null) {
ImageData id= overlays[i].getImageData();
x-= id.width;
drawImage(id, x, 0);
}
}
}
protected Point getSize() {
return fSize;
}
}