blob: 0e3623c8f31c7e7cdf172e7862ac9d1d25787e99 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.decorators;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.viewers.DecorationOverlayIcon;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.ui.PlatformUI;
/**
* The OverlayCache is a helper class used by the DecoratorManger to manage the
* life cycle of overlaid images.
*/
class OverlayCache {
/**
* The CacheEntry
*
* @since 3.3
*
*/
private Set keys = new HashSet(); // Hold onto the cache entries we
// created
// Use a resource manager to hold onto any images we have to create
private LocalResourceManager resourceManager;
/**
*
*/
public OverlayCache() {
super();
//As we are not in the UI Thread lookup the Display
resourceManager = new LocalResourceManager(JFaceResources
.getResources(PlatformUI.getWorkbench().getDisplay()));
}
/**
* Returns and caches an image corresponding to the specified icon.
*
* @param icon
* the icon
* @return the image
*/
private Image getImageFor(DecorationOverlayIcon icon) {
keys.add(icon);// Cache the keys so there is a reference somewhere
return resourceManager.createImage(icon);
}
/**
* Disposes of all images in the cache.
*/
void disposeAll() {
keys.clear();
resourceManager.dispose();
}
/**
* Apply the descriptors for the receiver to the supplied image.
*
* @param source
* @param descriptors
* @return Image
*/
Image applyDescriptors(Image source, ImageDescriptor[] descriptors) {
Rectangle bounds = source.getBounds();
Point size = new Point(bounds.width, bounds.height);
DecorationOverlayIcon icon = new DecorationOverlayIcon(source, descriptors, size);
return getImageFor(icon);
}
}