前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

9.10. ルート(応用編)

9.10.1. レスポンダ空間をフルスクリーンモードにする方法

レスポンダ空間をフルスクリーンモードにするには、 デバイス画面をフルスクリーンモードにしてから 描画エンジンSFYRenderer)を初期化します。

以下は、レスポンダ空間をフルスクリーンモードにするコードです。

このコードでは、 USRApplication::USRApplication コンストラクタから呼び出す USRApplication::Initialize 関数内で、 SFBDisplay::SetPrefs 関数を呼び出してデバイス画面をフルスクリーンモードにしてから、 SFYRenderer::Initialize 関数を呼び出して描画エンジンを再初期化しています。

この操作により、 レスポンダ空間はフルスクリーンモードに設定されます。 これに伴い、SFYApplication クラスが内部に保持する ルート[SFZRoot]の再初期化も行っています。

全体のサンプルコードはこちら ( fullscreen_sfy2.zip: 41.5 KB)から入手できます。

[Note] 描画エンジンとルートの再初期化

SFYApplication::SFYApplication コンストラクタでは、 デフォルトのスクリーンモードで描画エンジンとルートを初期化していますが、 下記の処理によりデフォルトの初期化は無効になります (参照: SFYApplication::SFYApplication コンストラクタの内部実装)。

例 9.51. レスポンダ空間をフルスクリーンモードにする方法

SFMTYPEDEFCLASS(USRApplication)
class USRApplication : public SFYApplication {
    SFMSEALCOPY(USRApplication)
public:
    static  SFCInvokerPtr       Factory             (Void);
protected:
    explicit                    USRApplication      (Void) static_throws;
    virtual                     ~USRApplication     (Void);
private:
            SFCError            Initialize          (Void);

            // ...
};

// アプリケーションクラスのコンストラクタ
USRApplication::USRApplication(Void) static_throws
{
    if (static_try()) {

        // フルスクリーンモードで描画エンジンとルートを再初期化する
        static_throw(Initialize());
    }
    if (static_try()) {

        // その他、初期化処理を記述する

        // ...
    }
}

// フルスクリーンモードで描画エンジンとルートを再初期化する
SFCError USRApplication::Initialize(Void)
{
    SFXGraphicsPtr  graphics;
    SFBDisplaySmp   display;
    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) {

            // クリッピング矩形領域をデフォルト(ターゲットビットマップ境界)にリセットする
            display->ResetClipRect();

            // 描画エンジンを取得する
            if ((_renderer = GetRenderer()) != null) {

                // 描画エンジンを再初期化する
                // ※デバイス画面領域(携帯電話の画面領域)がレスポンダ空間として設定される
                _renderer->Initialize();

                // ルートを取得する
                if ((_root = static_pointer_cast<SFZRoot>(GetRoot())) != null) {

                    // ルートの実領域をレスポンダ空間[デバイス画面領域(フルスクリーン領域)]に再設定する
                    // ※1. 親レスポンダが存在しないルートはレスポンダ空間内に実領域を設定する
                    // ※2. _root->GetSuitableBound() はレスポンダ空間(=「デバイス画面領域(フルスクリーン領域)」)を返す
                    // ※3. ルートの実領域は「デバイス画面領域(フルスクリーン領域)」に設定される
                    root->SetRealBound(root->GetSuitableBound());
                }
                else {
                    error = SFERR_INVALID_STATE;
                }
            }
            else {
                error = SFERR_INVALID_STATE;
            }
        }
    }
    else {
        error = SFERR_INVALID_STATE;
    }
    return error;
}
[Important] mif ファイルの設定など

SFBDisplay::SetPrefs 関数を利用するには、 mif ファイルの AEEPRIVID_DISPSETTINGS 特権の設定が必要です。 この特権は、mif エディタで「依存ファイル」のタブを選択し、 BREW SDK のインクルードファイルに含まれている外部クラス 「DISPSETTINGS (0x0103081D)」 を追加する必要があります。

なお、フルスクリーンモードはシミュレータでは対応していません(2011 年 6 月 13 日現在)。 動作確認は実機(BREW 3.1 以降)で行う必要があります。

※ フルスクリーンモードに対応していない機種も存在します。