if ((getStyle() & SWT.NO_BACKGROUND) != 0) {
if (background != null || (getStyle() & SWT.DOUBLE_BUFFERED) == 0) {
void onPaint(PaintEvent event) {	Rectangle rect = getClientArea();	if (rect.width == 0 || rect.height == 0) return;		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) {		img = null;		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);	    	}	    }		if (appToolTipText == null) {			super.setToolTipText(text);		}	} else {		super.setToolTipText(appToolTipText);	}			// determine horizontal position	int x = rect.x + hIndent;	if (align == SWT.CENTER) {		x = (rect.width - extent.x)/2;	}	if (align == SWT.RIGHT) {		x = rect.width - hIndent - extent.x;	}		// draw a background image behind the text	try {		if (backgroundImage != null) {			// draw a background image behind the text			Rectangle imageRect = backgroundImage.getBounds();			// tile image to fill space			gc.setBackground(getBackground());			gc.fillRectangle(rect);			int xPos = 0;			while (xPos < rect.width) {				int yPos = 0;				while (yPos < rect.height) {					gc.drawImage(backgroundImage, xPos, yPos);					yPos += imageRect.height;				}				xPos += imageRect.width;			}		} else if (gradientColors != null) {			// draw a gradient behind the text			final Color oldBackground = gc.getBackground();			if (gradientColors.length == 1) {				if (gradientColors[0] != null) gc.setBackground(gradientColors[0]);				gc.fillRectangle(0, 0, rect.width, rect.height);			} else {				final Color oldForeground = gc.getForeground();				Color lastColor = gradientColors[0];				if (lastColor == null) lastColor = oldBackground;				int pos = 0;				for (int i = 0; i < gradientPercents.length; ++i) {					gc.setForeground(lastColor);					lastColor = gradientColors[i + 1];					if (lastColor == null) lastColor = oldBackground;					gc.setBackground(lastColor);					if (gradientVertical) {						final int gradientHeight = (gradientPercents[i] * rect.height / 100) - pos;						gc.fillGradientRectangle(0, pos, rect.width, gradientHeight, true);						pos += gradientHeight;					} else {						final int gradientWidth = (gradientPercents[i] * rect.width / 100) - pos;						gc.fillGradientRectangle(pos, 0, gradientWidth, rect.height, false);						pos += gradientWidth;					}				}				if (gradientVertical && pos < rect.height) {					gc.setBackground(getBackground());					gc.fillRectangle(0, pos, rect.width, rect.height - pos);				}				if (!gradientVertical && pos < rect.width) {					gc.setBackground(getBackground());					gc.fillRectangle(pos, 0, rect.width - pos, rect.height);				}				gc.setForeground(oldForeground);			}			gc.setBackground(oldBackground);		} else {			if ((getStyle() & SWT.NO_BACKGROUND) != 0) {				gc.setBackground(getBackground());				gc.fillRectangle(rect);			}		}	} catch (SWTException e) {		if ((getStyle() & SWT.NO_BACKGROUND) != 0) {			gc.setBackground(getBackground());			gc.fillRectangle(rect);		}	}	// draw border	int style = getStyle();	if ((style & SWT.SHADOW_IN) != 0 || (style & SWT.SHADOW_OUT) != 0) {		paintBorder(gc, rect);	}	// draw the image	if (img != null) {		Rectangle imageRect = img.getBounds();		gc.drawImage(img, 0, 0, imageRect.width, imageRect.height, 		                x, (rect.height-imageRect.height)/2, imageRect.width, imageRect.height);		x +=  imageRect.width + GAP;		extent.x -= imageRect.width + GAP;	}	// draw the text	if (lines != null) {		int lineHeight = gc.getFontMetrics().getHeight();		int textHeight = lines.length * lineHeight;		int lineY = Math.max(vIndent, rect.y + (rect.height - textHeight) / 2);		gc.setForeground(getForeground());		for (int i = 0; i < lines.length; i++) {			int lineX = x;			if (lines.length > 1) {				if (align == SWT.CENTER) {					int lineWidth = gc.textExtent(lines[i], DRAW_FLAGS).x;					lineX = x + Math.max(0, (extent.x - lineWidth) / 2);				}				if (align == SWT.RIGHT) {					int lineWidth = gc.textExtent(lines[i], DRAW_FLAGS).x;					lineX = Math.max(x, rect.x + rect.width - hIndent - lineWidth);				}			}			gc.drawText(lines[i], lineX, lineY, DRAW_FLAGS);			lineY += lineHeight;		}	}}