RFR: 8269806: Emoji rendering on Linux [v2]

Hiroshi Miura duke at openjdk.java.net
Sat Mar 26 07:16:44 UTC 2022


On Thu, 24 Mar 2022 22:36:28 GMT, Nikita Gubarkov <duke at openjdk.java.net> wrote:

>> It was implemented in JetBrains Runtime a year ago and was ported & refactored for this PR
>> It includes:
>> - Bitmap glyph loading via Freetype
>> - Manual scaling & transformation of bitmap glyphs with nearest-neighbor or bilinear-mipmap style algorithms depending on the text antialiasing hint
>> - Storing BGRA glyphs in glyph cache & rendering them as plain images, as currently used XRender text drawing functions doesn't support colored glyphs
>> - Small fixes in related code like null-checks which could cause NPE & comment typos
>
> Nikita Gubarkov has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8269806: Fix builds with old Freetype (before 2.5)

I've tested it with Font2DTest on Mint-Linux 20.3.

## test result of font2dtest with noto color emoji font

This works well when select Noto Color Emoji 
![emoticon_jdk_8269806_noto_color_emoji](https://user-images.githubusercontent.com/123720/160228910-654f5503-5046-46b8-b74d-83d28e4faebf.png)

### lsof -p <pid> |grep fonts

<details>


java    3147863 miurahr    8r   REG              259,2 20332392 24644835 /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
java    3147863 miurahr    9r   REG              259,2    88304 24644978 /usr/share/fonts/truetype/fonts-yrsa-rasa/Yrsa-Medium.ttf
java    3147863 miurahr   12r   REG              259,2    20876 28052242 /usr/share/fonts/truetype/lyx/wasy10.ttf
java    3147863 miurahr   13r   REG              259,2    86172 24644979 /usr/share/fonts/truetype/fonts-yrsa-rasa/Yrsa-Regular.ttf
java    3147863 miurahr   14r   REG              259,2    81228 24644977 /usr/share/fonts/truetype/fonts-yrsa-rasa/Yrsa-Light.ttf
java    3147863 miurahr   15r   REG              259,2    86568 24644980 /usr/share/fonts/truetype/fonts-yrsa-rasa/Yrsa-SemiBold.ttf
java    3147863 miurahr   16r   REG              259,2  4033420 24644943 /usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf
java    3147863 miurahr   17r   REG              259,2   584136 24649716 /usr/share/fonts/truetype/noto/NotoSansSymbols2-Regular.ttf
java    3147863 miurahr   18r   REG              259,2   197796 24645054 /usr/share/fonts/truetype/lohit-kannada/Lohit-Kannada.ttf
java    3147863 miurahr   19r   REG              259,2   757076 24642783 /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf
java    3147863 miurahr   20r   REG              259,2    98396 24644867 /usr/share/fonts/opentype/urw-base35/URWBookman-Light.otf
java    3147863 miurahr   21r   REG              259,2   680264 24644068 /usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf
java    3147863 miurahr   22r   REG              259,2 10847156 24643878 /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf
java    3147863 miurahr   24r   REG              259,2    82968 24644869 /usr/share/fonts/opentype/urw-base35/URWGothic-Book.otf
java    3147863 miurahr   25r   REG              259,2   156500 24644966 /usr/share/fonts/truetype/fonts-orya-extra/utkal.ttf
java    3147863 miurahr   26r   REG              259,2   209904 24644969 /usr/share/fonts/truetype/fonts-telu-extra/vemana2000.ttf
java    3147863 miurahr   27r   REG              259,2   139640 22207124 /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
java    3147863 miurahr   28r   REG              259,2   118752 22207125 /usr/share/fonts/truetype/msttcorefonts/Webdings.ttf
java    3147863 miurahr   29r   REG              259,2   114052 24644873 /usr/share/fonts/opentype/urw-base35/Z003-MediumItalic.otf
java    3147863 miurahr   30r   REG              259,2   418804 21919611 /usr/share/fonts/truetype/noto/NotoEmoji-Regular.ttf


</details>

## test result of font2dtest with dialog font

When selecting dialog font
![emoticon_jdk_8269806_dialog](https://user-images.githubusercontent.com/123720/160228925-26b40480-283f-4171-a87e-8fb5a5574c2e.png)

### lsof -p <pid> |grep fonts

<details>


java    3147863 miurahr    8r   REG              259,2 20332392 24644835 /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
java    3147863 miurahr    9r   REG              259,2    88304 24644978 /usr/share/fonts/truetype/fonts-yrsa-rasa/Yrsa-Medium.ttf
java    3147863 miurahr   12r   REG              259,2    20876 28052242 /usr/share/fonts/truetype/lyx/wasy10.ttf
java    3147863 miurahr   13r   REG              259,2    86172 24644979 /usr/share/fonts/truetype/fonts-yrsa-rasa/Yrsa-Regular.ttf
java    3147863 miurahr   14r   REG              259,2    81228 24644977 /usr/share/fonts/truetype/fonts-yrsa-rasa/Yrsa-Light.ttf
java    3147863 miurahr   15r   REG              259,2    86568 24644980 /usr/share/fonts/truetype/fonts-yrsa-rasa/Yrsa-SemiBold.ttf
java    3147863 miurahr   16r   REG              259,2  4033420 24644943 /usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf
java    3147863 miurahr   17r   REG              259,2   584136 24649716 /usr/share/fonts/truetype/noto/NotoSansSymbols2-Regular.ttf
java    3147863 miurahr   18r   REG              259,2   197796 24645054 /usr/share/fonts/truetype/lohit-kannada/Lohit-Kannada.ttf
java    3147863 miurahr   19r   REG              259,2   757076 24642783 /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf
java    3147863 miurahr   20r   REG              259,2    98396 24644867 /usr/share/fonts/opentype/urw-base35/URWBookman-Light.otf
java    3147863 miurahr   22r   REG              259,2  1792900 24642883 /usr/share/fonts/truetype/unifont/unifont_upper.ttf
java    3147863 miurahr   23r   REG              259,2   167232 24645077 /usr/share/fonts/truetype/malayalam/Uroob-Regular.ttf
java    3147863 miurahr   24r   REG              259,2    82968 24644869 /usr/share/fonts/opentype/urw-base35/URWGothic-Book.otf
java    3147863 miurahr   25r   REG              259,2   156500 24644966 /usr/share/fonts/truetype/fonts-orya-extra/utkal.ttf
java    3147863 miurahr   26r   REG              259,2   209904 24644969 /usr/share/fonts/truetype/fonts-telu-extra/vemana2000.ttf
java    3147863 miurahr   27r   REG              259,2   139640 22207124 /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
java    3147863 miurahr   28r   REG              259,2   118752 22207125 /usr/share/fonts/truetype/msttcorefonts/Webdings.ttf
java    3147863 miurahr   29r   REG              259,2   114052 24644873 /usr/share/fonts/opentype/urw-base35/Z003-MediumItalic.otf
java    3147863 miurahr   30r   REG              259,2   418804 21919611 /usr/share/fonts/truetype/noto/NotoEmoji-Regular.ttf


</details>

## diff of lsof


$ diff lsof_font2dtest_dialog.log lsof_font2dtest_noto_color_emoji.log 
12,13c12,13
< java    3147863 miurahr   22r   REG              259,2  1792900 24642883 /usr/share/fonts/truetype/unifont/unifont_upper.ttf
< java    3147863 miurahr   23r   REG              259,2   167232 24645077 /usr/share/fonts/truetype/malayalam/Uroob-Regular.ttf
---
> java    3147863 miurahr   21r   REG              259,2   680264 24644068 /usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf
> java    3147863 miurahr   22r   REG              259,2 10847156 24643878 /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf
21d20
< 


The diff tell us  when Font2DTest show emoticon with dialog, fallback font is **unifont**.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4798



More information about the client-libs-dev mailing list