Package org.eclipse.ui.internal.decorators

Source Code of org.eclipse.ui.internal.decorators.OverlayCache

/*******************************************************************************
* 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);
  }

}
TOP

Related Classes of org.eclipse.ui.internal.decorators.OverlayCache

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.