Skip to main content

Module paint_cull

Module paint_cull 

Source
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_offset
  • draw_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.rsy1_rect = (draw_y + eff_h as u32) as i32 と同じ。
viewport_y
ドキュメント座標をビューポート座標へ変換する。