Expand description
要素がフレームのどこへ描かれるか、そして描かれるかどうかの判定(純粋関数)。
§なぜ切り出すか
「この要素は画面に出るはずなのに出ない」を調べるのに、 ビルド(約 10 分)と QEMU 実行(約 6 分)を何度も回していた。 座標変換と可視判定は入力と出力が決まっている純粋な計算で、 本来は単体試験で答えが出る。実行して確かめる対象ではない。
ここに切り出しておけば、「y_offset=1627 の要素は scroll_y=1269・ top_offset=40・win_h=549 のとき描かれるか」にビルドせずに答えられる。
§座標系
y_offset: ドキュメント先頭からの位置(レイアウトが決める)el_y: ビューポート内の位置 =y_offset - scroll_y + top_offsetdraw_y: 描画先バッファ内の位置 =win_y + el_y
top_offset はブラウザのツールバー等の高さで、
コンテンツはその下から始まる。
Functions§
- apply_
origin_ adjust transform-originによる描画位置の補正。- buffer_
y - ビューポート座標を描画先バッファ座標へ変換する。
- draw_
y_ as_ impl render.rsが実際に行っている描画座標の算出を、そのまま写したもの。- effective_
size transform: scale()を反映した実効サイズ。- is_
degenerate - 実効サイズが 0 以下で、塗っても 1 ピクセルも出ない状態か。
- is_
in_ clip - 描画先バッファのクリップ矩形に掛かっているか。
- is_
in_ viewport - 要素がビューポートに掛かっているか(描画対象か)。
- rect_
bottom_ as_ impl - 矩形の下端。
render.rsのy1_rect = (draw_y + eff_h as u32) as i32と同じ。 - viewport_
y - ドキュメント座標をビューポート座標へ変換する。