# HG changeset patch # User aivanov # Date 1460628455 -10800 # Node ID bf6516a247341aaf3356e71b8b31e585ffeb6968 # Parent 1ad88c2dfacdfadcf9a7393f1af1b08a85b42737 8146035: Windows - With LCD antialiasing, some glyphs are not rendered correctly Reviewed-by: serb, prr Contributed-by: Dmitry Batrak diff -r 1ad88c2dfacd -r bf6516a24734 jdk/src/java.desktop/windows/native/libfontmanager/lcdglyph.c --- a/jdk/src/java.desktop/windows/native/libfontmanager/lcdglyph.c Wed Apr 13 17:04:02 2016 +0530 +++ b/jdk/src/java.desktop/windows/native/libfontmanager/lcdglyph.c Thu Apr 14 13:07:35 2016 +0300 @@ -157,6 +157,9 @@ if (hBitmap != 0) { \ DeleteObject(hBitmap); \ } \ + if (tmpBitmap != 0) { \ + DeleteObject(tmpBitmap); \ + } \ if (dibImage != NULL) { \ free(dibImage); \ } \ @@ -196,6 +199,7 @@ int bmWidth, bmHeight; int x, y; HBITMAP hBitmap = NULL, hOrigBM; + HBITMAP tmpBitmap = NULL; int gamma, orient; HWND hWnd = NULL; @@ -250,6 +254,12 @@ } oldFont = SelectObject(hMemoryDC, hFont); + tmpBitmap = CreateCompatibleBitmap(hDesktopDC, 1, 1); + if (tmpBitmap == NULL) { + FREE_AND_RETURN; + } + hOrigBM = (HBITMAP)SelectObject(hMemoryDC, tmpBitmap); + memset(&textMetric, 0, sizeof(TEXTMETRIC)); err = GetTextMetrics(hMemoryDC, &textMetric); if (err == 0) { @@ -334,7 +344,7 @@ if (hBitmap == NULL) { FREE_AND_RETURN; } - hOrigBM = (HBITMAP)SelectObject(hMemoryDC, hBitmap); + SelectObject(hMemoryDC, hBitmap); /* Fill in black */ rect.left = 0; @@ -478,6 +488,7 @@ ReleaseDC(hWnd, hDesktopDC); DeleteObject(hMemoryDC); DeleteObject(hBitmap); + DeleteObject(tmpBitmap); return ptr_to_jlong(glyphInfo); }