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

4.4. カスタマイズ

4.4.1. カスタマイズ前

カスタマイズする前の helloworld アプリは下記のように動作します。

  1. アプリを起動すると、画面は白色で塗り潰され、文字列 "Hello World" が黒色で表示されます。
  2. セレクトキー(AVK_SELECT)を押すと、アプリは終了します。

図 4.1. カスタマイズ前 : アプリ起動後の画面

カスタマイズ前 : アプリ起動後の画面

4.4.2. カスタマイズ

それでは、helloworld アプリを次のようにカスタマイズしましょう。

  1. アプリが起動されると、画面を白色で塗り潰します(画面に文字列は表示されません)。
  2. 1 キー(AVK_1)が押されると、文字列 "Hello World" を黒色で画面に描画します。
  3. セレクトキー(AVK_SELECT)が押されると、アプリを終了します。

OnKey 関数の中から呼び出される Draw 関数は、 背景を白色で塗り潰し、文字列 "Hello World" を黒色で描画します。

例 4.8. 文字列 "Hello World" を表示しない HandleRender 関数の実装

// 全画面再描画ハンドラ
Bool helloworld::HandleRender(SFXEventConstRef event)
{
    // ここにアプリ開始/再開時と優先的イベントハンドラ終了時の全画面再描画を記述する

    static SFXRGBColor::AtomRecConst            theme = {

        {{0x00, 0xFF, 0xFF, 0xFF}}  // 白色
    };
    SFXGraphicsPtr graphics;
    Bool           result(false);

    // SFXGraphics インスタンスを取得する
    if ((graphics = SFXGraphics::GetInstance()) != null) {

        // デバイス画面領域を白色で塗りつぶす
        graphics->ClearRectangle(SFXGraphics::GetDeviceRectangle(), theme);

        // デバイス画面を更新する
        graphics->Update();
        result = true;  
    }
    return result;
}
[Note] HandleRender 関数

SFCApplication::HandleRender 関数は、 アプリ開始/再開時と優先的イベントハンドラ終了時にに自動的に呼び出される仮想関数です。

SFCApplication を継承するアプリケーションクラスの HandleRender 関数には、デバイス画面を再描画する処理を記述します。 上の例では、画面を白色で塗り潰す処理がオーバーライドされています。

[Note] HandleRender 関数の戻り値

HandleRender 関数は、 画面を再描画した場合は true、しなかった場合は false を返します。

[Caution] 画面の更新

HandleRender 関数の実装では、 SFXGraphics::Update 関数を呼び出して画面を更新する必要があります。

上の例の場合、下記のコードにより画面は再描画されます。

graphics->Update();

例 4.9. Draw 関数

// Draw 関数は OnKey 関数内から呼び出される
Void Draw(Void)
{
    // 画面を白色で塗り潰して文字列 "Hello World" を描画する

    // SFXGraphics インスタンスを取得する
    SFXGraphicsPtr graphics = SFXGraphics::GetInstance();

    if (graphics != null) {

        // 画面を白色で塗りつぶする
        // SFXGraphics::GetDeviceRectangle() で画面領域全体を取得する
        // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) は白色を表します( 左から R、G、B、アルファ値 )。
        graphics->ClearRectangle(SFXGraphics::GetDeviceRectangle(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));

        // 画面に文字列 "Hello World" を描画する
        graphics->DrawSingleText("Hello World", SFXGraphics::GetDeviceRectangle(), SFXRGBColor(0x00, 0x00, 0x00, 0x00));

        // 最後に SFXGraphics::Update() を呼び出して画面を再描画する
        // ※この一行を記述しなければ、画面は更新されない
        graphics->Update();

        // ※Draw 関数では、"true"や"false"を返す必要がない
    }
}
[Note] Draw 関数の戻り値

HandleRender 関数と異なり、 Draw 関数は true や false を返す必要はありません。

[Caution] 画面の更新

Draw 関数の中で SFXGraphics::Update 関数を呼び出さなければ画面は更新されません。

レスポンダを再描画する場合は、 描画エンジンSFXGraphics::Update 関数を呼び出すので、この関数を呼び出す必要はありません。

1 キー(AVK_1)が押された場合、 Draw 関数を呼び出すように OnKey 関数をカスタマイズします。

例 4.10. OnKey 関数のカスタマイズ

// OnKey 関数: キーハンドラ
Bool helloworld::OnKey(UInt16 key)
{
    // ここに BREW 環境から受信したキーイベントの分岐処理を記述する

    switch (key) {

        case AVK_SELECT: // セレクトキーのキーイベントを受信したとき

            Terminate(); // アプリを終了する

            return true; // キーイベントを処理したので true を返す

        //*** 太字が追加部分
        case AVK_1: //  1 キーのキーイベントを受信したとき

            Draw();      // 文字列 "Hello World" を描画する

            return true; // キーイベントを処理したので true を返す
    }

    return false; // キーイベントを処理していないので false を返す
}
[Note] OnKey 関数の戻り値

OnKey 関数は、 キーイベントを処理した場合は true、 処理しなかった場合は false を返します。

4.4.3. カスタマイズ後

カスタマイズ後の helloworld アプリは次のように動作します。

  1. アプリを起動すると、画面は白色で塗り潰されます(文字列 "Hello World" は画面に表示されません)。
  2. 1 キー(AVK_1)を押すと、文字列 "Hello World" が黒色で画面に表示されます。
  3. セレクトキー(AVK_SELECT)を押すと、アプリは終了します。

図 4.2. カスタマイズ後 : アプリ起動後の画面

カスタマイズ後 : アプリ起動後の画面

図 4.3. カスタマイズ後 : 1 キー(AVK_1)押下後の画面

カスタマイズ後 : 1 キー(AVK_1)押下後の画面