SophiaFramework UNIVERSE 5.3 |
SFXEventBypass は、 イベントを優先的に処理するコールバックを設定・解除するためのクラスです。
■ 優先的イベントハンドラ
SFY アプリでは、 BREW 環境から受信したイベント(以下、BREW イベント)は最初にレスポンダに配信されます。
注意 | |
---|---|
厳密に言えば、BREW イベントは最初に アプリケーションクラス(SFYApplication を継承するクラス)が内部に保持する ルートに渡されます。 その後、トレーサの配信規則により、 ルートを頂点とするレスポンダツリー上の各レスポンダに配信されます。 |
アプリが受信した BREW イベントをレスポンダよりも優先して先に渡す関数のことを 優先的イベントハンドラと呼びます。 このイベントハンドラは、SFXEventBypass::Register 関数を使用して BREW アプリ 1 つにつき 1 つまで登録可能です。
優先的イベントハンドラを登録すると、 BREW イベントは『優先的イベントハンドラ→レスポンダ』の順に配信されるようになります。 SFXEventBypass::Unregister 関数を呼び出してコールバックの登録が解除されるまでの間、 BREW イベントはこの順序で配信されます。
UI を表示する BREW インターフェースでは、 アプリが UI 表示中に受信した BREW イベントは最初に BREW インターフェースの HandleEvent 関数に渡す必要があります。
この処理は、 優先的イベントハンドラ内で、 アプリが受け取った BREW イベントを BREW インターフェースの HandleEvent 関数に渡すことで実現できます。
UI 表示終了時は、 その時に起動されるコールバック内などで SFXEventBypass::Unregister 関数を使用して 優先的イベントハンドラの登録を解除します。 同時に、SFYApplication::Render 関数を呼び出して UI 表示により変更された画面を再描画します。
BREW インターフェースの UI 終了後の処理について | |
---|---|
優先的イベントハンドラの登録を解除すると BREW イベントは最初にレスポンダに配信される設定に戻ります。 UI 処理の結果、再描画後の画面が UI 表示前と異なる場合もあります(例: FEP からテキストを入力したとき)。 |
SophiaFramework UNIVERSE の BREW イベントの配信について | |
---|---|
優先的イベントハンドラに関わる SophiaFramework UNIVERSE の BREW イベントの配信の詳細については、 SFCApplication クラスの解説にある『イベント処理−全体的な処理の流れ−』を参照してください。 |
SFXEventBypass::Register | SFXEventBypass::Unregister | SFCApplication::RegisterBypass | SFCApplication::UnregisterBypass | SFCApplication::CallbackSPP | UI を表示する BREW インターフェース | SophiaFramework UNIVERSE での実装例: ITextCtl / IMenuCtl インターフェース
パブリック関数 | |
---|---|
static SFCError |
Register(
SFCApplication::CallbackSPP spp
, VoidPtr reference
) 優先的イベントハンドラを登録します。
|
static Void |
Unregister(
SFCApplication::CallbackSPP spp
, VoidPtr reference
) イベントを優先的に処理するためのハンドラ関数の登録を解除します。
|
[ public, static ] SFCError Register( SFCApplication::CallbackSPP spp // 優先的イベントハンドラ VoidPtr reference // 優先的イベントハンドラに渡すデータ(参照値) );
この関数は、 優先的イベントハンドラを登録します。
優先的イベントハンドラについて | |
---|---|
SFXEventBypass にある解説を参照してください。 |
SFY アプリでは、 デフォルトでは、BREW イベントは最初にレスポンダに配信されます
注意 | |
---|---|
厳密に言えば、BREW イベントは最初に アプリケーションクラス(SFYApplication を継承するクラス)が内部に保持する ルートに渡されます。 その後、トレーサの配信規則により、 ルートを頂点とするレスポンダツリー上の各レスポンダに配信されます。 |
一般に、UI を表示する BREW インターフェースでは、 アプリが UI 表示中に受信した BREW イベントは最初に BREW インターフェースの HandleEvent 関数に渡す必要があります。
SFXEventBypass::Register 関数を使用して優先的イベントハンドラを登録すれば、 BREW イベントは『優先的イベントハンドラ→レスポンダ』の順に配信されるようになります。 SFXEventBypass::Unregister 関数を呼び出してコールバックの登録が解除されるまでの間、 BREW イベントはこの順序で配信されます。
優先的イベントハンドラの実装コード内で、 受け取った BREW イベントをそのまま BREW インターフェースの HandleEvent 関数に渡せば、 レスポンダよりも先に BREW イベントを BREW インターフェースの HandleEvent 関数に渡すことが可能になります。
BREW インターフェースの UI 表示終了時に起動されるコールバック内などで、 SFXEventBypass::Unregister 関数を呼び出して優先的イベントハンドラの登録を解除し、 SFYApplication::Render 関数を呼び出して再描画を行います。
注意 | |
---|---|
優先的イベントハンドラの登録を解除すると BREW イベントは最初にレスポンダに配信されます。 BREW インターフェースの UI 表示により画面が変更されているので、 UI 表示終了時は全画面を再描画する必要があります。 UI 処理により、再描画後の画面が UI 表示前と異なる場合もあります。 |
SophiaFramework UNIVERSE の BREW イベントの配信について | |
---|---|
優先的イベントハンドラに関わる SophiaFramework UNIVERSE の BREW イベントの配信の詳細については、 SFCApplication クラスの解説にある『イベント処理−全体的な処理の流れ−』を参照してください。 |
注意 | |
---|---|
BREW API ITextCtl インターフェースの場合は、 UI 表示終了時に呼び出されるコールバックを登録できません。 その代わりに UI 表示終了時に EVT_COMMAND イベントが発生するので、 このイベントを受信したときに優先的イベントハンドラの登録を解除し、再描画を行います。 詳細は、 「SophiaFramework UNIVERSE での実装例: ITextCtl / IMenuCtl インターフェース」 を参照してください |
この関数の内部実装は以下の通りです。
/*public static*/SFCError SFXEventBypass::Register(SFCApplication::CallbackSPP spp, VoidPtr reference) { SFCApplicationPtr application; SFCError error; if ((application = SFCApplication::GetInstance()) != null) { error = application->RegisterBypass(spp, reference); } else { error = SFERR_INVALID_STATE; } return error; }// SFXEventBypass::Register //
SFXEventBypass::Unregister | SFCApplication::CallbackSPP | SFCApplication::RegisterBypass | SFCApplication::GetInstance | SFYApplication::Render | SFY レスポンダシステム | ルート | レスポンダツリー | UI を表示する BREW インターフェース | SophiaFramework UNIVERSE での実装例: ITextCtl / IMenuCtl インターフェース
[ public, static ] Void Unregister( SFCApplication::CallbackSPP spp // 優先的イベントハンドラ VoidPtr reference // 優先的イベントハンドラに渡すデータ );
この関数は、 優先的イベントハンドラの登録を解除します。
注意 | |
---|---|
この関数は、内部で SFCApplication::UnregisterBypass 関数を呼び出します。 |
優先的イベントハンドラについて | |
---|---|
SFXEventBypass にある解説を参照してください。 |
この関数の内部実装は以下の通りです。
/*public static*/Void SFXEventBypass::Unregister(SFCApplication::CallbackSPP spp, VoidPtr reference) { SFCApplicationPtr application; if ((application = SFCApplication::GetInstance()) != null) { application->UnregisterBypass(spp, reference); } return; }// SFXEventBypass::Unregister //
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |