デザインゴールRed/View(または単にView)コンポーネントはプログラミング言語Redのグラフィックシステムです。そのデザインゴールは以下の通りです。双方向バインディングのサポートを用意にするプラットフォームを横断して異なるバックエンドを提供するOS、サードパーティ、カスタムのウィジェットセットをサポートパフォーマンスのオーバーヘッドが少ない仮想ツリーはフェイスオブジェクトを使って構築されます。各フェイスオブジェクトは双方向バインディングでディスプレイ上のグラフィックコンポーネントにマップされます。テンプレートオブジェクトのクローンです。time!いいえ全てフェイスのタイマー。イベントをフェイスに送ります。その他のフェイスの種類ごとのフラグはそれぞれのセクションに記載されています。スクリーンのピクセルで指定します。値はビューエンジンによって設定されます。名を与える必要があります。フィールドは変更できません。オプションファセットオプションファセットは特定の振る舞いのために使われる任意のファセットです。'down、'mid-down、alt-down、'aux-down。テンプレートオブジェクトのクローンです。1つのフォントオブジェクトは1つ以上のフェイスから参照されることが可能です。これにより、複数のフェイスのフォントプロパティを一ヶ所でコントロールすることが可能になります。フィールドは現在のところ正しく動きません。全てのフィールドの値は将来的にはオプショナルになる予定です。テンプレートオブジェクトのクローンです。1つのparaオブジェクトは1つ以上のフェイスから参照されることが可能です。これにより複数のフェイスのparaプロパティを一ヶ所でコントロールすることが可能になります。セットすることができます。フェイスツリーフェイスはディスプレイ上の階層状のグラフィックコンポーネントにマップされたツリー構造で構成されます。ツリーの関係は以下の物で定義されます。内のフェイスオブジェクトの順番は重要です。グラフィックオブジェクトのZオーダーは順番どおりにマップされます。先頭のフェイスは他の全てのフェイスの後ろに表示され、末尾のフェイスは最前面に表示されます。フェイスのみ表示できます。フェイスに接続される必要があります。型は最もベーシックなフェイスのタイプであり、最も多目的なものでもあります。Facet説明type'baseimageimage!の値を指定できます。アルファチャンネルがサポートされます。color背景色を指定します。アルファチャンネルがサポートされます。textフェイスの中に表示されるオプションのテキストdrawDrawプリミティブは透過処理を完全にサポートします。アルファチャンネルコンポーネントで指定します。完全な透明になります。このフェイスタイプは全てのカスタムグラフィックコンポーネントの実装で使用されるべきです。型はスタティックなラベルを表示します。フィールドとリアルタイムに同期します。`options/defaultで指定された値のいずれかになります。ファセットには以下のプロパティをセットできます。任意の値をセットできます。ロードできない値だった時などです。Buttonシンプルなボタンを表現します。ファセット説明type'buttontextボタンのラベルテキストimageボタンに表示されるイメージ。テキストと一緒に表示できます。イベントタイプハンドラ説明clickon-clickユーザーがボタンをクリックした時に発生します。Checkチェックボックスを表現します。オプションで左側か右側にラベルを表示できます。(右側)に表示されるかを設定します。チェックなし(デフォルト値)イベントタイプハンドラ説明changeon-changeユーザー操作によりチェック状態が変更された時に発生します。Radioこのタイプはラジオボタンを表現します。オプションでラベルテキストを左右のどちらかに表示できます。1つのペイン上のラジオボタンは1つだけがチェック状態になれます。(右側)に表示されるかをコントロールします。チェックなし(デフォルト)イベントタイプハンドラ説明changeon-changeラジオボタンのチェック状態がユーザー操作により変更された場合に発生します。Fieldこのタイプは1行の入力フィールドを表現します。ファセット説明type'fieldtext入力テキスト。依存するGUIフレームワークによるエッジデコレーションを除去します。フィールドとリアルタイムに同期します。`options/defaultで指定された値のいずれかになります。ファセットには以下のプロパティをセットできます。任意の値をセットできます。ロードできない値だった時などです。入力テキストの一部をハイライトするために将来使用される予定です。イベントタイプハンドラ説明enteron-enterEnterキーがフィールド内で押されるたびに発生します。changeon-changeフィールド内で入力が行われるたびに発生します。keyon-keyフィールド内でキーが押されるたびに発生します。Areaこのタイプは複数行の入力フィールドを表現します。Facet説明type'areatext入力テキスト。依存するGUIフレームワークによるエッジデコレーションを除去します。入力テキストの一部をハイライトするために将来使用される予定です。オプションでコントロール可能になる予定です)イベントタイプハンドラ説明changeon-changeフィールド内で入力が行われるたびに発生します。keyon-keyフィールド内でキーが押されるたびに発生します。Text-listこのタイプは固定フレームのテキスト文字列の垂直方向のリストを表現します。コンテンツがフレームにフィットしない場合、垂直方向のスクロールバーが自動的に表示されます。hash!)selected選択された文字列のインデックス。選択値がない場合はnoneになります。読み取り、書き込み可能ですイベントタイプハンドラ説明selecton-selectリスト内のエントリが選択された時に発生します。選択エントリのインデックスを示します。イベントの後に発生します。選択エントリのインデックスを示します。Notes:表示されるアイテムの数は現在ユーザーによって指定することができません。Drop-list垂直方向のテキスト文字列のリストを表現します。折りたたみ可能なフレームで表示されます。コンテンツがフレームにフィットしない場合、垂直方向のスクロールバーが自動的に表示されます。hash!)selected選択された文字列のインデックス。選択値がない場合はnoneになります。読み取り書き込みが可能です。ファセットは任意の値を受け取りますが、文字列値だけがリストに追加され表示されます。文字列以外の型の追加の値は文字列をキーとして関連付けされた配列を作ることで使うことができます。ファセット内ではなく)リスト内の選択された文字列の位置を示します。イベントタイプハンドラ説明selecton-selectリスト内のエントリが選択された時に発生します。選択エントリのインデックスを示します。イベントの後に発生します。選択エントリのインデックスを示します。Notes:表示されるアイテムの数は現在のところユーザーが指定することはできません。Drop-down折りたたみ可能なフレーム内のテキスト文字列の垂直方向のリストのエディットを表現します。フレームにコンテンツがフィットしない場合、垂直方向のスクロールバーが自動的に表示されます。hash!)selected選択された文字列のインデックス。選択値がない場合はnoneになります。読み取り書き込みが可能です。ファセットは任意の値を受け取りますが、文字列値だけがリストに追加され表示されます。文字列以外の型の追加の値は文字列をキーとして関連付けされた配列を作ることで使うことができます。ファセット内ではなく)リスト内の選択された文字列の位置を示します。イベントタイプハンドラ説明selecton-selectリスト内のエントリが選択された時に発生します。選択エントリのインデックスを示します。イベントの後に発生します。選択エントリのインデックスを示します。Notes:表示されるアイテムの数は現在のところユーザーが指定することはできません。Progress水平方向または垂直方向のプログレスバーを表現します。して使われた場合、値は0.0から1.0の間である必要があります。Slider水平または垂直方向のスライダーを表現します。して使われた場合、値は0.0から1.0の間である必要があります。Cameraビデオカメラフィードを表示するために使われます。リストの中から表示するために選択されたカメラ。整数のインデックスです。設定されている場合、カメラフィードは無効化されます。呼ばれた時に取得されます。使用することで、カメラのコンテンツを取得することができます。Panelパネルは他のフェイスのコンテナです。Facet説明type'panelpane子フェイスのブロック。ブロック内の順番は表示されるZオーダーとなります。座標は親パネルの左上のコーナーからの相対位置になります。子フェイスはパネルのフレームに合わせてクリッピングされます。Tab-panelタブパネルは常にいずれか一枚だけが表示されるパネルのリストです。パネルの名前のリストはタブ名として使われ、選択パネルを変更するために使われます。Facet説明type'tab-paneldataタブ名のブロック(文字列の値)paneタブのリストに対応するパネルのリスト(block!)selected選択されているパネルのインデックスまたはnone。読み取り、書き込みが可能です(integer!)イベントタイプハンドラ説明changeon-changeユーザーが新しいタブを選択した時に発生します。新しく選択されたタブのインデックスを保持します。プロパティはこのイベントの直後に更新されます。ファセットの両方が正しい順番で要素を持っている必要があります。指定されたタブよりも多くのパネルを持っていた場合、多い文は無視されます。リストから削除される必要があります。WindowOSのデスクトップに表示されるウィンドウを表現します。Facet説明type'windowtextウィンドウタイトル(string!)offsetデスクトップスクリーン上の左上のコーナーからのオフセット。ウィンドウの外枠のデコレーションは含みません。(pair!)sizeウィンドウサイズ。ウィンドウの外枠のデコレーションは含みません。(pair!)flagsウィンドウ独自の機能のオン/オフを行います(block!)menuウィンドウのメニューバーを表示します。ウィンドウをモーダルにし、前に開かれたウィンドウを無効化します。キーワードをメニューのスペックブロックで使った場合、デフォルトのメニューバーではなく、ウィンドウ内のコンテキストメニューに強制的に変更になります。Screenコンピュータに接続されたグラフィックディスプレイユニット(通常はモニタ)を表現しますFacet説明type'screensizeピクセル単位のスクリーンサイズ。起動時にビューエンジンによってセットされます(pair!)paneスクリーンに表示されるウィンドウのリスト(block!)全ての表示されているウィンドウフェイスはスクリーンフェイスの子どもである必要があります。Group-boxグループボックスは他のフェイスのコンテナとなり、周囲を枠線で囲まれます。ファセットがサポートされたら削除されます。Facet説明type'group-boxpane子フェイスのブロック。ブロック内の順序は表示されるZオーダーになります。座標はグループボックスの左上のコーナーからの相対位置になります。子フェイスはグループボックスのフレームに収まるようにクリッピングされます。プロトタイプからフェイスオブジェクトが生成されますスクリーンフェイスに接続されているフェイスツリー内にフェイスオブジェクトを挿入します。使用されると、スクリーン上にフェイスオブジェクトがレンダリングされます。このタイミングでシステムリソースが確保されます。ブロックがセットされます。ディスプレイから取り除くためにペインからフェイスを削除します。ガベージコレクタが参照されなくなったフェイスが保持しているシステムリソースの解放を行います。関数が提供される予定です。face!オブジェクトのクローンまたはフェイスオブジェクトか名前(word!の値を使います)のブロック説明この関数はスクリーン上のフェイスやフェイスのリストを更新するために使われます。スクリーンフェイスに接続されたフェイスツリー内で参照されているフェイスだけが適切にレンダリングされます。ファセットがセットされグラフィックコンポーネントがスクリーン上に表示されます。以降の呼び出しではフェイスオブジェクトに対する変更がスクリーンに反映されます。子フェイスにも再帰的に適用されます。ファセットはユーザーによって使用されるべきではありません。OSのAPIがユーザーによって直接的に呼び出しされたり、ビューエンジンの振る舞いが変更される必要がある場合はアクセスすることもあり得ます。(drag-offset)フェイスドラッギングモードに入った場合のマウスカーソルの開始オフセット位置を保持しています。フィールドはクリアされます。遅延アップデートビューエンジンはフェイスツリーに変更が行われた場合に、表示をアップデートするモードを2つ持っています。呼び出しされるまでスクリーンには反映しません。wordによってコントロールされます。セットされている場合、リアルタイムアップデートモードになります(デフォルトのモードです)。セットされている場合、ビューエンジンは全ての更新を遅延します。リアルタイムアップデートがデフォルトであるのは以下の理由からです。呼び出す必要性をなくし、ソースコードをシンプル、簡潔にするため初心者の学習のオーバーヘッドを減らすためシンプルなアプリケーションやプロトタイプアプリケーションにはリアルタイムアップデートで十分なためコンソールからの試行錯誤を簡単にするため遅延モードは何らかの問題を避けるためや、ベストパフォーマンスの追求がゴールとなる場合のため、スクリーン上に多くの変更を同時に行います。Notes:これは遅延モードしかサポートしていないRebol/Viewエンジンとの大きな違いになります。双方向バインディングフェイスオブジェクトはファセットの中で使われているseriesとオブジェクトをバインドするRedのオーナーシップシステムに依拠しています。ファセットの変更(ネストしたファセットの変更であっても)はフェイスオブジェクトに検知され、現在の同期モード(リアルタイムまたは遅延)に従って処理されます。一方で、レンダリングされたグラフィックオブジェクトへの変更は、対応するファセットに即座に反映されます。ファセットの値にライブモードで反映されます。この双方向バインディングにより、グラフィックオブジェクトとプログラマのやり取りには特別なAPIを使う必要がなく、シンプルになります。seriesアクションを使ってファセットを更新するだけで十分です。入力タイプ発生要因downマウスマウスの左ボタンが押されたupマウスマウスの左ボタンが離されたmid-downマウスマウスの真ん中のボタンが押されたmid-upマウスマウスの真ん中のボタンが離されたalt-downマウスマウスの右ボタンが押されたalt-upマウスマウスの右ボタンが離されたaux-downマウスマウスの補助ボタンが押されたaux-upマウスマウスの補助ボタンが離されたdrag-startマウスフェイスのドラッギングが始まったdragマウスフェイスがドラッグされているdropマウスフェイスのドラッグがドロップされたclickマウスマウスの左ボタンによるクリック(ボタンウィジェットのみ)dbl-clickマウスマウスの左ボタンによるダブルクリックoverマウスマウスカーソルがフェイス上を通過した。このイベントはマウスがフェイス上に入った場合と、出ていった場合の2回発生します。フラグを持っている場合、全ての中間段階のイベントも発生します。XPでは発生しません。