ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

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

サンプルコードダウンロード( fullscreen_sfy.zip : 40.1kb )