[OpenJDK 2D-Dev] [PATCH] JDK-8146035: Windows - With LCD antialiasing, some glyphs are not rendered correctly
Dmitry Batrak
dmitry.batrak at jetbrains.com
Thu Apr 7 12:26:28 UTC 2016
Hello,
I'd like to propose a fix for JDK-8146035. I am not a committer,
so I hope someone can sponsor this fix.
I work at Jetbrains, which has signed a company-level contributor
agreement,
so, from a legal perspective, I believe, there are no obstacles.
My investigation shows that the issue is caused by incorrect determination
of bitmap size, prepared for glyph rendering, so only part of glyph
becomes visible due to cropping. This seems to happen because
compatible bitmap is not selected into memory device context (DC)
before calling GetTextMetrics. Documentation for CreateCompatibleDC call
(
https://msdn.microsoft.com/en-us/library/windows/desktop/dd183489%28v=vs.85%29.aspx)
says compatible bitmap needs to be selected into DC before any drawing
operation.
Even though GetTextMetrics is not a drawing operation, it turns out
to be affected by selected bitmap's type too (by default a monochrome
bitmap
is selected in a memory DC). This behaviour was also mentioned in the
following
MSDN blog post comment:
https://blogs.msdn.microsoft.com/oldnewthing/20060614-00/?p=30873#comment-392143
The proposed fix is to select a temporary 1x1 compatible bitmap
into memory DC before GetTextMetrics call.
Here's webrev link - http://adm-12504.intellij.net/
I didn't create a test case, as it would require a specific font file
(I couldn't reproduce the issue for fonts bundled with Windows).
Best regards,
Dmitry Batrak
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20160407/ebadf5a3/attachment.html>
More information about the 2d-dev
mailing list