OpenJDK / jdk / jdk
changeset 37687:bf6516a24734
8146035: Windows - With LCD antialiasing, some glyphs are not rendered correctly
Reviewed-by: serb, prr
Contributed-by: Dmitry Batrak <dmitry.batrak@jetbrains.com>
author | aivanov |
---|---|
date | Thu, 14 Apr 2016 13:07:35 +0300 |
parents | 1ad88c2dfacd |
children | e5cd9e00a669 |
files | jdk/src/java.desktop/windows/native/libfontmanager/lcdglyph.c |
diffstat | 1 files changed, 12 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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); }