行間が広いとUnderlineTextDecorationの下線が不正になる
行間 (IView.LinePadding) を広く空けると UnderlineTextDecoration による下線の装飾が正しく描画されない。
下線(UnderlineTextDecorationの装飾)を描画するY座標の計算ミスが原因である。
UnderlineTextDecorationの装飾下線は、各行の文字列矩形の下端に内接する下線としている。するとそれを描画すべきY座標は、lineTopY を各行の行矩形(文字列矩形、行間などを含む)の上端Y座標、linePadding を行間 (IView.LinePadding)、lineHeight を行高 (IView.LineHeight)、そして w を下線の幅(下線を細い矩形として見た場合は高さ)としたとき、次の式で求められる:
lineTopY + (linePadding / 2) + lineHeight - w
しかし、次の誤った数式で求めていた:
lineTopY + lineHeight - w
両者の差は (linePadding / 2) であるため、行間を空けるごとに描画が不正になっていくし、逆に行間が狭ければ描画は正しく行われる動作となっていた。
原因の章に記した正しい計算式で、下線のY座標を算出するよう修正する。
本件は、フォーラム 公開討議 [#78571] にて user:nabebanosdn さんよりご報告いただいた不具合である。
行間を極端に広くするとUnderlineTextDecoration が上方にずれるようです(ver. 1.7.12) OutlineTextDecoration や BgColorTextDecoration は上下に広がるため 問題ありません 打ち消し線が欲しいと思い試行錯誤しているときに気づいたものですが こちらの方は OutlineTextDecoration の定義を利用することで うまく行きました
https://osdn.jp/projects/azuki/forums/15322/37967/
r1053 にて修正。
現象
行間 (IView.LinePadding) を広く空けると UnderlineTextDecoration による下線の装飾が正しく描画されない。
原因
下線(UnderlineTextDecorationの装飾)を描画するY座標の計算ミスが原因である。
UnderlineTextDecorationの装飾下線は、各行の文字列矩形の下端に内接する下線としている。するとそれを描画すべきY座標は、lineTopY を各行の行矩形(文字列矩形、行間などを含む)の上端Y座標、linePadding を行間 (IView.LinePadding)、lineHeight を行高 (IView.LineHeight)、そして w を下線の幅(下線を細い矩形として見た場合は高さ)としたとき、次の式で求められる:
しかし、次の誤った数式で求めていた:
両者の差は (linePadding / 2) であるため、行間を空けるごとに描画が不正になっていくし、逆に行間が狭ければ描画は正しく行われる動作となっていた。
対策
原因の章に記した正しい計算式で、下線のY座標を算出するよう修正する。
備考
本件は、フォーラム 公開討議 [#78571] にて user:nabebanosdn さんよりご報告いただいた不具合である。
https://osdn.jp/projects/azuki/forums/15322/37967/