このグループのサンプルでは、GrapeCity.Documents.Layout.Composition 名前空間のクラスを使用して、
独自の Z オーダーやクリッピングを持つ複雑で柔軟な制約ベースのレイアウトを作成する方法を紹介しています。
- Surface(GrapeCity.Documents.Layout.Composition.Surface)
GrapeCity.Documents.Drawing.GcGraphics (GcPdfGraphics など)上に描画される View のコレクションを表します。
Surface には、レイアウトを実行(計算)する LayoutHost が含まれています。
また、Surface は、Layer や Visual を描画する機能を追加できます。
- Layer(GrapeCity.Documents.Layout.Composition.Layer)
Visual、Space、オプションのクリッピング、ネストされた Layer を持つ描画レイヤーを表します。
Layer は、Visual(下記参照)と同様の Draw デリゲートも持っています。
例えば、含まれる Visual 間の領域を塗りつぶすために使用できます。
-
View(Layer から派生した GrapeCity.Documents.Layout.Composition.View)
関連する LayoutView オブジェクトと変換を持つ Layer を表します。
View は、左上を原点とする直交座標系とデフォルトでは単位行列である変換行列を使用します(変更可能)。
View には、Visual、Space、ネストされた Layer を含めることができます。
-
Space(GrapeCity.Documents.Layout.Composition.Space)
関連する LayoutRect を持つ Layer または View 上のスペースを表します。
Space はレイアウト内の一部の領域を占めますが、視覚的な表現はなく、Z オーダーにも関与しません。
-
Visual(Space から派生した GrapeCity.Documents.Layout.Composition.Visual)
視覚的表現と Z オーダーを Space に追加します。Layer または View 上の図、テキスト、画像などを表します。
Visual(または Space)の位置とサイズは、それに関連する LayoutRect によって決定されます。
なお、Visual は、様々なコンテンツを描画するためのクラスの階層を形成していないことに注意してください。
代わりに、Visual には、描画に使用される Draw デリゲートがあります。
このデリゲートが(含む Layer によって)呼び出されると、対象のグラフィックスの変換行列が調整され、
Visual の LayoutRect の左上隅に (0, 0) が位置するようになります。
Visual.AsRectf() メソッドは、Visual の LayoutRect のサイズと同じ大きさの (0, 0) に位置する矩形を返します。
また、Visual.Width および Visual.Height プロパティもそれに応じて調整されます。
以下のレイアウト関連のクラスは、上記の構図関連のクラスと連携して動作します。
-
LayoutHost(GrapeCity.Documents.Layout.LayoutHost)
LayoutView オブジェクトの座標系のホストと原点を表します。含まれる LayoutView オブジェクトごとに、
LayoutHost は指定された制約に基づいてすべての LayoutRect と AnchorPoint の座標を計算します。
-
LayoutView(GrapeCity.Documents.Layout.LayoutView)
LayoutRect、Contour、AnchorPoint オブジェクトをホストする変換された Surface を表します。
LayoutView は、関連する変換行列(デフォルトでは単位行列)を持っています。
また、LayoutView は、制約から参照される固定された幅と高さを持つ View の矩形を定義します。
-
LayoutRect(GrapeCity.Documents.Layout.LayoutRect)
制約を含む矩形を表します。所有元の LayoutView に対して 90 度の倍数で回転させることができます。
レイアウトエンジンは、LayoutHost 内のすべての LayoutRect オブジェクトの位置とサイズを計算します。
これを可能にするために、各矩形の位置とサイズを明確に決定する制約を定義する必要があります。
-
Constraint(GrapeCity.Documents.Layout.Constraint and the derived classes)
制約とは、位置、角度、サイズが他の矩形のパラメータにどのように依存するかのルールを定義するものです。
個々のパラメータは個別に設定され、同じ LayoutView の矩形、または別の LayoutView の AnchorPoint や Contour に依存する場合があります。
同じターゲットパラメータに対して、複数の制約が定義されている場合もあります。
-
AnchorPoint(GrapeCity.Documents.Layout.AnchorPoint)
LayoutRect の制約のアンカーとして、または Contour オブジェクトの一部として使用されるポイントを表します。
AnchorPoint の X 座標と Y 座標は、絶対単位または所有元の LayoutView または LayoutRect に対する幅/高さのパーセントで設定されます。
-
Contour(GrapeCity.Documents.Layout.Contour)
LayoutView 上の閉じた図形を表します。Contour は、同じ LayoutView に属する AnchorPoints で構成されます。
また、Contour は View.LayoutView.CreateContour() を使用して作成されます。
Contour は、含まれる View やその Visual または Space に対して相対的なアンカーポイントを持つことができます。
制約は、Surface 上の任意の View(または LayoutHost 内の任意の LayoutView )の Contour に対して相対的に指定できます。
これは、例えば、楕円の中にテキストを描画するのに使用することができます。
レイアウトを作成するための主な手順は以下のとおりです。
- レイアウトを含む Surface を作成します。
- Surface を使用して 1 つ以上の View を作成します。
各 View はサイズと変換行列を持っています。
- View に Visual や Space を追加します。
- View を使用して、1 つ以上の Visual を作成します。
Visual には通常、関連する LayoutRect があります。
なお、制約によって、矩形のサイズと位置が明確に決定される必要があり、そうでない場合はエラーが発生します。
また、Visual に LayoutRect がない場合、View の座標系のアンカーポイントに描画するために使用されます。
-
また、制約で定義された空白を View に追加する必要がある場合、View を使用して Space オブジェクトを追加します。
Space は、基本的に Draw メソッドを持たない Visual です。
なお、Space はコンテナではなく、空白を追加することだけが目的であることに注意してください。
- 各 Visual と Space の LayoutRect の制約を指定します。
制約は、同じ View 内の別の Visual に対する相対的なもの、または View 自体に対する相対的なものです。
唯一の例外は、別の View の AnchorPoint に対する相対的な制約、または別の View の Contour に対する相対的な制約を指定することができることです。
GrapeCity.Documents.Layout.Composition のサンプルは以下のとおりです。