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;
}









