Areaのスクロールと実践例

English

Area.new(handler, width, height)は、指定したコンテンツサイズを持つスクロールAreaを作ります。通常のArea.new(handler)と異なり、params.area_widthとparams.area_heightは使いません。コンテンツサイズはアプリケーション側で管理します。

content_width = 2_000
content_height = 1_200
area = UIng::Area.new(handler, content_width, content_height)

# コンテンツが広がった後にサイズを更新する
content_width += 400
area.set_size(content_width, content_height)

# 特定の矩形が見える位置まで移動する
area.scroll_to(200, 100, 400, 300)

drawではクリップ矩形を使って可視領域だけを描画します。大量の図形・画像・文字列を扱う場合は、静的なPathやBrushを再利用し、可視範囲外の要素をスキップします。

次に読む作例

Areaの規模が大きくなったら、モデル、入力、描画を別々の型またはファイルに分けます。描画関数は状態を読み取るだけに保つと、再描画の原因とリソースの寿命を追いやすくなります。