void drawText(Theme theme, String text, int flags, GC gc, Rectangle bounds) { if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) { int /*long*/ hTheme = OS.OpenThemeData(0, getClassId()); char[] chars = new char[text.length()]; text.getChars(0, chars.length, chars, 0); int textFlags = OS.DT_SINGLELINE; if ((flags & DrawData.DRAW_LEFT) != 0) textFlags |= OS.DT_LEFT; if ((flags & DrawData.DRAW_HCENTER) != 0) textFlags |= OS.DT_CENTER; if ((flags & DrawData.DRAW_RIGHT) != 0) textFlags |= OS.DT_RIGHT; if ((flags & DrawData.DRAW_TOP) != 0) textFlags |= OS.DT_TOP; if ((flags & DrawData.DRAW_BOTTOM) != 0) textFlags |= OS.DT_BOTTOM; if ((flags & DrawData.DRAW_VCENTER) != 0) textFlags |= OS.DT_VCENTER; RECT rect = new RECT (); rect.left = bounds.x; rect.right = bounds.x + bounds.width; rect.top = bounds.y; rect.bottom = bounds.y + bounds.height; int[] part = getPartId(DrawData.WIDGET_WHOLE); int iPartId = part[0]; int iStateId = part[1]; OS.DrawThemeText(hTheme, gc.handle, iPartId, iStateId, chars, chars.length, textFlags, 0, rect); OS.CloseThemeData(hTheme); } }
Rectangle measureText(Theme theme, String text, int flags, GC gc, Rectangle bounds) { if (!(OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ())) return new Rectangle(0, 0, 0, 0); int /*long*/ hTheme = OS.OpenThemeData(0, getClassId()); char[] chars = new char[text.length()]; text.getChars(0, chars.length, chars, 0); //TODO - constant for VCENTER and flags int textFlags = 0;//OS.DT_VCENTER | OS.DT_SINGLELINE | OS.DT_CALCRECT; if ((style & SWT.LEFT) != 0) textFlags |= OS.DT_LEFT; if ((style & SWT.CENTER) != 0) textFlags |= OS.DT_CENTER; if ((style & SWT.RIGHT) != 0) textFlags |= OS.DT_RIGHT; RECT extent = new RECT(); RECT rect = null; if (bounds != null) { rect = new RECT(); rect.left = bounds.x; rect.right = bounds.x + bounds.width; rect.top = bounds.y; rect.bottom = bounds.y + bounds.height; } int[] part = getPartId(DrawData.WIDGET_WHOLE); int iPartId = part[0]; int iStateId = part[1]; OS.GetThemeTextExtent(hTheme, gc.handle, iPartId, iStateId, chars, chars.length, textFlags, rect, extent); OS.CloseThemeData(hTheme); return new Rectangle(extent.left, extent.top, extent.right - extent.left, extent.bottom - extent.top); }