Bug-org 486778 Spell checker's wavy line is sometimes drawn through misspelled words
初回投稿日時: 2009-07-02 05:46:44
カテゴリ: Mozilla Core バグ修正
SNS:
Tweet (list)
波線を引くときに、波線の中央を基準に上下方向の位置を決めていたのですが、それだと欧文のフォントでは重なりすぎて見にくい場合がある、というバグです。
波線の上端を通常の下線の上端に揃えることでこの重なってしまう問題はほぼ修正されるはずですが、それでは日本語フォントの場合にinput
要素からはみ出してしまうことが多くなります(波線はTSFで多用されるので日本語にとっても重要)。
そこで、nsTextFrameThebes
から選択範囲用の下線を描画する時には利用できるベースラインから、行の下端までの高さをヒントとして渡すことにしました。もし、フォントの下線指定位置に波線を描画しようとしてはみ出す場合は、最高で、ベースライン位置まで持ち上げるようにするためです。
しかし、ここにはひとつ問題があり、nsTextFrameThebes
からは行の情報が正確には分かりません。行の詳しい情報はレイアウト中にのみ構築され、描画時には不要になっているのでデータは破棄されているためです。
ですが、それで正確な行の高さが分からないのは、vertical-align
が絡む、複雑なレイアウトをしている場合の話であって、多くの場合に問題となるinput
要素やtextarea
内では発生しない問題です。また、複雑なレイアウトを行っている場合、input
要素に比べて余裕があるはずなので、HTMLエディタで問題が発生する状況は無いのではないか、という前提において、シンプルな行高推測を行って、ヒントとすることにしました。
line-height
値を含めて行高を計算して、それが文字サイズに対して1倍以上ならそこから求められた高さをヒントとして利用します。それ以外の場合はどのみちはみ出してしまうので、1倍時の高さをヒントとして渡すように修正しています。
もしこの修正によってTSFモードで波線がはみ出してしまう場合を見つけたら、bugzilla-jpに報告をお願いします。