-org::xwt::plat::Win32$Win32Font* org::xwt::plat::Win32::mapFont(org::xwt::Platform$ParsedFont* pf) {
- org::xwt::plat::Win32$Win32Font* ret = new org::xwt::plat::Win32$Win32Font();
- LOGFONT logfont;
- memset(&logfont, 0, sizeof(LOGFONT));
- logfont.lfHeight = -MulDiv(pf->size, GetDeviceCaps((HDC)org::xwt::plat::Win32::desktop_dc, LOGPIXELSY), 72);
- if (pf->italic) logfont.lfItalic = 1;
- if (pf->bold) logfont.lfWeight = FW_BOLD;
- logfont.lfCharSet = ANSI_CHARSET;
-
- JvGetStringUTFRegion(pf->name, 0, min(31, JvGetStringUTFLength(pf->name)), logfont.lfFaceName);
- logfont.lfFaceName[min(31, JvGetStringUTFLength(pf->name))] = 0;
-
- ret->hfont = (jint)CreateFontIndirect(&logfont);
- SelectObject((HDC)desktop_dc, (HFONT)(ret->hfont));
-
- TEXTMETRIC tm;
- GetTextMetrics((HDC)desktop_dc, &tm);
- POINT p;
- p.x = 0; p.y = tm.tmAscent;
- LPtoDP((HDC)desktop_dc, &p, 1);
- ret->maxAscent = p.y;
-
- p.x = 0; p.y = tm.tmDescent;
- LPtoDP((HDC)desktop_dc, &p, 1);
- ret->maxDescent = p.y;
-
- return ret;
-}
-
-jint org::xwt::plat::Win32::_stringWidth(jstring font, jstring text) {
-
- HFONT hfont = (HFONT)(getFont(font)->hfont);
- SelectObject((HDC)org::xwt::plat::Win32::desktop_dc, hfont);
-
- int len = min(1024, JvGetStringUTFLength(text));
- char buf[len + 1];
- buf[len] = '\0';
- JvGetStringUTFRegion(text, 0, len, buf);
-
- SIZE size;
- GetTextExtentPoint32((HDC)org::xwt::plat::Win32::desktop_dc, buf, len, &size);
- return size.cx;
-}
-