プロジェクト

全般

プロフィール

バグ #1290

未完了

絵文字と普通のテキストが同じ行に現れると行の高さが異常に高くなる

Osamu Koga さんが7年以上前に追加. 約1ヶ月前に更新.

ステータス:
パッチ適用待ち
優先度:
通常
担当者:
-
対象バージョン:
プラグイン名:
ブランチ:
クラッシュする:
いいえ

説明

絵文字と普通のテキストが同じ行に現れると、その行の高さが異常に高くなります。

ブラウザ上の表示

mikutterの表示

mikutterで行を選択したところ


ファイル

mikutter.png (16.2 KB) mikutter.png Osamu Koga, 2018-08-20 16:06
don.png (26.4 KB) don.png Osamu Koga, 2018-08-20 16:06
mikutter-sel.png (16.2 KB) mikutter-sel.png Osamu Koga, 2018-08-20 16:07
tsutsuii@social.mikutter.hachune.net-100613991687635368.png (47.5 KB) tsutsuii@social.mikutter.hachune.net-100613991687635368.png Izumi Tsutsui, 2018-08-27 00:40
6c1ee9caf36cdd5d.png (1007 Bytes) 6c1ee9caf36cdd5d.png Izumi Tsutsui, 2018-08-27 00:42
fontmetrics-light.png (31.5 KB) fontmetrics-light.png Izumi Tsutsui, 2026-01-01 03:29
mikutter-1290-firefox.png (15.4 KB) mikutter-1290-firefox.png Izumi Tsutsui, 2026-01-01 03:36
mikutter-1290-3.png (39.9 KB) mikutter-1290-3.png Izumi Tsutsui, 2026-01-01 03:36
0001-refs-1290.patch (4.67 KB) 0001-refs-1290.patch Izumi Tsutsui, 2026-01-01 03:40

Izumi Tsutsui さんが7年以上前に更新

経過メモ

mastodon まとめ

https://social.mikutter.hachune.net/@tsutsuii/100613991687635368

「絵文字と普通のテキストが同じ行に現れると行の高さが異常に高くなる」 #1290
関連で「絵文字と普通のテキストが同じ行に現れるトゥートを引用すると引用表示の絵文字描画位置がズレる」が発生した

https://social.mikutter.hachune.net/@osa_k/100614859106618057

絵文字スペース問題、Cで再現したのでpango側の問題で確定っぽい
https://gist.github.com/osak/d8c3cbfaad7c042125282e190061b585

Izumi Tsutsui さんが4年以上前に更新

Izumi Tsutsui さんは #note-1 で書きました:

https://social.mikutter.hachune.net/@osa_k/100614859106618057

絵文字スペース問題、Cで再現したのでpango側の問題で確定っぽい
https://gist.github.com/osak/d8c3cbfaad7c042125282e190061b585

#1504 と関係あるかなと思って探してみたらちゃんと書いてなかったので続き

https://social.mikutter.hachune.net/@osa_k/100615073467204051

subscribeする前にgtk-listに質問投げてモデレータ行きにするというクソムーブをかました

おさけーさんの gtk-list の投稿はこれ
https://www.mail-archive.com/gtk-list@gnome.org/msg35648.html

現象としてはあんまり関係ない感じですかね……

Izumi Tsutsui さんが約1ヶ月前に更新

新年早々最近のムーブでChatGPTにこの問題を投げたところ、
source:core/mui/cairo_markup_generator.rb
source:core/mui/cairo_sub_parts_message_base.rb
それぞれの Pango::Rectangle.newy0 を渡しているのがNG、とのこと。
これはおさけーさんのCサンプルコードでも同じです。

ChatGPTの解説を手がかりに理解を書くと、
pango の仕様には文字列の高さ方向の要素として以下がある、とのこと。
  • 基準位置となる baseline
  • baseline より上側の高さを示す ascent
  • baseline より下側の高さを示す descent
  • 行の高さ height

https://docs.gtk.org/Pango/struct.FontMetrics.html

上記のページの絵には Baseline が無いので書き足したのが以下の絵

ここで、 Pango::Rectangle.new に渡す y の値は「Baseline の位置の高さが 0 である」とのこと。
よって、 y0 を渡すと Baseline より下に絵文字が描かれてしまうので、
結果として絵文字の描画位置が下にズレる、行の高さもそれに引きずられて高くなる、
ということらしいです。

Firefox などブラウザの描画を見ると、絵文字の下端は descent 位置に合わせているようです。

mikutter でも以下のようにすればブラウザ同様の描画になるっぽいです。
  • description_attr_list に pango の context を渡す
  • description_attr_listcontext.get_metrics から descent を取得する
  • Pango::Rectangle.new に渡す y を「絵文字高さ分マイナス」した値から descent 分だけ下にずらした値(加算した値)にする

なお、本文描画と subparts 描画とそれぞれに description_attr_list があるのでそれぞれ修正する必要があります。

ChatGPTが投げてきたコードはいろいろよくわからん記述があったので、
添付のパッチは上記記載の仕様で書き直してあります。
0001-refs-1290.patch

他の形式にエクスポート: Atom PDF