コンテンツにスキップ

PaintingContext クラス

RenderObjectの描画命令を画像レイヤーと合成レイヤーへ記録します。

名前空間: FloatSoda.RenderObjects
アセンブリ: FloatSoda.dll

public class PaintingContext

object ← PaintingContext

object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()

一つのインスタンスは一つのコンテナレイヤーへ記録し、必要に応じて子用のコンテキストを生成します。

RenderObjectの描画命令を画像レイヤーと合成レイヤーへ記録します。

public PaintingContext(ContainerLayer containerLayer, SKRect estimatedBounds)

containerLayer ContainerLayer

生成した子レイヤーを追加するコンテナレイヤー。

estimatedBounds SKRect

画像の記録に使用する推定描画範囲。

一つのインスタンスは一つのコンテナレイヤーへ記録し、必要に応じて子用のコンテキストを生成します。

描画命令を記録するキャンバスを取得します。

public SKCanvas Canvas { get; }

SKCanvas

最初の取得時に画像レイヤーと記録器を生成し、対象のコンテナレイヤーへ画像レイヤーを追加します。

再描画境界である子のレイヤーを現在のレイヤーツリーへ合成します。

public void CompositeChild(RenderObject child, Offset offset)

child RenderObject

独立した合成レイヤーを持つ子。

offset Offset

親の座標系における子の描画原点。

子が描画Dirtyの場合は先に子のレイヤーを再描画します。 子のレイヤーが移動レイヤーでない場合は現在のレイヤーツリーへ追加しません。

子の描画内容を現在のレイヤーツリーへ記録します。

public void PaintChild(RenderObject child, Offset offset)

child RenderObject

描画する子。

offset Offset

親の座標系における子の描画原点。

子が再描画境界の場合は現在の画像記録を確定し、子の独立したレイヤーを合成します。 境界でない場合は子の描画Dirtyを解除して、現在のコンテキストへ直接描画します。

PushClipPath(Offset, SKRect, SKPath, Action<PaintingContext, Offset>, Clip, ClipPathLayer?)

Section titled “PushClipPath(Offset, SKRect, SKPath, Action<PaintingContext, Offset>, Clip, ClipPathLayer?)”

任意形状で子の描画を切り抜く合成レイヤーを追加します。

public ClipPathLayer PushClipPath(Offset offset, SKRect bounds, SKPath clipPath, Action<PaintingContext, Offset> painter, Clip clipBehavior = Clip.Antialias, ClipPathLayer? oldLayer = null)

offset Offset

親の座標系における子の描画原点。

bounds SKRect

子のローカル座標系における推定描画範囲。

clipPath SKPath

子のローカル座標系で定義された切り抜き形状。元の形状は変更しません。

painter Action<PaintingContext, Offset>

切り抜きレイヤー内へ描画命令を記録する処理。

clipBehavior Clip

境界の描画方法。

oldLayer ClipPathLayer?

再利用する既存レイヤー。新しく生成する場合はnullです。

ClipPathLayer

描画内容を保持するパス切り抜きレイヤー。

描画範囲と切り抜き形状をoffsetだけ移動して親の座標系へ変換します。

PushClipRect(Offset, SKRect, Action<PaintingContext, Offset>, Clip, ClipRectLayer?)

Section titled “PushClipRect(Offset, SKRect, Action<PaintingContext, Offset>, Clip, ClipRectLayer?)”

矩形で子の描画を切り抜く合成レイヤーを追加します。

public ClipRectLayer PushClipRect(Offset offset, SKRect clipRect, Action<PaintingContext, Offset> painter, Clip clipBehavior = Clip.Antialias, ClipRectLayer? oldLayer = null)

offset Offset

親の座標系における子の描画原点。

clipRect SKRect

子のローカル座標系で定義された切り抜き矩形。

painter Action<PaintingContext, Offset>

切り抜きレイヤー内へ描画命令を記録する処理。

clipBehavior Clip

境界の描画方法。

oldLayer ClipRectLayer?

再利用する既存レイヤー。新しく生成する場合はnullです。

ClipRectLayer

描画内容を保持する矩形切り抜きレイヤー。

切り抜き矩形をoffsetだけ移動して親の座標系へ変換します。

PushClipRoundRect(Offset, SKRect, SKRoundRect, Action<PaintingContext, Offset>, Clip, ClipRoundRectLayer?)

Section titled “PushClipRoundRect(Offset, SKRect, SKRoundRect, Action<PaintingContext, Offset>, Clip, ClipRoundRectLayer?)”

角丸矩形で子の描画を切り抜く合成レイヤーを追加します。

public ClipRoundRectLayer PushClipRoundRect(Offset offset, SKRect bounds, SKRoundRect clipRect, Action<PaintingContext, Offset> painter, Clip clipBehavior = Clip.Antialias, ClipRoundRectLayer? oldLayer = null)

offset Offset

親の座標系における子の描画原点。

bounds SKRect

子のローカル座標系における推定描画範囲。

clipRect SKRoundRect

子のローカル座標系で定義された角丸矩形。

painter Action<PaintingContext, Offset>

切り抜きレイヤー内へ描画命令を記録する処理。

clipBehavior Clip

境界の描画方法。

oldLayer ClipRoundRectLayer?

再利用する既存レイヤー。新しく生成する場合はnullです。

ClipRoundRectLayer

描画内容を保持する角丸矩形切り抜きレイヤー。

切り抜き矩形をoffsetだけ移動して親の座標系へ変換します。

PushLayer(ContainerLayer, Action<PaintingContext, Offset>, Offset, SKRect?)

Section titled “PushLayer(ContainerLayer, Action<PaintingContext, Offset>, Offset, SKRect?)”

子のコンテナレイヤーへ描画内容を記録します。

public void PushLayer(ContainerLayer childLayer, Action<PaintingContext, Offset> painter, Offset offset, SKRect? childPaintBounds = null)

childLayer ContainerLayer

描画内容を保持する子レイヤー。既存の子レイヤーは消去して再利用されます。

painter Action<PaintingContext, Offset>

子用の描画コンテキストへ描画命令を記録する処理。

offset Offset

親の座標系における子の描画原点。

childPaintBounds SKRect?

子の推定描画範囲。省略した場合はこのコンテキストの推定描画範囲を使用します。

現在の画像記録を確定してから子レイヤーを対象のコンテナへ追加します。 描画処理の完了後、子コンテキストに残る画像記録も確定します。

PushOpacity(Offset, byte, Action<PaintingContext, Offset>, OpacityLayer?)

Section titled “PushOpacity(Offset, byte, Action<PaintingContext, Offset>, OpacityLayer?)”

子の描画へ不透明度を適用する合成レイヤーを追加します。

public OpacityLayer PushOpacity(Offset offset, byte alpha, Action<PaintingContext, Offset> painter, OpacityLayer? oldLayer = null)

offset Offset

親の座標系における子の描画原点。

alpha byte

不透明度。0は完全な透明、255は完全な不透明を表します。

painter Action<PaintingContext, Offset>

不透明度レイヤー内へ描画命令を記録する処理。

oldLayer OpacityLayer?

再利用する既存レイヤー。新しく生成する場合はnullです。

OpacityLayer

描画内容を保持する不透明度レイヤー。

PushTransform(SKMatrix, Action<PaintingContext, Offset>, TransformLayer?)

Section titled “PushTransform(SKMatrix, Action<PaintingContext, Offset>, TransformLayer?)”

子の描画へ2次元変換を適用する合成レイヤーを追加します。

public TransformLayer PushTransform(SKMatrix transform, Action<PaintingContext, Offset> painter, TransformLayer? oldLayer = null)

transform SKMatrix

子のローカル座標から親の座標へ変換する行列。

painter Action<PaintingContext, Offset>

変換レイヤー内へ描画命令を記録する処理。

oldLayer TransformLayer?

再利用する既存レイヤー。新しく生成する場合はnullです。

TransformLayer

描画内容を保持する変換レイヤー。

再描画境界であるRenderObjectの合成レイヤーを再構築します。

public static void RepaintCompositedChild(RenderObject child)

child RenderObject

再描画するRenderObject。

既存の移動レイヤーがあれば子レイヤーを消去して再利用し、なければ新しく生成してLayerへ設定します。 描画前に対象の描画Dirtyを解除し、対象の原点を基準として描画内容を記録します。

描画記録中であれば画像を確定して記録を終了します。

public void StopRecordingIfNeeded()

記録していない場合は何もしません。確定した画像は現在の画像レイヤーへ設定されます。