UNIVERSE アプリをフルスクリーンモード対応にする方法
■概要
ルート( SFZRoot )に設定する描画エンジンの初期化時( SFYRenderer::Initialize 関数呼び出し時)にパラメーターとしてレスポンダ空間を渡します。 このとき、SFBDisplay::SetPrefs 関数などを利用して携帯電話端末のフルスクリーン領域をレスポンダ空間に設定することが可能です。
■mif ファイルの設定など
SFBDisplay::SetPrefs 関数を使うためには、mif ファイルの AEEPRIVID_DISPSETTINGS 特権の設定が必要です。 この特権は、mif エディタで「依存ファイル」のタブを選択し、BREW SDK のインクルードファイルに含まれている外部クラス 「DISPSETTINGS (0x0103081D)」 を追加する必要があります。
なお、フルスクリーンモードはシミュレーターでは対応していません。動作確認は実機で行う必要があります。 また、フルスクリーンモードに対応していない機種も存在します。
■レスポンダ空間としてフルスクリーン領域を設定するコード
ウィンドウ、ダイアログ、メニューやフレームを配置する汎用ルート[SFZRoot]の実装コードと異なる点は太字の部分だけです。
SFCError USRApplication::Make(Void) { SFCError error(SFERR_NO_ERROR); // 配信エンジンを作成する 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) { display->ResetClipRect(); // 描画エンジンを作成する // SFBDisplay::SetPrefs 関数で設定したフルスクリーン領域が //レスポンダ空間として設定される error = _renderer.Initialize(SFXGraphics::GetDeviceRectangle()); if (error == SFERR_NO_ERROR) { // ルートを作成する if ((_root = SFZRoot::NewInstance(&error)) != null) { // ルートに配信エンジンを登録する _root->SetDistributer(&_distributer); // ルートに描画エンジンを登録する _root->SetRenderer(&_renderer); // レスポンダ空間上にルートの実領域を設定する _root->SetRealBound(_root->GetSuitableBound()); // ルートの状態を「可視+活性+操作可能+フォーカス」 // にまとめて設定する _root->SetState(true, true, true, true); } } } } } return error; }
■レスポンダ空間
レスポンダ空間とは、 描画エンジンに関連付けられたレスポンダツリーを描画する画面上の矩形領域のことです。
SFYRenderer::Initialize 関数を利用して描画エンジンを初期化するときに設定します。 レスポンダ空間設定後は、動的に拡大したり縮小したりできません。
多くの場合、レスポンダ空間として画面の全領域を設定します。
□サンプルコードダウンロード( fullscreen.zip : 40.3kb )
---------------------------------------------------------------------------------------------------------
■SFYApplication を継承するアプリケーションのフルスクリーン対応:
SFYApplication がデフォルトで保持するルート( SFZRoot )のレスポンダ空間をフルスクリーン対応にするには、以下のコードをアプリケーションクラスのコンストラクタに追加すれば、フルスクリーン対応が可能です。
// アプリケーションクラスのコンストラクタ USRApplication::USRApplication(Void) static_throws { SFXGraphicsPtr graphics; SFBDisplaySmp display; SFBBitmapSmp bitmap; AEEBitmapInfo info = {0}; SFYRendererPtr renderer; SFZRootSmp root; SFCError error(SFERR_NO_ERROR); // レスポンダシステムの初期化 if ((graphics = SFXGraphics::GetInstance()) != null) { display = graphics->GetSFBDisplay(); // 携帯画面サイズを変更する (ピクトあり、フルスクリーン) if ((error = display->SetPrefs("a:1,w:*,h:*")) == SFERR_NO_ERROR) { 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) { // ルートの領域を再設定する root->SetRealBound(root->GetSuitableBound()); } } } } } // その他、初期化処理を記述する return error; }