SophiaFramework UNIVERSE 5.3 |
#include <SFYApplication.h.hpp>
class SFYApplication : public SFCApplication;
SFMTYPEDEFCLASS(SFYApplication)
■ 仕様と使い方
SFYApplication クラスは、 アプリケーションクラスを実装するための起点(基底クラス)となります。
SFY アプリの開発では、 アプリケーションクラスを 1 アプリに付き 1 つ用意する必要があります。
アプリケーションクラスのインスタンスは、 最初に作成され最後に破棄される、SFY アプリの実行を制御する中核モジュールです。
■□■ SFY アプリの全体的な処理の流れ ■□■
□ アプリの起動
SFY アプリの起動は、 SFC アプリと同様にブートローダ (SFCApplet::Boot 関数)によって行います。
注意 | |
---|---|
SFCApplet::Boot 関数はアプリで最初に実行される関数です。 |
ブートローダーにより、 ファクトリ関数(helloworld::Factory 関数)が実行され、 アプリケーションクラスのインスタンスが作成されます。
これ以降、SFCApplication::Terminate 関数の呼び出し、 または電源キー(AVK_POWER)/クリアキー(AVK_CLR)の押下などによりアプリが終了するまで、 アプリは実行中であり、必要に応じて BREW イベントを処理します。
ブートローダ(SFCApplet::Boot 関数)とファクトリ関数(helloworld::Factory 関数)は、 以下のように実装します。
ブートローダ(SFCApplet::Boot 関数)には、ライセンスコードを設定し、 引数 id が AEECLSID_HELLOWORLD であるときに helloworld アプリケーションクラスのインスタンスファクトリ関数 (helloworld::Factory 関数)を返す処理を記述します。
ファクトリ関数(helloworld::Factory 関数)には、 helloworld アプリケーションクラスのインスタンスを生成する処理を記述します。
Tip | |
---|---|
アプリケーションクラスのインスタンスは、 1 アプリにつき 1 つだけ生成します。 |
ClassID とライセンスコード | |
---|---|
BREW 実機(BREW 移動機)では、 アプリの ClassID に対応した正規ライセンスコードを設定しなければアプリは起動しません。 開発時は Example / Tutorial フォルダ内にあるサンプルアプリの ClassID とライセンスコードをテスト用に使用してください BREW シミュレータでは、ライセンスコードを設定しなくてもアプリは起動します。 参照: ライセンスコード |
例 863. ブートローダとファクトリ関数
// // helloworld.cpp // #include "helloworld.hpp" // ブートローダ SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license) { // 実行ライセンスコードを設定する(実機の場合は必須。シミュレーターでは省略可) *license = "heap://" "TIXDRQXNU5WHU8Y3Z9WOHWQR6Z3VPSDHDV5CR1S4XASPWLUHWAS7Z5Z2TGS3XMSAT3UPUQTLTARCYPSF" "UEJZ6ROSJWGUQSEYKR6V2U4VESMTQLHKZ6X7Y2VKXHWIX3XBU0Z7VHWHXIZBSGT5SPU3XLX0Z1Y4R3TC" "U6WGT9WHWIVNYHYCUCR9T3SMTEWPRNVAX1Y4VPW2YCY9YQV5R7Z9UIVHT6SDUPU2SIW6VCRCWBR2S4WQ" "UPYFWCYGT4VIT1WHXGYPTQSFYPWNV3ULRNWFW7RBRFVKUKS2YQSQYHW1TPUPXBZ6UEY2WOYKR7S3TAU4" "TQS6UHVFVEVLU3R5SDSKW7RPTNTPVQU2T4R8Z4VLUGEW3U98TLDR8/"; return (id == AEECLSID_HELLOWORLD) ? (&helloworld::Factory) : (null); } // ファクトリ関数 SFCInvokerPtr helloworld::Factory(Void) { return ::new helloworld; // helloworld アプリケーションクラスのインスタンスを生成する }
□ イベントループ
SFY アプリでは、 アプリ起動後(アプリケーションクラスのインスタンス生成後)、 BREW 環境からイベント(BREW イベント)を受信すると、 SFCApplication::Invoke 関数が呼び出されて以下の処理を行います (参照: SFCApplication::Invoke 関数の内部実装)。
優先的イベントハンドラについて | |
---|---|
SFXEventBypass クラスの解説を参照してください。 |
例 864. SFCApplication::Invoke 関数の内部実装
/*private */Bool SFCApplication::Invoke(SFXEventConstRef event) { Bool overload(false); // イベントを重複して処理するかどうかを表すフラグ Bool render(false); // 全画面を再描画するかどうかを表すフラグ Bool result(false); // 処理がなされた場合、"true" が設定される switch (event.GetType()) { case SFEVT_APP_START: case SFEVT_APP_RESUME: // SFEVT_APP_START / SFEVT_APP_RESUME の場合 render = true; // 全画面を再描画する case SFEVT_APP_STOP: case SFEVT_APP_SUSPEND: // SFEVT_APP_START / SFEVT_APP_RESUME / SFEVT_APP_STOP / SFEVT_APP_SUSPEND の場合 overload = true; // イベントを重複して処理する result = true; // BREW の仕様では、これらのイベントには true を返す必要がある break; default: break; } if (_bypass != null) { // 優先的イベントハンドラの処理 // 優先的イベントハンドラを呼び出す result = (*_bypass)(event, _reference); } if (render) { // アプリ開始/再開時と優先的イベントハンドラ終了時の全画面再描画 if (IsRenderable()) { // 優先的イベントハンドラが登録されていない場合 // 全画面を再描画する HandleRender(event); } } if (!result || overload) { // 優先的イベントハンドラで処理されなかったイベント、あるいは // SFEVT_APP_START / SFEVT_APP_RESUME / SFEVT_APP_STOP / SFEVT_APP_SUSPEND イベントの処理 // イベントを処理する result = HandleEvent(event) || overload; } return result; }// SFCApplication::Invoke //
注意 | |
---|---|
HandleEvent / HandleRender 関数については、 SFYApplication クラスにて上書き実装した、 SFYApplication::HandleEvent / SFYApplication::HandleRender 関数が呼び出されます。 |
注意 | |
---|---|
SFEVT_APP_START / SFEVT_APP_RESUME / SFEVT_APP_STOP / SFEVT_APP_SUSPEND イベントを受信したとき、 必ず true を返す処理をしていることに注意してください。 |
SFYApplication::HandleEvent 関数は、 BREW イベントをルート以下のレスポンダツリーに配信し、 必要に応じてルート以下のレスポンダツリーを再描画します (参照: イベント処理 / 描画処理)。
SFYApplication::HandleRender 関数は、 アプリ開始/再開時と優先的イベントハンドラ終了時に全画面(デバイス画面とルート以下のレスポンダツリー)を再描画します (参照: アプリ開始/再開時と優先的イベントハンドラ終了時の全画面再描画)。
SFYApplication::HandleEvent / SFYApplication::HandleRender / SFCApplication::HandleError 仮想関数のデフォルトの実装は、各関数の内部実装コードを参照してください。
これらの仮想関数は、アプリの処理内容に応じてユーザー定義アプリケーションクラスにて上書きしますが、 通常はデフォルトの実装で十分です。
□ アプリの終了
アプリを終了するには、 SFCApplication::Terminate 関数を呼び出します。
SFCApplication::Terminate 関数を呼び出すと、 内部的に BREW API ISHELL_CloseApplet 関数が呼び出されます。 そのとき、アプリは SFEVT_APP_STOP イベントを受信し、 アプリケーションクラスのデストラクタを実行した後アプリケーションクラスのインスタンスは解放され、 アプリは終了します。
SFYApplication::~SFYApplication デストラクタは、 テキスト入力コントロールエディタ、 レスポンダツリー、 描画エンジン、 配信エンジンを終了し、 リソースをすべて解放します。
SFCApplication::~SFCApplication デストラクタは、 アプリが BREW イベントを処理しない設定にします。
利用者が電源キー(AVK_POWER)を押下した場合、 もしくはクリアキー(AVK_CLR)を押下時にアプリが AEE に false を返した場合、 SFCApplication::Terminate 関数呼び出しと同等の処理が自動的に行われてアプリは終了します。
注意 | |
---|---|
クリアキー(AVK_CLR)の SFEVT_KEY イベントはアプリ側で処理できますが、 電源キー(AVK_POWER)の SFEVT_KEY イベントはアプリ側では処理できません。 |
注意 | |
---|---|
SFCApplication::Terminate 関数は、 レスポンダを破棄するための SFYResponder::Terminate 関数とは処理内容が異なります。 |
■階層構造
SFYApplication クラスは、 ウィンドウ、 ダイアログ、 メニュー、 コントロール、 フレームなどのレスポンダから階層的に構成される、 レスポンダツリーの ルートレスポンダとして、 デフォルトのルート(SFZRoot)を 1 つ保持します。
SFY レスポンダシステムでは、 SFYApplication クラスが内部で保持するルートがウィンドウやダイアログ、メニューを管理し、 ウィンドウやダイアログがコントロールを管理するという階層構造になっています。
ウィンドウ、ダイアログ、メニューは同一階層に存在します。
コンテナはコントロールや 他のコンテナ(コンテナのみ)を管理したり、 コントロールや他のコンテナ(コンテナ・ウィンドウ・ダイアログ)に管理されることが可能な変則的な設計になっています。
フレーム | |
---|---|
タイトルや余白、枠線を備えたフレームをウィンドウやダイアログ、 メニューに装着することが可能です。 |
SFYApplication クラスが内部で保持するルート | |
---|---|
SFYApplication::SFYApplication コンストラクタの処理により、 SFYApplication クラスが内部で保持するルート (SFZRoot)には、 初期化された配信エンジンと 描画エンジンが自動的に関連付けれらます。 その結果、ルートを頂点とするレスポンダツリーを構築するだけで、 レスポンダツリーへのイベント配信と各レスポンダの再描画は自動的に行われます。 SFYApplication クラスを継承するアプリケーションクラスに対するレスポンダ操作は、 すべてルートに委譲されて実行されます。 ※ アプリケーションクラスに複数のルートを保持させることも可能ですが、 一般的なアプリ開発ではその必要性はほとんどありません。 |
■仮想関数
アプリケーションクラスは、 デフォルトの配信エンジンと 描画エンジンとルートを実装し、 いくつかの仮想関数のデフォルトの動作も実装します。
表 231. 仮想関数名とデフォルトの動作
仮想関数名 | デフォルトの動作 | オーバーライド |
---|---|---|
SFYApplication::HandleEvent | イベントを配信し、ルート以下のレスポンダツリーを再描画する※1 | 任意 |
SFYApplication::HandleRender | 全画面(デバイス画面とルート以下のレスポンダツリー)を再描画する※1 | 任意 |
SFCApplication::HandleError | - | 任意 |
注釈 | |
---|---|
※1. メモリ不足などの致命的なエラーが発生した場合は SFCApplication::HandleError 関数を起動します。 |
■ユーザー定義アプリケーションクラスの作成
ユーザー定義アプリケーションクラスを作成するときに最低限必要なコードを示します。
例 865. 宣言
SFMTYPEDEFCLASS(USRApplication) class USRApplication : public SFYApplication { SFMSEALCOPY(USRApplication) public: static SFCInvokerPtr Factory(Void); private: explicit USRApplication(Void) static_throws; virtual ~USRApplication(Void); };
例 866. 実装
// ブートローダ : BREW アプリで最初に実行される関数 SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license) { // ここにライセンスコードを記述する *license = "heap://"; return (id == AEECLSID_USRAPPLICATION) ? (&USRApplication::Factory) : (null); } // ファクトリ関数 : ユーザー定義アプリケーションクラスのインスタンスを生成する関数 SFCInvokerPtr USRApplication::Factory(Void) { return ::new USRApplication; } // コンストラクタ USRApplication::USRApplication(Void) static_throws { if (static_try()) { // 初期化処理を記述する } } // デストラクタ USRApplication::~USRApplication(Void) { // 終了処理を記述する }
コンストラクタやデストラクタ内の return 文 | |
---|---|
C++ ではコンストラクタやデストラクタでは return 文を記述しません。 GCC を使う場合、コンストラクタやデストラクタ内で return 文を記述すると、 特定の継承関係になっているときにコンパイラがフリーズするバグが確認されています。 |
アプリケーションクラス(基礎編) | SFY レスポンダシステム | ウィンドウ | ダイアログ | メニュー | コントロール | フレーム | レスポンダツリー | ルートレスポンダ | ルート | SFZRoot | SFCApplication
コンストラクタ/デストラクタ |
---|
SFYApplication( Void ) SFYApplication クラスのコンストラクタです。
|
SFYApplication(
SFXBaseEditorPtr editor
) SFYApplication クラスのコンストラクタです。
|
~SFYApplication( Void ) SFYApplication クラスのデストラクタです。
|
パブリック関数 | |
---|---|
Void |
ClearHandler( Void ) ルートのハンドラの登録をすべて解除します。
|
Void |
ClearTracer( Void ) ルートのトレーサの配信規則の登録をすべて解除します。
|
SFCError |
Distribute(
SFXEventConstRef event
, BoolPtr result = null
)
指定された配信型イベントを
SFYDistributer インスタンスとルート以下のレスポンダツリーに配信します。
|
SFYResponderSmp |
GetChildBack( Void ) 最背面に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
Bool visible
, Bool active
, Bool enable
, Bool focus
) 最背面に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
UInt32 id
) 最背面に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 最背面に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
) 背面から数えて指定された順番に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 背面から数えて指定された順番に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, UInt32 id
) 背面から数えて指定された順番に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 背面から数えて指定された順番に位置するルートの子レスポンダを取得します。
|
SInt32 |
GetChildCount( Void ) ルートの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
Bool visible
, Bool active
, Bool enable
, Bool focus
) ルートの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
UInt32 id
) ルートの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) ルートの子レスポンダの数を取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
) 前面から数えて指定された順番に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 前面から数えて指定された順番に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, UInt32 id
) 前面から数えて指定された順番に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 前面から数えて指定された順番に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront( Void ) 最前面に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
Bool visible
, Bool active
, Bool enable
, Bool focus
) 最前面に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
UInt32 id
) 最前面に位置するルートの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 最前面に位置するルートの子レスポンダを取得します。
|
static SFYDistributerPtr |
GetDistributer( Void ) ルートに設定されている配信エンジンを取得します。
|
static SFXBaseEditorPtr |
GetEditor( Void ) テキスト入力コントロール処理用エディタを取得します。
|
SFXRectangle |
GetGlobalBound( Void ) ルートのグローバル領域を取得します。
|
static SFYApplicationPtr |
GetInstance( Void ) アプリケーションクラスのインスタンスを取得します。
|
SFXRectangle |
GetLocalBound( Void ) ルートのローカル領域を取得します。
|
SFXRectangleConstRef |
GetRealBound( Void ) ルートの実領域を取得します。
|
static SFYRendererPtr |
GetRenderer( Void ) ルートに設定されている描画エンジンを取得します。
|
static SFYResponderSmp |
GetRoot( Void ) SFYApplication クラスが内部に保持しているルートを取得します。
|
SFXRectangle |
GetSuitableBound( Void ) ルートの最適な領域(サイズ)を取得します。
|
SFXRectangle |
GetSuitableBound(
SFXRectangleConstRef param
) ルートの最適な領域(サイズ)を取得します。
|
SFXRectangleConstRef |
GetVirtualBound( Void ) ルートの仮想領域を取得します。
|
Void |
Invalidate( Void ) 指定された領域を再描画領域に登録します。
|
Void |
Invalidate(
SFXRectangleConstRef param
) 指定された領域を再描画領域に登録します。
|
Void |
InvokeBackward(
SFXEventConstRef event
, Bool overload
, BoolPtr result = null
) 指定されたコールバック型イベントをルートに送信します(ハンドラは登録順に起動されます)。
|
Void |
InvokeForward(
SFXEventConstRef event
, Bool overload
, BoolPtr result = null
) 指定されたコールバック型イベントをルートに送信します(ハンドラは登録の逆順に起動されます)。
|
Bool |
IsRendererIntermissive( Void ) サスペンド時に描画エンジンを終了させるかどうかを判定します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstRef range
, SFYHandler::RuleRecConstRef rule
) 指定されたハンドラをルートに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstRef range
, SFYHandler::HandlerSPP spp
, VoidPtr reference
) 指定されたハンドラをルートに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::RuleRecConstPtr rule
, SInt32 length
) 指定されたハンドラをルートに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::HandlerSPPConstPtr spp
, VoidPtrConstPtr reference
, SInt32 length
) 指定されたハンドラをルートに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstRef range
, SFYTracer::RuleRecConstRef rule
) 指定された配信規則をルートのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstRef range
, SFYTracer::OrderEnum order
, SFYTracer::StateEnum state
, Bool overload
) 指定された配信規則をルートのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstPtr range
, SFYTracer::RuleRecConstPtr rule
, SInt32 length
) 指定された配信規則をルートのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstPtr range
, SFYTracer::OrderEnumConstPtr order
, SFYTracer::StateEnumConstPtr state
, BoolConstPtr overload
, SInt32 length
) 指定された配信規則をルートのトレーサに登録します。
|
SFCError |
Render(
Bool force = false
)
ルート以下のレスポンダツリーを再描画します。
|
Void |
SetRealBound(
SFXRectangleConstRef param
) 指定された領域をルートの実領域に設定します。
|
Void |
SetRendererIntermissive(
Bool param
) サスペンド時に描画エンジンを終了させるかを設定します。
|
Void |
SetVirtualBound(
SFXRectangleConstRef param
) 指定された領域をルートの仮想領域に設定します。
|
Void |
UnregisterHandler(
SFXEventRangeConstRef range
, SFYHandler::RuleRecConstRef rule
) 指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstRef range
, SFYHandler::HandlerSPP spp
, VoidPtr reference
) 指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::RuleRecConstPtr rule
, SInt32 length
) 指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::HandlerSPPConstPtr spp
, VoidPtrConstPtr reference
, SInt32 length
) 指定されたハンドラの登録を解除します。
|
Void |
UnregisterTracer(
SFXEventRangeConstRef range
) ルートのトレーサから指定された配信規則の登録を解除します。
|
Void |
UnregisterTracer(
SFXEventRangeConstPtr range
, SInt32 length
) ルートのトレーサから指定された配信規則の登録を解除します。
|
static AEECLSID |
GetClassID( Void )
(SFCApplication から継承)
BREW アプリの ClassID を取得します。
|
Bool |
IsHandlingEvent( Void )
(SFCApplication から継承)
イベント処理中かどうかを判定します。
|
Bool |
IsRenderable( Void )
(SFCApplication から継承)
画面の描画が可能かどうかを判定します。
|
SFCError |
RegisterBypass(
CallbackSPP spp
, VoidPtr reference
)
(SFCApplication から継承)
イベントを優先的に処理するためのコールバックを登録します。
|
Bool |
RenderDeviceScreen( Void )
(SFCApplication から継承)
デバイス画面を再描画します。
|
static SFCError |
Terminate(
Bool idle = false
)
(SFCApplication から継承)
アクティブなアプリを終了します。
|
Void |
UnregisterBypass(
CallbackSPP spp
, VoidPtr reference
)
(SFCApplication から継承)
優先的イベントハンドラの登録を解除します。
|
プロテクト関数 | |
---|---|
SFYResponderSmp |
GetThis( Void ) SFYApplication クラスが内部に保持しているルートを取得します。
|
Bool |
HandleEvent(
SFXEventConstRef event
) アプリが BREW イベントを受信したときに呼び出される関数です(BREW イベントを処理します)。
|
Bool |
HandleRender(
SFXEventConstRef event
) アプリ開始/再開時と優先的イベントハンドラ終了時に呼び出される関数です(全画面を再描画します)。
|
Bool |
HandleError(
SFXEventConstRef event
, SFCError error
)
(SFCApplication から継承)
致命的なエラーが発生した場合に呼び出される関数です。
|
Bool |
Invoke(
SFXEventConstRef event
)
(SFCApplication から継承)
BREW イベント受信時に呼び出される仮想関数です。
|
型 |
---|
CallbackSPP
(SFCApplication から継承)
優先的イベントハンドラの型です。
|
[ protected, explicit ] SFYApplication(Void);
[ protected, explicit ] SFYApplication( SFXBaseEditorPtr editor // テキスト入力コントロールエディタ );
このコンストラクタは、以下の初期化処理を行います。
詳細は、下記の内部実装コードを参照してください。
このコンストラクタの内部実装は以下の通りです。
// SFYApplication クラスの定義 class SFYApplication : public SFCApplication { SFMSEALCOPY(SFYApplication) private: SFYDistributer _distributer; // 配信エンジン SFYRenderer _renderer; // 描画エンジン SFZRootSmp _root; // ルート SFXBaseEditorPtr _editor; // テキスト入力コントロールエディタ Bool _intermissive; // サスペンド時のデバイス画面保存用ビットマップ解放フラグ public: ... }; // SFYApplication クラスのコンストラクタの実装 /*protected */SFYApplication::SFYApplication(Void) : _editor(null), _intermissive(false) static_throws { // 初期化処理 if (static_try()) { // テキスト入力コントロールエディタを作成する if ((_editor = ::new SFXEditor) != null) { // ルート、配信エンジン、描画エンジンの初期化を行う static_throw(Initialize()); } else { static_throw(SFERR_NO_MEMORY); } } }// SFYApplication::SFYApplication // // SFYApplication クラスのコンストラクタの実装 /*protected */SFYApplication::SFYApplication(SFXBaseEditorPtr editor) : _editor(editor), _intermissive(false) static_throws { // 初期化処理 if (static_try()) { // テキスト入力コントロールエディタが設定されているか if (_editor != null) { // ルート、配信エンジン、描画エンジンの初期化を行う static_throw(Initialize()); } else { static_throw(SFERR_NO_MEMORY); } } }// SFYApplication::SFYApplication // /*private */SFCError SFYApplication::Initialize(Void) { SFCError error; // 配信エンジンを初期化する if ((error = _distributer.Initialize()) == SFERR_NO_ERROR) { // 描画エンジンを初期化する // ※デバイス画面領域(携帯電話の画面領域)がレスポンダ空間として設定される if ((error = _renderer.Initialize()) == SFERR_NO_ERROR) { // ルートを作成する if ((_root = SFZRoot::NewInstance(&error)) != null) { // ルートに配信エンジンを設定する _root->SetDistributer(&_distributer); // ルートに描画エンジンを設定する _root->SetRenderer(&_renderer); // ルートの実領域を設定する // ※1. 親レスポンダが存在しないルートはレスポンダ空間内に実領域を設定する // ※2. _root->GetSuitableBound() はレスポンダ空間(=「携帯電話の画面全体」)を返す // ※3. ルートの実領域は携帯電話の画面全体に設定される _root->SetRealBound(_root->GetSuitableBound()); // ルートの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する _root->SetState(true, true, true, true); } } } return error; }// SFYApplication::Initialize //
SFYApplication::SetRendererIntermissive | SFYResponder::SetDistributer | SFZRoot | SFYDistributer | SFYRenderer | SFXEditor | 配信エンジン | 描画エンジン | レスポンダ空間 | ルート | ルートレスポンダ | 実領域 | 状態
[ protected, pure-virtual ] virtual ~SFYApplication(Void);
このデストラクタは、以下の処理を行います。
詳細は、下記のコードを参照してください。
このデストラクタの内部実装は以下の通りです。
// SFYApplication クラスの定義 class SFYApplication : public SFCApplication { SFMSEALCOPY(SFYApplication) private: SFZRootSmp _root; // ルート SFYDistributer _distributer; // 配信エンジン SFYRenderer _renderer; // 描画エンジン SFXBaseEditorPtr _editor; // テキスト入力コントロールエディタ public: ... }; // SFYApplication クラスのデストラクタの実装 /*protected virtual */SFYApplication::~SFYApplication(Void) { // 終了処理(必ず下記の順序で行う) // テキスト入力コントロールエディタを破棄する ::delete _editor; // レスポンダツリーを解放する _root.Release(); // 描画エンジンを終了する _renderer.Terminate(); // 配信エンジンを終了する _distributer.Terminate(); }// SFYApplication::~SFYApplication //
参照: SFXResponderPointer::Release | SFYRenderer::Terminate | SFYDistributer::Terminate
[ public ] Void ClearHandler(Void);
この関数は、 SFYApplication クラスが内部に保持しているルートのハンドラの登録をすべて解除します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::ClearHandler 関数の解説を参照してください。 |
SFYResponder::ClearHandler | SFYApplication::RegisterHandler | SFYApplication::UnregisterHandler | SFZRoot | ハンドラ | ルート
[ public ] Void ClearTracer(Void);
この関数は、 SFYApplication クラスが内部に保持しているルートのトレーサの配信規則の登録をすべて解除します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::ClearTracer 関数の解説を参照してください。 |
SFYResponder::ClearTracer | SFYApplication::RegisterTracer | SFYApplication::UnregisterTracer | SFYTracer SFZRoot | ルート | トレーサ
[ public ] SFCError Distribute( SFXEventConstRef event // イベント BoolPtr result = null // 処理結果 );
この関数は、 指定された配信型イベントを、 SFYApplication クラスが内部に保持している ルートに設定された SFYDistributer インスタンスと ルート以下のレスポンダツリーに配信します。
イベントは、SFYDistributer インスタンス、ルート以下のレスポンダツリーの順に、 トレーサに登録された配信規則に基づき配信されます。
配信エンジン (SFYDistributer インスタンス)がルートに設定されていない場合は、 SFERR_INVALID_STATE が返ります (デフォルトの設定では、 SFYApplication クラスが内部に保持しているルートに設定されているので、 このエラーは発生しません)。
注意 | |
---|---|
result 引数に true が返された場合は、 レスポンダの状態が変化している可能性があるため、 SFYApplication::Render 関数を呼び出して再描画することを推奨します。 |
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
Distribute 関数の詳細は、 SFYResponder::Distribute 関数の解説を参照してください。 |
SFYResponder::Distribute | SFYApplication::Render | SFXEvent | SFYDistributer | SFZRoot | ルート | 配信エンジン | レスポンダツリー | イベントループ | 配信型 | コールバック型 | イベント
[ public, const ] SFYResponderSmp GetChildBack(Void);
[ public, const ] SFYResponderSmp GetChildBack( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildBack( UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildBack( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
最背面に位置するルートの子レスポンダ。
存在しない場合は null を返します。
この関数は、 SFYApplication クラスが内部に保持しているルートについて、 最背面に位置する子レスポンダを取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
Tip | |
---|---|
アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetChildBack 関数の解説を参照してください。 |
SFYResponderSmp child; すべてのルートの子レスポンダの中で最背面のレスポンダを取得する方法 child = GetChildBack(); ID = 128 のルートの子レスポンダの中で最背面のレスポンダを取得する方法 child = GetChildBack(128); 可視かつ活性なルートの子レスポンダの中で最背面のレスポンダを取得する方法(操作可能とフォーカスの状態は問わない) child = GetChildBack(true, true, false, false); 可視、活性かつ操作可能なルートの子レスポンダの中で最背面のレスポンダを取得する方法(フォーカスの状態は問わない) child = GetChildBack(true, true, true, false);
SFYResponder::GetChildBack | SFYApplication::GetChildFront | SFYApplication::GetChildBackward | SFZRoot | ID | 状態 | 子レスポンダ | ルート
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
背面から数えて指定された順番に位置するルートの子レスポンダ。
存在しない場合は null を返します。
この関数は、 SFYApplication クラスが内部に保持しているルートについて、 背面から数えて指定された順番に位置する子レスポンダを取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
Tip | |
---|---|
アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetChildBackward 関数の解説を参照してください。 |
SFYResponderSmp child; すべてのルートの子レスポンダの中で背面から 3 番目のレスポンダを取得する方法 child = GetChildBackward(2); ID = 128 のルートの子レスポンダの中で背面から 3 番目のレスポンダを取得する方法 SFYResponderSmp child; 可視かつ活性なルートの子レスポンダの中で背面から 3 番目のレスポンダを取得する方法(操作可能とフォーカスの状態は問わない) child = GetChildBackward(2, true, true, false, false); 可視、活性かつ操作可能なルートの子レスポンダの中で背面から 3 番目のレスポンダを取得する方法(フォーカスの状態は問わない) child = GetChildBackward(2, true, true, true, false);
SFYResponder::GetChildBackward | SFYApplication::GetChildForward | SFYApplication::GetChildBack | SFZRoot | ID | 状態 | ルートの子レスポンダ | ルート
[ public, const ] SInt32 GetChildCount(Void);
[ public, const ] SInt32 GetChildCount( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SInt32 GetChildCount( UInt32 id // ID );
[ public, const ] SInt32 GetChildCount( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
ルートの子レスポンダの数。
この関数は、 SFYApplication クラスが内部に保持しているルートについて、 子レスポンダの数を取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
Tip | |
---|---|
アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetChildCount 関数の解説を参照してください。 |
SInt32 count; すべてのルートの子レスポンダの数を取得する方法 count = GetChildCount(); ID = 128 のルートの子レスポンダの数を取得する方法 count = GetChildCount(128); 可視かつ活性なルートの子レスポンダの数を取得する方法(操作可能とフォーカスの状態は問わない) count = GetChildCount(true, true, false, false); 可視、活性かつ操作可能なルートの子レスポンダの数を取得する方法(フォーカスの状態は問わない) count = GetChildCount(true, true, true, false);
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
前面から数えて指定された順番に位置するルートの子レスポンダ。
存在しない場合は null を返します。
この関数は、 SFYApplication クラスが内部に保持しているルートについて、 前面から数えて指定された順番に位置する子レスポンダを取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
Tip | |
---|---|
アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetChildForward 関数の解説を参照してください。 |
SFYResponderSmp child; すべてのルートの子レスポンダの中で前面から 3 番目のレスポンダを取得する方法 child = GetChildForward(2); ID = 128 のルートの子レスポンダの中で前面から 3 番目のレスポンダを取得する方法 child = GetChildForward(2, 128); 可視かつ活性なルートの子レスポンダの中で前面から 3 番目のレスポンダを取得する方法(操作可能とフォーカスの状態は問わない) child = GetChildForward(2, true, true, false, false); 可視、活性かつ操作可能なルートの子レスポンダの中で前面から 3 番目のレスポンダを取得する方法(フォーカスの状態は問わない) child = GetChildForward(2, true, true, true, false);
SFYResponder::GetChildForward | SFYApplication::GetChildBackward | SFZRoot | ID | 状態 | 子レスポンダ | ルート
[ public, const ] SFYResponderSmp GetChildFront(Void);
[ public, const ] SFYResponderSmp GetChildFront( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildFront( UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildFront( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
最前面に位置するルートの子レスポンダ。
存在しない場合は null を返します。
この関数は、 SFYApplication クラスが内部に保持しているルートについて、 最前面に位置する子レスポンダを取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
Tip | |
---|---|
アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetChildFront 関数の解説を参照してください。 |
SFYResponderSmp child; すべてのルートの子レスポンダの中で最前面のレスポンダを取得する方法 child = GetChildFront(); ID = 128 のルートの子レスポンダの中で最前面のレスポンダを取得する方法 child = GetChildFront(128); 可視かつ活性なルートの子レスポンダの中で最前面のレスポンダを取得する方法(操作可能とフォーカスの状態は問わない) child = GetChildFront(true, true, false, false); 可視、活性かつ操作可能なルートの子レスポンダの中で最前面のレスポンダを取得する方法(フォーカスの状態は問わない) child = GetChildFront(true, true, true, false);
SFYResponder::GetChildFront | SFYApplication::GetChildBack | SFYApplication::GetChildForward| SFZRoot | ID | 状態 | 子レスポンダ | ルート
[ public, static ] SFYDistributerPtr GetDistributer(Void);
この関数は、 SFYApplication クラスが内部に保持しているルートに設定されている配信エンジンを取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetDistributer 関数の解説を参照してください。 |
[ public, static ] SFXBaseEditorPtr GetEditor(Void);
アプリケーションクラスに設定されたテキスト入力コントロール処理用エディタ。
テキスト入力コントロール処理用エディタが設定されていない場合、null が返ります。
この関数は、 アプリケーションクラスが内部で保持するテキスト入力コントロール処理用エディタを取得します。
注意 | |
---|---|
SFYApplication::SFYApplication コンストラクタの editor 引数にユーザー定義のテキスト入力コントロール処理用エディタを指定することも可能です。 この引数に何も設定しない場合は、SFXEditor インスタンスが返ります。 |
[ public, const ] SFXRectangle GetGlobalBound(Void);
SFYApplication クラスが内部に保持しているルートのグローバル領域。
この関数は、 SFYApplication クラスが内部に保持しているルートのグローバル領域を取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetGlobalBound 関数の解説を参照してください。 |
SFYResponder::GetGlobalBound | SFYApplication::GetLocalBound | SFYApplication::GetRealBound | SFZRoot | ルート | グローバル領域
[ public, static ] SFYApplicationPtr GetInstance(Void);
この関数は、 1 つのアプリにつき 1 つだけ存在する、 このアプリケーションクラスのインスタンスを取得します。
グローバル変数 | |
---|---|
アプリケーションクラスに定義されたグローバル変数にアクセスするには、 下記の使用例のようにしてこの関数を呼び出します。 |
例 867. グローバル変数の定義とアクセス
// // ExampleAppli アプリケーションクラス(AppWizard で自動生成) // SFMTYPEDEFCLASS(ExampleAppli) class ExampleAppli : public SFYApplication { SFMSEALCOPY(ExampleAppli) public: static SFCInvokerPtr Factory(Void); private: explicit ExampleAppli(Void) static_throws; virtual ~ExampleAppli(Void); // グローバル変数 global_something_val を定義する SInt32 global_something_val; public: // グローバル変数 global_something_val にアクセスするための GetGlobalSomethingVal 関数を宣言する SInt32 GetGlobalSomethingVal(); }; // グローバル変数 global_something_val にアクセスするための GetGlobalSomethingVal 関数を定義する ExampleAppli::GetGlobalSomethingVal(Void) { return global_something_val; } // GetGlobalSomethingVal 関数経由でグローバル変数 global_something_val の値を取得する static_cast<ExampleAppli>(SFYApplication::GetInstance())->GetGlobalSomethingVal();
この関数の内部実装は以下の通りです。
/*public static */inline SFYApplicationPtr SFYApplication::GetInstance(Void) { return static_cast<SFYApplicationPtr>(SFCApplication::GetInstance()); }// SFYApplication::GetInstance //
[ public, const ] SFXRectangle GetLocalBound(Void);
SFYApplication クラスが内部に保持しているルートのローカル領域。
この関数は、 SFYApplication クラスが内部に保持しているルートのローカル領域を取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetLocalBound 関数の解説を参照してください。 |
SFYResponder::GetLocalBound | SFYApplication::GetGlobalBound | SFYApplication::GetVirtualBound | SFZRoot | ルート | ローカル領域
[ public, const ] SFXRectangleConstRef GetRealBound(Void);
SFYApplication クラスが内部に保持しているルートの実領域。
この関数は、 SFYApplication クラスが内部に保持しているルートの実領域を取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetRealBound 関数の解説を参照してください。 |
SFYResponder::GetRealBound | SFYApplication::SetRealBound | SFYApplication::GetVirtualBound | SFYApplication::GetGlobalBound | SFZRoot | ルート | 実領域
[ public, static ] SFYRendererPtr GetRenderer(Void);
この関数は、 SFYApplication クラスが内部に保持しているルートに設定されている描画エンジンを取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetRenderer 関数の解説を参照してください。 |
[ public, static ] SFYResponderSmp GetRoot(Void);
この関数は、 SFYApplication クラスが内部に保持しているルートを取得します。
[ public ] SFXRectangle GetSuitableBound(Void);
[ public ] SFXRectangle GetSuitableBound( SFXRectangleConstRef param // 参考にする領域 );
この関数は、 SFYApplication クラスが内部に保持しているルートの実領域の最適な領域(サイズ)を取得します。 を取得します。
引数を指定しない場合、 描画エンジンに設定されているレスポンダ空間(携帯画面全体)が返ります。
引数を指定した場合、何もせずに引数で与えた矩形領域が返るだけです。
注意 | |
---|---|
通常 SFYApplication::GetSuitableBound 関数は引数を指定せずに使用します。 |
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
Tip | |
---|---|
SFYApplication クラスが内部に保持しているルートの実領域は、 SFYApplication::SFYApplication コンストラクタ内で設定されるので、この関数を使用する必要はありません。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetSuitableBound 関数の解説を参照してください。 |
SFYResponder::GetSuitableBound | SFYApplication::SetRealBound | SFYApplication::SFYApplication | SFZRoot | 実領域 | レスポンダ空間 | 描画エンジン | ルート
[ protected ] SFYResponderSmp GetThis(Void);
SFYApplication クラスが内部に保持しているルート。
この関数は、 SFYApplication クラスが内部に保持しているルートを取得します。
注意 | |
---|---|
SFYApplication クラスはルートレスポンダとしてデフォルトでルート(SFZRoot)を1つ保持しています。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetThis 関数の解説を参照してください。 |
[ public, const ] SFXRectangleConstRef GetVirtualBound(Void);
SFYApplication クラスが内部に保持しているルートの仮想領域。
この関数は、 SFYApplication クラスが内部に保持しているルートの仮想領域を取得します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::GetVirtualBound 関数の解説を参照してください。 |
SFYResponder::GetVirtualBound | SFYApplication::SetVirtualBound | SFYApplication::GetRealBound | SFYApplication::GetLocalBound | SFZRoot | ルート | 仮想領域
[ protected, virtual ] Bool HandleEvent( SFXEventConstRef event // イベント );
この関数は、 アプリが BREW 環境からイベント(BREW イベント) を受信したときに呼び出される仮想関数です(BREW イベントを処理します)。
イベントを処理した場合は true を返し、 そうでない場合は false を返します。
開発者はこの関数をオーバーライドすることで独自の処理を記述できます。
デフォルトの実装は以下の通りです。
注意 | |
---|---|
SFEVT_APP_END(アプリ終了イベント)/ SFEVT_APP_SUSPEND(アプリ中断イベント)を受信した場合や、 優先的イベントハンドラが登録されている場合、描画エンジンは起動されません。 |
優先的イベントハンドラについて | |
---|---|
SFXEventBypass クラスの解説を参照してください。 |
詳細は、以下の内部実装のコードを参照してください。
この関数の内部実装は以下の通りです。
// アプリが BREW 環境からイベントを受信したときに呼び出される関数 /*protected virtual */Bool SFYApplication::HandleEvent(SFXEventConstRef event) { SFCError error; Bool result(false); // 配信エンジンを起動してイベントを配信する // ※ イベントは最初にルートに関連付けられた SFYDistributer インスタンスに配信される // その後、トレーサの配信規則に基づいてルート以下のレスポンダツリーに配信される if ((error = _root->Distribute(event, &result)) == SFERR_NO_ERROR) { // (_root はルート、result 引数にはイベントの処理結果が格納される) if (event.GetType() != SFEVT_APP_STOP && event.GetType() != SFEVT_APP_SUSPEND)) { // 再描画が必要な場合 if (IsRenderable()) { // 優先的イベントハンドラが登録されていない場合 // 描画エンジンを起動してルート以下のレスポンダツリーを再描画する error = _root->Render(); } } } if (error != SFERR_NO_ERROR) { // 配信エンジンや描画エンジンの起動時にメモリ不足などの致命的エラーが発生した場合 if (HandleError(event, error)) { result = true; } } if ((event.GetType() == SFEVT_APP_SUSPEND) && IsRendererIntermissive()) { // サスペンド時に描画エンジン内部のデバイス画面保存用ビットマップを解放する場合 // 描画エンジンを終了する _renderer.Terminate(); } return result; // イベントを処理したときは true を返し, そうでないときは false を返す }// SFYApplication::HandleEvent //
参照: SFCApplication::HandleEvent | SFCApplication::IsRenderable | SFCApplication::HandleError | SFYApplication::IsRendererIntermissive | SFYResponder::Distribute | SFYResponder::Render | SFYRenderer::Initialize | SFYRenderer::Terminate | SFZRoot | ルート | トレーサ | 配信エンジン | 描画エンジン | 描画イベント | 描画ハンドラ | イベントループ | 可視領域 | 再描画領域
SFCApplication::HandleEvent | SFCApplication::RegisterBypass | BREW イベント | イベント処理 | 配信エンジン | トレーサ | 描画エンジン
[ protected, virtual ] Bool HandleRender( SFXEventConstRef event // イベント );
この関数は、 アプリ開始/再開時と優先的イベントハンドラ終了時に呼び出される関数です(全画面を再描画します)。
優先的イベントハンドラが実行中の場合、この関数は呼び出されません。
全画面(デバイス画面と ルート以下のレスポンダツリー)の再描画を行います。
正常に再描画した場合は true、 そうでない場合は false を返します。
優先的イベントハンドラについて | |
---|---|
SFXEventBypass クラスの解説を参照してください。 |
HandleRender 関数が呼び出されるタイミング | |
---|---|
アプリ開始/再開時と優先的イベントハンドラ終了時は、 全画面の再描画が必要になります。 HandleRender 関数は、これらのタイミングで呼び出されます。 アプリ開始/再開時は SFCApplication::Invoke 関数内から、 優先的イベントハンドラ終了時は SFCApplication::RenderDeviceScreen 関数内から自動的に呼び出されます。 HandleEvent 関数よりも先に呼び出されることに注意してください ※ 詳細は、SFYApplication クラスの解説にある 「SFY アプリの全体的な処理の流れ」のコードを参照してください。 |
デフォルトの実装は以下の通りです。
詳細は、以下の内部実装のコードを参照してください。
開発者はこの関数をオーバーライドすることで独自の処理を記述できます。
SFYApplication::HandleRender 関数の内部実装は以下の通りです
// アプリ開始/再開時と優先的イベントハンドラ終了時に呼び出される仮想関数 /*protected virtual */Bool SFYApplication::HandleRender(SFXEventConstRef event) { // ここに全画面(デバイス画面とルート以下のレスポンダツリー)の再描画を記述する SFCError error; Bool result(false); if (SFCApplication::HandleRender(event)) { // デバイス画面を再描画する // ルート以下のレスポンダツリーを再描画する // ※1. 可能であれば、デバイス画面保存用ビットマップを利用して高速に再描画行う // ※2. SFEVT_APP_START 受信時などデバイス画面保存用ビットマップが利用不可の場合は引数に true を指定して Render 関数を呼び出す(強制再描画を行う) error = _root->Render((event.GetType() == SFEVT_APP_START) || (_root->Recover() != SFERR_NO_ERROR)); if (error == SFERR_NO_ERROR) { result = true; } else { // 描画エンジンの起動時にメモリ不足などの致命的エラーが発生した場合、HandleError() を呼び出す HandleError(event, error); } } return result; }// SFYApplication::HandleRender //
参照: SFCApplication::HandleRender | SFCApplication::HandleError | SFCApplication::RenderDeviceScreen | SFYResponder::Render | SFYResponder::Recover | SFZRoot | ルート | 描画エンジン
SFCApplication::HandleRender | SFCApplication::HandleError | SFCApplication::RenderDeviceScreen | アプリ開始/再開時と優先的イベントハンドラ終了時の全画面再描画
[ public ] Void Invalidate(Void);
[ public ] Void Invalidate( SFXRectangleConstRef param // 設定する領域(デフォルト値: 何も指定しない場合、ルートの全領域) );
この関数は、 指定された領域(ルートのローカル領域の座標系で表した矩形)を再描画領域に登録します。
デフォルト値: param 引数に何も指定しない場合、ルートの全領域。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::Invalidate 関数の解説を参照してください。 |
[ public ] Void InvokeBackward( SFXEventConstRef event // イベント Bool overload // 重複条件 BoolPtr result = null // 処理結果 );
この関数は、 指定されたコールバック型イベントを SFYApplication クラスが内部に保持しているルートに送信します。
ハンドラは、 ルートのハンドラリストに登録された順に起動されます。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持している ルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::InvokeBackward 関数の解説を参照してください。 |
SFYResponder::InvokeBackward | SFYApplication::InvokeForward | SFYApplication::Distribute | SFXEvent | SFZRoot | ルート | コールバック型 | イベント | ハンドラ | ハンドラリスト
[ public ] Void InvokeForward( SFXEventConstRef event // イベント Bool overload // 重複条件 BoolPtr result = null // 処理結果 );
この関数は、 指定されたコールバック型イベントを SFYApplication クラスが内部に保持しているルートに送信します。
ハンドラは、 ルートのハンドラリストに登録された逆順に起動されます。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::InvokeForward 関数の解説を参照してください。 |
SFYResponder::InvokeForward | SFYApplication::InvokeBackward | SFYApplication::Distribute | SFXEvent | SFZRoot | ルート | コールバック型 | イベント | ハンドラ | ハンドラリスト
[ public, const ] Bool IsRendererIntermissive(Void);
この関数は、 サスペンド時に描画エンジンを終了させるかどうかを判定します。
注意 | |
---|---|
サスペンド時に描画エンジンを終了させてデバイス画面保存用ビットマップなどのリソースを解放したい場合、 param 引数に true を指定します。 この場合、SFEVT_APP_RESUME イベントを受信したときに SFYRenderer::Terminate 関数が呼び出されます。 レジューム後、 SFYResponder::Render 関数を呼び出して再描画するときに描画エンジンが終了している場合は、 自動的に SFYRenderer::Initialize 関数が呼び出されて、 描画エンジンは初期化されます。 詳細は、SFYApplication::HandleEvent 関数の内部実装コードを参照してください。 |
[ public ] SFCError RegisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::RuleRecConstRef rule // ハンドラ規則 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::HandlerSPP spp // ハンドラ関数 VoidPtr reference // リファレンス値 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::RuleRecConstPtr rule // ハンドラ規則の配列 SInt32 length // 配列の要素数 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::HandlerSPPConstPtr spp // ハンドラ関数の配列 VoidPtrConstPtr reference // リファレンス値の配列 SInt32 length // 配列の要素数 );
ハンドラ規則が適用されるイベントの範囲を表します。
ハンドラ関数とリファレンス値のセットを表します。
この関数は、 指定されたハンドラを SFYApplication クラスが内部に保持しているルートに登録します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::RegisterHandler 関数の解説を参照してください。 |
SFYResponder::RegisterHandler | SFYApplication::UnregisterHandler | SFYApplication::ClearHandler | SFZRoot | ルート | ハンドラ
[ public ] SFCError RegisterTracer( SFXEventRangeConstRef range // イベント範囲 SFYTracer::RuleRecConstRef rule // トレーサ規則 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstRef range // イベント範囲 SFYTracer::OrderEnum order // 処理順序 SFYTracer::StateEnum state // 配信条件 Bool overload // 重複条件 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SFYTracer::RuleRecConstPtr rule // トレーサ規則の配列 SInt32 length // 配列の要素数 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SFYTracer::OrderEnumConstPtr order // 配信順序の配列 SFYTracer::StateEnumConstPtr state // 配信条件の配列 BoolConstPtr overload // 重複条件の配列 SInt32 length // 配列の要素数 );
トレーサ規則が適用されるイベントの範囲を表します。
配信順序と配信条件と重複条件のセットを表します。
この関数は、 指定された配信規則を SFYApplication クラスが内部に保持しているルートのトレーサに登録します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::RegisterTracer 関数の解説を参照してください。 |
SFYTracer::StateEnum | SFYTracer::OrderEnum | SFYTracer::RuleRec | SFYResponder::RegisterTracer | SFYApplication::UnregisterTracer | SFYApplication::ClearTracer | SFXEventRange | SFXEvent | SFYTracer | SFZRoot | ルート | トレーサ
この関数は、 SFYApplication クラスが内部に保持している ルート以下のレスポンダツリーを再描画します。
描画エンジン (SFYRenderer インスタンス)がルートに設定されていない場合は、 SFERR_INVALID_STATE が返ります (デフォルトの設定では、 SFYApplication クラスが内部に保持しているルートに設定されているので、 このエラーは発生しません)。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::Render 関数の解説を参照してください。 |
SFYResponder::Render | SFZRoot | 描画エンジン | ルート
[ public ] Void SetRealBound( SFXRectangleConstRef param // 設定する値 );
この関数は、 指定された領域を SFYApplication クラスが内部に保持しているルートの 実領域に設定します。
デフォルト値: SFXGraphics::GetDeviceRectangle 関数で得られるデバイス画面領域。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
アプリケーションクラスの実領域 | |
---|---|
アプリケーションクラスの実領域とは、 SFYApplication クラスが内部で保持するルート[SFZRoot] のクリッピング領域のことです(ルートはこの領域でクリッピングされて描画されます)。 レスポンダ空間(デバイス画面領域)の左上端を原点 (0, 0) とする相対座標系の矩形領域として表されます。 SFYApplication::SFYApplication コンストラクタの処理により、 デフォルトでは、レスポンダ空間と同じ領域 (SFXGraphics::GetDeviceRectangle 関数で得られるデバイス画面領域)に設定されます。 通常、デフォルトの設定で十分なので SFYApplication::SetRealBound 関数を利用する必要はありません。 |
注意 | |
---|---|
詳細は、 SFYResponder::SetRealBound 関数の解説を参照してください。 |
SFYResponder::SetRealBound | SFYApplication::GetRealBound | SFYApplication::SetVirtualBound | SFYApplication::SFYApplication | SFXGraphics::GetDeviceRectangle | SFXRectangle | SFZRoot | 実領域 | レスポンダ空間 | ルート
[ public ] Void SetRendererIntermissive( Bool param // 設定する値: サスペンド時に描画エンジンを終了させる場合は true、そうでない場合は false );
この関数は、 サスペンド時に描画エンジンを終了させるかを設定します。
デフォルト値: false(サスペンド時に描画エンジンは終了しません)。
注意 | |
---|---|
サスペンド時に描画エンジンを終了させてデバイス画面保存用ビットマップなどのリソースを解放したい場合、 param 引数に true を指定します。 この場合、SFEVT_APP_RESUME イベントを受信したときに SFYRenderer::Terminate 関数が呼び出されます。 レジューム後、 SFYResponder::Render 関数を呼び出して再描画するときに描画エンジンが終了している場合は、 自動的に SFYRenderer::Initialize 関数が呼び出されて、 描画エンジンは初期化されます。 詳細は、SFYApplication::HandleEvent 関数の内部実装コードを参照してください。 |
SFYApplication::SFYApplication | SFYApplication::IsRendererIntermissive | SFYApplication::HandleEvent | SFYResponder::Render | SFYRenderer::Initialize | SFYRenderer::Terminate | SFYRenderer | 描画エンジン
[ public ] Void SetVirtualBound( SFXRectangleConstRef param // 設定する値 );
この関数は、 指定された領域を SFYApplication クラスが内部に保持しているルートの 仮想領域に設定します。
デフォルト値: SFXGraphics::GetDeviceRectangle 関数で得られるデバイス画面領域。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
アプリケーションクラスの仮想領域 | |
---|---|
アプリケーションクラスの仮想領域とは、 SFYApplication クラスが内部で保持するルート[SFZRoot] の仮想領域のことです。 SFYApplication::SFYApplication コンストラクタの処理により、 デフォルトでは、 ルートの実領域と同じ領域 (SFXGraphics::GetDeviceRectangle 関数で得られるデバイス画面領域)に設定されます。 通常、デフォルトの設定で十分なので SFYApplication::SetVirtualBound 関数を利用する必要はありません。 |
注意 | |
---|---|
詳細は、 SFYResponder::SetVirtualBound 関数の解説を参照してください。 |
SFYResponder::SetVirtualBound | SFYApplication::GetVirtualBound | SFYApplication::SetRealBound | SFXGraphics::GetDeviceRectangle | SFXRectangle | SFZRoot | 仮想領域 | 実領域 | ルート
[ public ] Void UnregisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::RuleRecConstRef rule // ハンドラ規則 );
[ public ] Void UnregisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::HandlerSPP spp // ハンドラ関数 VoidPtr reference // リファレンス値 );
[ public ] Void UnregisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::RuleRecConstPtr rule // ハンドラ規則の配列 SInt32 length // 配列の要素数 );
[ public ] Void UnregisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::HandlerSPPConstPtr spp // ハンドラ関数の配列 VoidPtrConstPtr reference // リファレンス値の配列 SInt32 length // 配列の要素数 );
ハンドラ規則が適用されるイベントの範囲を表します。
ハンドラ関数とリファレンス値のセットを表します。
この関数は、 SFYApplication クラスが内部に保持しているルートから 指定されたハンドラの登録を解除します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::UnregisterHandler 関数の解説を参照してください。 |
SFYResponder::UnregisterHandler | SFYApplication::RegisterHandler | SFYApplication::ClearHandler | SFXEventRange | SFZRoot | ルート | ハンドラ
[ public ] Void UnregisterTracer( SFXEventRangeConstRef range // イベント範囲 );
[ public ] Void UnregisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SInt32 length // 配列の要素数 );
トレーサ規則が適用されるイベントの範囲を表します。
この関数は、 SFYApplication クラスが内部に保持しているルートの トレーサから指定された配信規則の登録を解除します。
注意 | |
---|---|
この操作は SFYApplication クラスが内部に保持しているルートに委譲されて処理されます。 |
注意 | |
---|---|
詳細は、 SFYResponder::UnregisterTracer 関数の解説を参照してください。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |