0001 이모지가 한 글자로 그려짐
From 카카오톡 on Wine
Jump to navigationJump to search
U+FFFF 위에 사는 문자는 카카오톡에서 이모지뿐인데, 그 문자 하나를 그리기까지 거쳐야 하는 세 곳이 한꺼번에 틀려 있었습니다. 셋 중 하나만 고쳐서는 화면이 조금도 달라지지 않기 때문에, 글꼴 치환이며 대체며 링크 키며 짚이는 데를 오래 뒤지고도 꼼짝하지 않았습니다. 무엇이 어떻게 틀렸는지는 패치의 커밋 메시지에 하나씩 적어두었습니다.
업스트림이 알고 있는 것은 그중 첫 번째뿐입니다.
컬러 이모지
글자는 제대로 나오지만 색이 빠집니다. win32u의 텍스트
경로에는 컬러 글리프를 다룰 길이 없어서 FT_LOAD_COLOR도
CBDT도 COLR도 찾아볼 수 없습니다. 글리프는 현재 텍스트 색으로 칠해지는
커버리지 마스크가 되어 DIB 드라이버에 도착하므로, 자기 색을 들고 오는
글리프는 지나갈 통로가 없습니다.
시험
patches/emojitest.c는 글꼴에 문자를 하나 물어본 뒤 돌아온
아웃라인의 크기를 찍어주므로, 창을 들여다보는 대신 숫자로 답을 받을 수
있습니다. 글리프가 없으면 notdef 상자가 와서 크기가 작고, 있으면
그렇지 않습니다.
x86_64-w64-mingw32-gcc -o emojitest.exe emojitest.c -lgdi32
cp emojitest.exe <prefix>/drive_c/
wine C:\\emojitest.exe
패치 전과 후입니다.
malgun astral U+1F33E outline=188 bytes box=22x26
malgun astral U+1F33E outline=3144 bytes box=37x33
이모지 글꼴을 직접 고르든 폰트 링크를 타고 닿든 똑같이 3144가 나와야 합니다. 글리프가 글꼴 안에 있기만 한 경우와 링크까지 제대로 타는 경우가 이 숫자에서 갈립니다.