boolean shortenText = false;
String t = text;
Image img = image;
int availableWidth = Math.max(0, rect.width - 2 * hIndent);
Point extent = getTotalSize(img, t);
if (extent.x > availableWidth) {
availableWidth -= img != null ? img.getBounds().width : 0;
extent = getTotalSize(img, t);
if (extent.x > availableWidth) {
shortenText = true;
}
}
GC gc = event.gc;
String[] lines = text == null ? null : splitString(text);
// shorten the text
if (shortenText) {
extent.x = 0;
for (int i = 0; i < lines.length; i++) {
Point e = gc.textExtent(lines[i], DRAW_FLAGS);
if (e.x > availableWidth) {
lines[i] = shortenText(gc, lines[i], availableWidth);
extent.x = Math.max(extent.x, getTotalSize(null, lines[i]).x);
} else {
extent.x = Math.max(extent.x, e.x);