![]() ![]() ![]() ![]() |
SophiaFramework UNIVERSE 5.2 |
レスポンダツリーを描画するための レスポンダ空間は、 描画エンジンをルート(SFZRoot)に接続する直前に呼び出す SFYRenderer::Initialize 関数の引数に指定します。
携帯電話の画面領域全体にレスポンダツリーを描画するには、 以下のサンプルコードのように SFBDisplay::SetPrefs 関数を使用してフルスクリーンモードの設定をしてから、 画面の矩形領域を引数に指定して SFYRenderer::Initialize 関数を呼び出します。
例 9.48. レスポンダ空間にフルスクリーン領域を設定する
SFCError USRApplication::Make(Void) { SFCError error(SFERR_NO_ERROR); // テキスト入力コントロールエディタを作成する if ((_editor = ::new SFXEditor) != null) { // 配信エンジンを初期化する error = _distributer.Initialize(); if (error == SFERR_NO_ERROR) { // SFBDisplay インスタンスを取得する if ((graphics = SFXGraphics::GetInstance()) != null) { display = graphics->GetSFBDisplay(); // 表示画面サイズを変更する (ピクト行:表示、画面の高さ:最大[フルスクリーン]) if ((error = display->SetPrefs("a:1,w:*,h:*")) == SFERR_NO_ERROR) { // SFBDisplay インスタンスのクリッピング矩形領域をリセットする // ※クリッピング矩形領域外での描画処理は画面上に表示されない display->ResetClipRect(); // 描画エンジンを初期化する // ※1. 引数に指定した「携帯電話の画面領域(フルスクリーン領域)」をレスポンダ空間として設定している // ※2. SFXGraphics::GetDeviceRectangle() は SFBDisplay::SetPrefs() で設定したフルスクリーン領域を返す error = _renderer.Initialize(SFXGraphics::GetDeviceRectangle()); if (error == SFERR_NO_ERROR) { // ルートを作成する if ((_root = SFZRoot::NewInstance(&error)) != null) { // ルートに配信エンジンを設定する _root->SetDistributer(&_distributer); // ルートに描画エンジンを設定する _root->SetRenderer(&_renderer); // ルートの実領域をレスポンダ空間[携帯電話の画面領域(フルスクリーン領域)]に設定する // ※1. 親レスポンダが存在しないルートはレスポンダ空間内に実領域を設定する // ※2. _root->GetSuitableBound() はレスポンダ空間(=「携帯電話の画面領域(フルスクリーン領域)」)を返す // ※3. ルートの実領域は「携帯電話の画面領域(フルスクリーン領域)」に設定される _root->SetRealBound(_root->GetSuitableBound()); // ルートの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する _root->SetState(true, true, true, true); } } } } } } else { error = SFERR_NO_MEMORY; } return error; }
![]() |
注意 |
---|---|
ウィンドウ、ダイアログ、メニューを配置する汎用ルート[SFZRoot]の実装コードと異なる点は太字の部分だけです。 |
![]() |
レスポンダ空間 |
---|---|
レスポンダ空間とは、 描画エンジンに関連付けられた、 レスポンダツリーを描画する画面上の矩形領域のことです。 レスポンダ空間は、描画エンジンを初期化する SFYRenderer::Initialize 関数を使用して設定します。 この初期化の後、レスポンダ空間は動的に拡大したり、縮小することはできません。 デフォルトでは、レスポンダ空間は端末の全画面の矩形領域に設定されます。 |
![]() |
mif ファイルの設定など |
---|---|
SFBDisplay::SetPrefs 関数を利用するには、 mif ファイルの AEEPRIVID_DISPSETTINGS 特権の設定が必要です。 この特権は、mif エディタで「依存ファイル」のタブを選択し、BREW SDK のインクルードファイルに含まれている外部クラス 「DISPSETTINGS (0x0103081D)」 を追加する必要があります。 なお、フルスクリーンモードはシミュレータでは対応していません(2010年1月14日現在)。動作確認は実機で行う必要があります。 また、フルスクリーンモードに対応していない機種も存在します。 |
全体のサンプルコードはこちら ( fullscreen.zip: 40.3kb ) にあります。
■SFYApplication を継承するアプリケーションクラスのフルスクリーン対応
SFYApplication がデフォルトで保持するルート(SFZRoot)のレスポンダ空間をフルスクリーン対応にするには、 以下のコードをアプリケーションクラスのコンストラクタに追加します。
全体のサンプルコードはこちら ( fullscreen_sfy.zip: 40.1kb ) にあります。
例 9.49. SFYApplication を継承するアプリケーションクラスのフルスクリーン対応
// アプリケーションクラスのコンストラクタ USRApplication::USRApplication(Void) static_throws { SFXGraphicsPtr graphics; SFBDisplaySmp display; SFBBitmapSmp bitmap; AEEBitmapInfo info = {0}; SFYRendererPtr _renderer; SFZRootSmp _root; SFCError error(SFERR_NO_ERROR); // レスポンダシステムの初期化 // SFXGraphics インスタンスを取得する if ((graphics = SFXGraphics::GetInstance()) != null) { // SFBDisplay インスタンスを取得する display = graphics->GetSFBDisplay(); // 表示画面サイズを変更する (ピクト行:表示、画面の高さ:最大[フルスクリーン]) if ((error = display->SetPrefs("a:1,w:*,h:*")) == SFERR_NO_ERROR) { // SFBDisplay インスタンスのクリッピング矩形領域をリセットする // ※クリッピング矩形領域外での描画処理は画面上に表示されない display->ResetClipRect(); // 携帯画面のビットマップを取得する if ((bitmap = display->GetDeviceBitmap()) != null) { // 携帯画面のビットマップのサイズを取得する bitmap->GetInfo(&info); // 描画エンジンを取得する if ((_renderer = GetRenderer()) != null) { // 描画エンジンを初期化する // ※引数に指定した「携帯電話の画面領域(フルスクリーン領域)」をレスポンダ空間として設定している _renderer->Initialize(SFXRectangle(0, 0, static_cast<SInt16>(info.cx), static_cast<SInt16>(info.cy))); // ルートを取得する if ((_root = static_pointer_cast<SFZRoot>(GetRoot())) != null) { // ルートの実領域をレスポンダ空間[携帯電話の画面領域(フルスクリーン領域)]に設定する // ※1. 親レスポンダが存在しないルートはレスポンダ空間内に実領域を設定する // ※2. _root->GetSuitableBound() はレスポンダ空間(=「携帯電話の画面領域(フルスクリーン領域)」)を返す // ※3. ルートの実領域は「携帯電話の画面領域(フルスクリーン領域)」に設定される _root->SetRealBound(_root->GetSuitableBound()); } } } } } // その他、初期化処理を記述する return error; }
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]() ![]() |