int [] argList = {OS.XmNfontList, 0}; OS.XtGetValues (handle, argList, argList.length / 2);
public Point computeSize (int wHint, int hHint, boolean changed) {	checkWidget();	int width = wHint;	int height = hHint;	if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) {		int [] argList = {OS.XmNfontList, 0};		OS.XtGetValues (handle, argList, argList.length / 2);		int ptr = OS.XmTextGetString (handle);		if (ptr == 0) return new Point (0, 0);		int size = OS.strlen (ptr);		if (size == 0) {			if (hHint == SWT.DEFAULT) {				if ((style & SWT.SINGLE) != 0) {					height = getLineHeight ();				} else {					height = DEFAULT_HEIGHT;				}			}			if (wHint == SWT.DEFAULT) {				width = DEFAULT_WIDTH;			}		} else {			byte [] buffer = new byte [size + 1];			OS.memmove (buffer, ptr, size);			int xmString = OS.XmStringParseText (					buffer,				0,				OS.XmFONTLIST_DEFAULT_TAG, 				OS.XmCHARSET_TEXT, 				null,				0,				0);			if (hHint == SWT.DEFAULT) {				if ((style & SWT.SINGLE) != 0) {					height = getLineHeight ();				} else {					height = OS.XmStringHeight (argList [1], xmString);				}			}			if (wHint == SWT.DEFAULT) width = OS.XmStringWidth(argList [1], xmString);			OS.XmStringFree (xmString);		}		OS.XtFree (ptr);	}	if (horizontalBar != null) {		int [] argList1 = {OS.XmNheight, 0};		OS.XtGetValues (horizontalBar.handle, argList1, argList1.length / 2);		height += argList1 [1] + 4;	}	if (verticalBar != null) {		int [] argList1 = {OS.XmNwidth, 0};		OS.XtGetValues (verticalBar.handle, argList1, argList1.length / 2);		width += argList1 [1] + 4;	}	XRectangle rect = new XRectangle ();	OS.XmWidgetGetDisplayRect (handle, rect);	width += rect.x * 2;  height += rect.y * 2;	if ((style & (SWT.MULTI | SWT.BORDER)) != 0) height++;	return new Point (width, height);}