Project: bundlemaker
package org.bundlemaker.core.ui;
 
import org.eclipse.jface.viewers.OwnerDrawLabelProvider; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.graphics.Rectangle; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.TreeItem; 
 
/**
 * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=26045 
 * @see http  
 *      ://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/ 
 *      snippets/viewers/Snippet051TableCenteredImage.java?view=markup CenterImageLabelProvider -- 
 *  
 * @author Nils Hartmann ([email protected]
 */
 
public abstract class CenterImageLabelProvider extends OwnerDrawLabelProvider { 
 
  @Override 
  protected void measure(Event event, Object element) { 
  } 
 
  @Override 
  protected void paint(Event event, Object element) { 
 
    Image img = getImage(element); 
 
    if (img != null) { 
      Rectangle bounds = ((TreeItem) event.item).getBounds(event.index); 
      Rectangle imgBounds = img.getBounds(); 
      bounds.width /= 2
      bounds.width -= imgBounds.width / 2
      bounds.height /= 2
      bounds.height -= imgBounds.height / 2
 
      int x = bounds.width > 0 ? bounds.x + bounds.width : bounds.x; 
      int y = bounds.height > 0 ? bounds.y + bounds.height : bounds.y; 
 
      event.gc.drawImage(img, x, y); 
    } 
  } 
 
  protected abstract Image getImage(Object element); 
}