[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-2d-dev
Subject: [OpenJDK 2D-Dev] Integrated: 8263583: Emoji rendering on macOS
From: Dmitry Batrak <dbatrak () openjdk ! java ! net>
Date: 2021-05-31 7:18:24
Message-ID: wloTI0pbaHjADqLgqPY87_n5dAsFGl2P0kfhpfoVrLY=.61b95132-5856-43c8-af0c-97bd0a4d78ec () github ! com
[Download RAW message or body]
On Mon, 15 Mar 2021 10:25:50 GMT, Dmitry Batrak <dbatrak@openjdk.org> wrote:
> This is the implementation used by JetBrains Runtime for the last 4 years, after \
> some cleanup, and with one problem, found while preparing the pull request, fixed.
> Even though typical scenarios for a UI application should be covered, it's not a \
> complete solution. In particular, emoji-s still won't be rendered for large font \
> sizes (more than 100pt), and for non-trivial composite/painting modes. Notable \
> implementation details are listed below.
> **Glyph image generation**
>
> Deprecated CGContextShowGlyphsAtPoint function, used by JDK on macOS to render \
> text, cannot render emojis, CTFontDrawGlyphs is used instead. It ignores the scale \
> component of text transformation matrix, so a 'real-sized' CTFont object should be \
> passed to it. The same sizing procedure is done when calculating glyph metrics, \
> because they are not scaled proportionally with font size (as they do for vector \
> fonts).
> **Glyph image storage**
>
> Existing GlyphInfo structure is used to store color glyph image. Color glyph can be \
> distinguished by having 4 bytes of storage per pixel. Color components are stored \
> in pre-multiplied alpha format.
> **Glyph rendering**
>
> Previously, GlyphList instance always contained glyphs in the same format (solid, \
> grayscale or LCD), determined by the effective rendering hint. Now the renderers \
> must be prepared to GlyphList having 'normal' glyphs interspersed with color glyphs \
> (they can appear due to font fallback). This isn't a problem for OpenGL renderer \
> (used for on-screen painting), but GlyphListLoopPipe-based renderers (used for \
> off-screen painting) needed an adjustment to be able to operate on specific \
> segments of GlyphList. As an incidental optimization, calculation of GlyphList \
> bounds ('getBounds' method) is performed now only when needed (most text renderers \
> don't need this information). Speaking of the actual rendering of the glyph image, \
> it's done by the straightforward glDrawPixels call in OpenGL renderer, and by \
> re-using existing Blit primitive in off-screen renderers.
> **Testing**
>
> There's no good way to test the new functionality automatically, but I've added a \
> test verifying that 'something' is rendered for the emoji character, when painting \
> to BufferedImage.
> Existing tests pass after the change.
This pull request has now been integrated.
Changeset: 236bd89d
Author: Dmitry Batrak <dbatrak@openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/236bd89dc3be60cac13099618f5e6518437a5098
Stats: 938 lines in 29 files changed: 795 ins; 31 del; 112 mod
8263583: Emoji rendering on macOS
Reviewed-by: serb, prr
-------------
PR: https://git.openjdk.java.net/jdk/pull/3007
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic