Skip to content

Instantly share code, notes, and snippets.

@3ffusi0on
Created October 26, 2016 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 3ffusi0on/ee668551ecb1c4b3ee7446a5cb98f3b3 to your computer and use it in GitHub Desktop.
Save 3ffusi0on/ee668551ecb1c4b3ee7446a5cb98f3b3 to your computer and use it in GitHub Desktop.
SWT Multiline TreeViewer with centered image (Limitation : https://bugs.eclipse.org/bugs/show_bug.cgi?id=154341)
tree.addListener(SWT.MeasureItem, paintListener);
tree.addListener(SWT.PaintItem, paintListener);
tree.addListener(SWT.EraseItem, paintListener);
Listener paintListener = new Listener() {
@Override
public void handleEvent(Event event) {
switch(event.type) {
case SWT.MeasureItem: {
TreeItem item = (TreeItem)event.item;
String text = item.getText(event.index);
Point size = event.gc.textExtent(text);
Image img = item.getImage(event.index);
Rectangle rect = img.getBounds();
event.width += rect.width;
event.height = size.y;
break;
}
case SWT.PaintItem: {
TreeItem item = (TreeItem)event.item;
Image img = item.getImage(event.index);
Rectangle rect = img.getBounds();
int offsetImg = Math.max(0, (event.height - rect.height) / 2);
String text = item.getText(event.index);
Point sizeTx = event.gc.textExtent(text);
int offsetTx = Math.max(0, (event.height - sizeTx.y) / 2);
event.gc.drawImage(img, event.x, event.y + offsetImg);
event.gc.drawText(text, event.x + rect.width + 5, event.y + offsetTx, true);
break;
}
case SWT.EraseItem: {
event.detail &= ~SWT.FOREGROUND;
break;
}
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment