SophiaFramework UNIVERSE 5.3 |
#include <SFYScrollBarControl.h.hpp>
class SFYScrollBarControl : public SFYControl;
SFMTYPEDEFCLASS(SFYScrollBarControl)
■ 仕様と使い方
SFYScrollBarControl は、 各種スクロールバーコントロールを実装するための起点となるクラスです。
SFZScrollBarControl や SFZContainerScrollBarControl は、 このクラスを継承します。
このクラスは、スクロールバーの描画機能(トラック、増分矢印ラベル、減分矢印ラベル、サムラベル) とスクロール状況(最大値、最小値、現在値、ページサイズ)を設定する機能を提供します。 また、以下の表にあるようにいくつかの仮想関数のデフォルトの動作も実装します。
以下は、スクロールバーコントロールの仕様です。
仮想領域が実領域よりも大きい場合や、 リストボックスやメニューなどで実領域に表示可能な項目よりもたくさんの項目がある場合、 レスポンダはスクロールしてコンテンツ(内容)を表示します。
このようなレスポンダでは、 以下の手順でスクロールバーコントロールを装着することにより、 実領域に現在表示されているコンテンツに関するコンテンツ全体に対する相対的な位置関係(スクロールの状況)をスクロールバーコントロールに表示することができます。
注意 | |
---|---|
スクロールバーを装着する対象となるレスポンダを『ターゲットレスポンダ』と呼んでいます。 また、ターゲットレスポンダの実領域に現在表示されているコンテンツを『表示コンテンツ』、 表示されていないものも含めたすべてのコンテンツを『全体コンテンツ』と呼んでいます。 |
ターゲットレスポンダの最小値、最大値、現在値、ページサイズについて | |
---|---|
多くのレスポンダでは、 全体コンテンツの始点と終点の座標で最小値と最大値、表示コンテンツ(=実領域)の始点と幅で現在値とページサイズを表現します (いずれもローカル領域の座標系。スクロール方向が水平の場合は X 座標、垂直の場合は Y 座標。最小値は常に 0 です)。 ターゲットレスポンダの実領域や仮想領域が変更された場合、 全体コンテンツの始点や終点、表示コンテンツの始点や幅も変更されますので、 スクロールバーコントロールの最小値、最大値、現在値、ページサイズも更新する必要があります。 例外: SFZListBoxControl クラスでは、 全体コンテンツの項目数で最大値、表示コンテンツの先頭項目のインデックスで現在位置、 表示コンテンツの項目数でページサイズを表現します(最小値は常に 0)。 |
スクロールバーイベントについて | |
---|---|
スクロールバーコントロールは、 ターゲットレスポンダがスクロール可能な状態からスクロール不可能な状態、あるいはその逆になったとき、 スクロールバーイベント [SFEVT_RESPONDER_SCROLLBAR] [SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0)] を受信します。 |
スクロール可能性の判定について | |
---|---|
ターゲットレスポンダが現在スクロール可能であるかどうかは、 SFYScrollBarControl::IsScrollable 関数を使用して判定します。 |
スクロールバーコントロールの幅について | |
---|---|
スクロールバーコントロールの幅として、4 ピクセル以上の値を指定できます。 減分・増分矢印を矩形領域内にバランス良く描画するには、5 以上の奇数を指定することを推奨します。 |
Increment / Decrement / SetScrollStepValue 関数について | |
---|---|
スクロールバーコントロールを装着するレスポンダ(ターゲットレスポンダ) 側でスクロールバーコントロールの現在値を増減する場合、 SFYScrollBarControl::Increment / SFYScrollBarControl::Decrement / SFYScrollBarControl::SetScrollStepValue 関数は使用しません。 これらの関数は、 スクロールバーコントロール側からターゲットレスポンダをスクロールしたい場合に使用します。 通常、ターゲットレスポンダ側でスクロールさせますので、 これらの関数を使用する機会は少ないと考えられます。 |
■イベントハンドラ
表 246. 仮想関数名とデフォルトの動作
仮想関数名 | デフォルトの動作 | オーバーライト |
---|---|---|
SFYWidget::HandleBoundRequest | − | 推奨 |
SFYWidget::HandleBoundOptimize | − | 推奨 |
SFYControl::HandleBoundReal | 仮想領域を実領域に一致させます。※1 | 任意 |
SFYScrollBarControl::HandleBoundVirtual | スクロールバーを構成する部品の再配置します。 | 非推奨 (代わりに SFYScrollBarControl::RelocateTrackAndArrow 関数をオーバーライドします。) |
SFYWidget::HandleBoundGlobal | − | 任意 |
SFYWidget::HandleRenderRequest | − | 必須 |
SFYScrollBarControl::RelocateTrackAndArrow | トラック領域と矢印ラベル領域を再配置します。 | 推奨 |
注釈 | |
---|---|
※1. SFYResponder::SetVirtualBound(SFXRectangle(SFXGrid::ZeroInstance(), GetRealBound().GetSize())) を実行します。 |
SFYControl | SFZScrollBarControl | SFZContainerScrollBarControl | SFYControl::SetMinimumValue | SFYControl::SetMaximumValue | SFYControl::SetCurrentValue | SFYScrollBarControl::SetPageValue | SFYScrollBarControl::SetBevelColor | SFYScrollBarControl::SetTrackColor | SFYScrollBarControl::SetArrowColor | SFYScrollBarControl::SetOrientation | SFYScrollBarControl::IsScrollable | SFYResponder::SetRealBound | 実領域 | 仮想領域 | スクロールバーイベント [SFEVT_RESPONDER_SCROLLBAR]
コンストラクタ/デストラクタ |
---|
SFYScrollBarControl( Void ) SFYScrollBarControl クラスのコンストラクタです。
|
~SFYScrollBarControl( Void ) SFYScrollBarControl クラスのデストラクタです。
|
パブリック関数 | |
---|---|
Bool |
Decrement( Void ) スクロールステップだけ現在値を減らします。
|
SFXRGBColorConstRef |
GetArrowColor( Void ) 矢印の色を取得します。
|
SFXBevelColorConstRef |
GetBevelColor( Void ) スクロールバーの外枠を描画するためのベベルカラーを取得します。
|
OrientationEnum |
GetOrientation( Void ) スクロールバーの方向(垂直か水平)を取得します。
|
SInt32 |
GetPageValue( Void ) ページサイズを取得します。
|
SInt32 |
GetScrollStepValue( Void ) スクロールステップの値を取得します。
|
SFXRGBColorConstRef |
GetTrackColor( Void ) トラックの色を取得します。
|
Bool |
Increment( Void ) スクロールステップだけ現在値を増やします。
|
Bool |
IsScrollable( Void ) スクロール可能かどうかを判定します。
|
Void |
SetArrowColor(
SFXRGBColorConstRef param
) 矢印ラベルの色を設定します。
|
Void |
SetBevelColor(
SFXBevelColorConstRef param
) スクロールバーの外枠を描画するためのベベルカラーを設定します。
|
Void |
SetOrientation(
OrientationEnum param
) スクロールバーの方向(垂直か水平)を設定します。
|
Void |
SetPageValue(
SInt32 param
) ページサイズを設定します。
|
Void |
SetScrollStepValue(
SInt32 param
) スクロールステップを設定します。
|
Void |
SetTrackColor(
SFXRGBColorConstRef param
) トラックの色を設定します。
|
Void |
ClearHandler( Void )
(SFYResponder から継承)
このレスポンダのハンドラの登録をすべて解除します。
|
Void |
ClearTracer( Void )
(SFYResponder から継承)
このレスポンダのトレーサの配信規則の登録をすべて解除します。
|
SFCError |
Distribute(
SFXEventConstRef event
, BoolPtr result = null
)
(SFYResponder から継承)
指定された配信型イベントを
SFYDistributer インスタンスと、このレスポンダ以下のレスポンダツリーに配信します。
|
SFXRGBColorConstRef |
GetBackgroundColor( Void )
(SFYWidget から継承)
背景の色を取得します。
|
SFYResponderSmp |
GetChildBack( Void )
(SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
UInt32 id
)
(SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
)
(SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, UInt32 id
)
(SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SInt32 |
GetChildCount( Void )
(SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
UInt32 id
)
(SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
)
(SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, UInt32 id
)
(SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront( Void )
(SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
UInt32 id
)
(SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
|
SInt32 |
GetCurrentValue( Void )
(SFYControl から継承)
コントロールの現在値を取得します。
|
SFYDistributerPtr |
GetDistributer( Void )
(SFYResponder から継承)
このレスポンダに設定されている配信エンジンを取得します。
|
SFYResponderSmp |
GetFrame( Void )
(SFYResponder から継承)
このレスポンダに装着されたフレームを取得します。
|
SFXRectangle |
GetGlobalBound( Void )
(SFYResponder から継承)
このレスポンダのグローバル領域を取得します。
|
UInt32 |
GetID( Void )
(SFYResponder から継承)
このレスポンダの ID を取得します。
|
SFXRectangle |
GetLocalBound( Void )
(SFYResponder から継承)
このレスポンダのローカル領域を取得します。
|
SInt32 |
GetMaximumValue( Void )
(SFYControl から継承)
コントロールの最大値を取得します。
|
SInt32 |
GetMinimumValue( Void )
(SFYControl から継承)
コントロールの最小値を取得します。
|
SInt32 |
GetNthBackward( Void )
(SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthBackward(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthBackward(
UInt32 id
)
(SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthBackward(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthForward( Void )
(SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthForward(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthForward(
UInt32 id
)
(SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthForward(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
|
SFYResponderSmp |
GetParent( Void )
(SFYResponder から継承)
このレスポンダの親レスポンダを取得します。
|
Bool |
GetPropertyTransparent( Void )
(SFYResponder から継承)
このレスポンダの透過属性を取得します。
|
SFXRectangleConstRef |
GetRealBound( Void )
(SFYResponder から継承)
このレスポンダの実領域を取得します。
|
VoidPtr |
GetReference( Void )
(SFYResponder から継承)
このレスポンダのリファレンス値を取得します。
|
SFYRendererPtr |
GetRenderer( Void )
(SFYResponder から継承)
このレスポンダに設定されている描画エンジンを取得します。
|
SFYResponderSmp |
GetRoot( Void )
(SFYResponder から継承)
このレスポンダが所属するレスポンダツリーのルートレスポンダを取得します。
|
Bool |
GetStateActive(
Bool inherit = false
)
(SFYResponder から継承)
このレスポンダの活性状態を取得します。
|
Bool |
GetStateEnable(
Bool inherit = false
)
(SFYResponder から継承)
このレスポンダの操作可能状態を取得します。
|
Bool |
GetStateFocus(
Bool inherit = false
)
(SFYResponder から継承)
このレスポンダのフォーカス状態を取得します。
|
Bool |
GetStateValid(
Bool inherit = false
)
(SFYResponder から継承)
このレスポンダの有効状態を取得します。
|
Bool |
GetStateVisible(
Bool inherit = false
)
(SFYResponder から継承)
このレスポンダの可視状態を取得します。
|
SFXRectangle |
GetSuitableBound( Void )
(SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
|
SFXRectangle |
GetSuitableBound(
SFXRectangleConstRef rectangle
)
(SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
|
SFXRectangle |
GetSuitableBound(
SFXRectangleConstRef param
, HorizontalEnum horizontal
, VerticalEnum vertical
)
(SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
|
SFXMargin |
GetSuitableMargin( Void )
(SFYResponder から継承)
このレスポンダのフレーム余白領域を取得します。
|
SFCType |
GetType( Void )
(SFYResponder から継承)
このレスポンダのタイプを取得します。
|
SFXRectangleConstRef |
GetVirtualBound( Void )
(SFYResponder から継承)
このレスポンダの仮想領域を取得します。
|
Bool |
HasFrame( Void )
(SFYResponder から継承)
このレスポンダがコンテントレスポンダであるかどうかを判定します。
|
Void |
Initialize( Void )
(SFYResponder から継承)
このレスポンダを初期化します。
|
Void |
Invalidate( Void )
(SFYResponder から継承)
指定された領域を再描画領域に登録します。
|
Void |
Invalidate(
SFXRectangleConstRef param
)
(SFYResponder から継承)
指定された領域を再描画領域に登録します。
|
Void |
InvokeBackward(
SFXEventConstRef event
, Bool overload
, BoolPtr result = null
)
(SFYResponder から継承)
指定されたコールバック型イベントをこのレスポンダに送信します
(ハンドラは登録順に起動されます)。
|
Void |
InvokeForward(
SFXEventConstRef event
, Bool overload
, BoolPtr result = null
)
(SFYResponder から継承)
指定されたコールバック型イベントをこのレスポンダに送信します
(ハンドラは登録の逆順に起動されます)。
|
Bool |
IsBack( Void )
(SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
|
Bool |
IsBack(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
|
Bool |
IsBack(
UInt32 id
)
(SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
|
Bool |
IsBack(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
|
Bool |
IsFrame( Void )
(SFYResponder から継承)
このレスポンダがアタッチメントフレームであるかどうかを判定します。
|
Bool |
IsFront( Void )
(SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
|
Bool |
IsFront(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
|
Bool |
IsFront(
UInt32 id
)
(SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
|
Bool |
IsFront(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
|
Bool |
IsNthBackward(
SInt32 index
)
(SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthBackward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthBackward(
SInt32 index
, UInt32 id
)
(SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthBackward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthForward(
SInt32 index
)
(SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthForward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthForward(
SInt32 index
, UInt32 id
)
(SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthForward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsRoot( Void )
(SFYResponder から継承)
このレスポンダがルートレスポンダであるかどうかを判定します。
|
SFCError |
Recover( Void )
(SFYResponder から継承)
デバイス画面保存用ビットマップを使用してこのレスポンダとレスポンダ空間との交差領域を復元します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstRef range
, SFYHandler::RuleRecConstRef rule
)
(SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstRef range
, SFYHandler::HandlerSPP spp
, VoidPtr reference
)
(SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::RuleRecConstPtr rule
, SInt32 length
)
(SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::HandlerSPPConstPtr spp
, VoidPtrConstPtr reference
, SInt32 length
)
(SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstRef range
, SFYTracer::RuleRecConstRef rule
)
(SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstRef range
, SFYTracer::OrderEnum order
, SFYTracer::StateEnum state
, Bool overload
)
(SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstPtr range
, SFYTracer::RuleRecConstPtr rule
, SInt32 length
)
(SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstPtr range
, SFYTracer::OrderEnumConstPtr order
, SFYTracer::StateEnumConstPtr state
, BoolConstPtr overload
, SInt32 length
)
(SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
|
SFCError |
Render(
Bool force = false
)
(SFYResponder から継承)
このレスポンダ以下のレスポンダツリーをレスポンダ空間に再描画します。
|
Void |
SetBackgroundColor(
SFXRGBColorConstRef param
)
(SFYWidget から継承)
背景の色を設定します。
|
Void |
SetCurrentValue(
SInt32 param
)
(SFYControl から継承)
コントロールの現在値を設定します。
|
Void |
SetDistributer(
SFYDistributerPtr param
)
(SFYResponder から継承)
指定された配信エンジンをこのレスポンダに設定します。
|
SFCError |
SetFrame(
SFYResponderSmpConstRef param
)
(SFYResponder から継承)
このレスポンダにフレームを装着します。
|
Void |
SetID(
UInt32 param
)
(SFYResponder から継承)
指定された ID をこのレスポンダに設定します。
|
Void |
SetMaximumValue(
SInt32 param
)
(SFYControl から継承)
コントロールの最大値を設定します。
|
Void |
SetMinimumValue(
SInt32 param
)
(SFYControl から継承)
コントロールの最小値を設定します。
|
SFCError |
SetParent(
SFYResponderSmpConstRef param
)
(SFYResponder から継承)
指定されたレスポンダをこのレスポンダの親レスポンダに設定します。
|
Void |
SetProperty(
Bool transparent
)
(SFYResponder から継承)
指定された属性をこのレスポンダに設定します。
|
Void |
SetPropertyTransparent(
Bool param
)
(SFYResponder から継承)
指定された透過属性をこのレスポンダに設定します。
|
Void |
SetRealBound(
SFXRectangleConstRef param
)
(SFYResponder から継承)
指定された領域をこのレスポンダの実領域に設定します。
|
Void |
SetReference(
VoidPtr param
)
(SFYResponder から継承)
指定された値をこのレスポンダのリファレンスに設定します。
|
Void |
SetRenderer(
SFYRendererPtr param
)
(SFYResponder から継承)
指定された描画エンジンをこのレスポンダに設定します。
|
Void |
SetState(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
指定された値をこのレスポンダの可視、活性、操作可能、フォーカスの各状態フラグに設定します。
|
Void |
SetStateActive(
Bool param
)
(SFYResponder から継承)
指定された値をこのレスポンダの活性状態フラグに設定します。
|
Void |
SetStateEnable(
Bool param
)
(SFYResponder から継承)
指定された値をこのレスポンダの操作可能状態フラグに設定します。
|
Void |
SetStateFocus(
Bool param
)
(SFYResponder から継承)
指定された値をこのレスポンダのフォーカス状態フラグに設定します。
|
Void |
SetStateVisible(
Bool param
)
(SFYResponder から継承)
指定された値をこのレスポンダの可視状態フラグに設定します。
|
Void |
SetVirtualBound(
SFXRectangleConstRef param
)
(SFYResponder から継承)
指定された領域をこのレスポンダの仮想領域に設定します。
|
SFCError |
Snapshot(
SFBBitmapSmpConstRef bitmap
)
(SFYResponder から継承)
デバイス画面保存用ビットマップからこのレスポンダとレスポンダ空間との交差領域のスナップショットを取得します。
|
Void |
Terminate( Void )
(SFYResponder から継承)
このレスポンダの終了処理を行います。
|
Void |
ToBack( Void )
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
|
Void |
ToBack(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
|
Void |
ToBack(
UInt32 id
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
|
Void |
ToBack(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
|
Void |
ToFront( Void )
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
|
Void |
ToFront(
Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
|
Void |
ToFront(
UInt32 id
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
|
Void |
ToFront(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
|
Void |
ToNthBackward(
SInt32 index
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
|
Void |
ToNthBackward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
|
Void |
ToNthBackward(
SInt32 index
, UInt32 id
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
|
Void |
ToNthBackward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
|
Void |
ToNthForward(
SInt32 index
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
|
Void |
ToNthForward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
|
Void |
ToNthForward(
SInt32 index
, UInt32 id
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
|
Void |
ToNthForward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
)
(SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
|
Void |
UnregisterHandler(
SFXEventRangeConstRef range
, SFYHandler::RuleRecConstRef rule
)
(SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstRef range
, SFYHandler::HandlerSPP spp
, VoidPtr reference
)
(SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::RuleRecConstPtr rule
, SInt32 length
)
(SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::HandlerSPPConstPtr spp
, VoidPtrConstPtr reference
, SInt32 length
)
(SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
|
Void |
UnregisterTracer(
SFXEventRangeConstRef range
)
(SFYResponder から継承)
このレスポンダのトレーサから指定された配信規則の登録を解除します。
|
Void |
UnregisterTracer(
SFXEventRangeConstPtr range
, SInt32 length
)
(SFYResponder から継承)
このレスポンダのトレーサから指定された配信規則の登録を解除します。
|
プロテクト関数 | |
---|---|
Void |
DrawDecrement(
SFXGraphicsPtr graphics
) 減分矢印矩形領域を描画します。
|
Void |
DrawIncrement(
SFXGraphicsPtr graphics
) 増分矢印矩形領域を描画します。
|
Void |
DrawThumb(
SFXGraphicsPtr graphics
) サム領域を描画します。
|
Void |
DrawTrack(
SFXGraphicsPtr graphics
) トラックを描画します。
|
SFXRectangleConstRef |
GetDecrementArrowRectangle( Void ) 減分矢印矩形領域を取得します。
|
SFXRectangleConstRef |
GetIncrementArrowRectangle( Void ) 増分矢印矩形領域を取得します。
|
SInt16 |
GetScrollRange( Void ) スクロールレンジを取得します。
|
SInt16 |
GetThumbLength( Void ) サムの長さを取得します。
|
SFXRectangle |
GetThumbRectangle( Void ) サム領域を取得します。
|
SInt16 |
GetThumbTop( Void ) サムトップの位置を取得します。
|
SFXRectangleConstRef |
GetTrackRectangle( Void ) トラック領域を取得します。
|
Void |
HandleBoundVirtual( Void )
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL) イベントを受信したときに呼び出される関数です
(仮想領域が変化したときの処理を行います)。
|
Void |
HandleScrollable( Void )
スクロール可能状態が変化したときに呼び出される関数です。
|
Void |
RelocateTrackAndArrow( Void ) トラック矩形領域と減分・増分矢印矩形領域を再配置します。
|
Void |
SetDecrementArrowRectangle(
SFXRectangleConstRef param
) 減分矢印矩形領域を設定します。
|
Void |
SetIncrementArrowRectangle(
SFXRectangleConstRef param
) 増分矢印矩形領域を設定します。
|
Void |
SetTrackRectangle(
SFXRectangleConstRef param
) トラック領域を設定します。
|
static SFYResponderSmp |
Factory(
SFYResponderPtr responder
, SFCErrorPtr exception = null
)
(SFYResponder から継承)
NewInstance 関数の実装を補助します。
|
SFYResponderSmp |
GetThis( Void )
(SFYResponder から継承)
このレスポンダのスマートポインタを取得します。
|
Void |
HandleBoundGlobal(
SFXRectangleConstRef rectangle
)
(SFYWidget から継承)
[非推奨(廃止予定 API)] グローバル領域が変化したときに呼び出される関数です。
|
Void |
HandleBoundOptimize(
SFXRectanglePtr rectangle
)
(SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE) イベントを受信したときに呼び出される関数です(指定した矩形に収まる範囲内で最適な領域を計算します)。
|
Void |
HandleBoundReal( Void )
(SFYControl から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REAL) イベントを受信したときに呼び出される関数です
(実領域が変化したときの処理を行います)。
|
Void |
HandleBoundRequest(
SFXRectanglePtr rectangle
)
(SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST) イベントを受信したときに呼び出される関数です(最適な領域を計算します)。
|
Void |
HandleRenderRequest(
SFXGraphicsPtr graphics
)
(SFYWidget から継承)
描画イベントを受信したときに呼び出される関数です(レスポンダを描画します)。
|
Void |
SetType(
SFCType param
)
(SFYResponder から継承)
指定された値をこのレスポンダのタイプに設定します。
|
型 |
---|
CodeEnum SFYScrollBarControl クラスを表す定数です。
|
OrientationEnum スクロールバーの方向を表す定数です。
|
HorizontalEnum
(SFYResponder から継承)
水平方向のアライメントを表す定数です。
|
VerticalEnum
(SFYResponder から継承)
垂直方向のアライメントを表す定数です。
|
[ protected, explicit ] SFYScrollBarControl(Void);
このコンストラクタは、以下の初期化処理を行います。
表 247. イベントハンドラ
イベント | ハンドラの内容 |
---|---|
最小値または最大値が変更された時に発生する値イベント[SFEVT_RESPONDER_VALUE] | スクロール可能状態が変化したときは SFYScrollBarControl::HandleScrollable 関数を呼び出す。 また、このスクロールバーコントロールを再配置する。 |
現在値が変更された時に発生する値イベント[SFEVT_RESPONDER_VALUE] | サムトップを再配置する。 |
注意 | |
---|---|
SFYScrollBarControl クラスを継承するレスポンダでは、 上記イベントが発生すると、それに対応するハンドラが呼び出されます。 |
このコンストラクタの内部実装は以下の通りです。
/*public */SFYScrollBarControl::SFYScrollBarControl(Void) static_throws { static SFXEventRange::AtomRecConst range[] = { { SFEVT_RESPONDER_VALUE, SFEVT_RESPONDER_VALUE, SFP16_VALUE_MAXIMUM, SFP16_VALUE_CURRENT} }; SFYHandler::RuleRec rule[lengthof(range)]; if (static_try()) { SetType(CODE_TYPE); rule[0].spp = XANDLER_FUNCTION(OnValue); rule[0].reference = this; static_throw(RegisterHandler(atomic_cast(range), rule, lengthof(range))); if (static_try()) { static SFXRGBColor::AtomRecConst theme[] = { {{{0x00, 0xFF, 0xFF, 0xFF}}}, {{{0x00, 0xCC, 0xCC, 0xCC}}}, {{{0x00, 0x88, 0x88, 0x88}}}, {{{0x00, 0xF0, 0xF0, 0xF0}}}, {{{0x00, 0x00, 0x00, 0x00}}} }; _color.bevel.Set(theme[0], theme[1], theme[2]); _color.track.Set(theme[3]); _color.arrow.Set(theme[4]); SetMinimumValue(0); SetMaximumValue(0); SetCurrentValue(0); _pagesize = 0; _scrollstep = 0; _scrollbar.orient = DEFAULT_ORIENTATION; _scrollbar.thumbTop = 0; _scrollbar.thumbLength = 0; _scrollbar.scrollRange = 0; _scrollable = false; } } }// SFYScrollBarControl::SFYScrollBarControl // /*private */XANDLER_IMPLEMENT_VOIDVALUE(SFYScrollBarControl, OnValue, invoker, reason, value) { unused(invoker); unused(value); switch (reason) { case SFP16_VALUE_MAXIMUM: case SFP16_VALUE_MINIMUM: QueryScrollable(); RelocateThumb(); break; case SFP16_VALUE_CURRENT: RelocateThumbTop(); break; default: break; } Invalidate(); return; }// XANDLER_IMPLEMENT_VOIDSTATE(SFYScrollBarControl, OnValue) // /*private */Void SFYScrollBarControl::QueryScrollable(Void) { SInt32Const min(GetMinimumValue()); SInt32Const max(GetMaximumValue()); if (((max > min) && (max - min > _pagesize)) ^ !(!_scrollable)) { _scrollable = !_scrollable; HandleScrollable(); } return; }// SFYScrollBarControl::QueryScrollable // /*protected virtual */Void SFYScrollBarControl::HandleScrollable(Void) { InvokeBackward(SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0), true); return; }// SFYScrollBarControl::HandleScrollable // /*private */Void SFYScrollBarControl::RelocateThumb(Void) { if (IsScrollable()) { RelocateThumbLength(); RelocateThumbTop(); } else { _scrollbar.thumbLength = 0; } return; }// SFYScrollBarControl::RelocateThumb // /*private */Void SFYScrollBarControl::RelocateThumbLength(Void) { SInt32Const min(GetMinimumValue()); SInt32Const max(GetMaximumValue()); SFXRectangleConst rc(GetLocalBound()); SInt16 track; track = (_scrollbar.orient == VERTICAL) ? _track.GetHeight() : _track.GetWidth(); track = (track > 0) ? track : 0; _scrollbar.thumbLength = static_cast<SInt16>(track * _pagesize / (max - min)); if ((_scrollbar.thumbLength < MINIMUM_THUMB_LENGTH) && (MINIMUM_THUMB_LENGTH < track)) { _scrollbar.thumbLength = MINIMUM_THUMB_LENGTH; } _scrollbar.scrollRange = track - _scrollbar.thumbLength; return; }// SFYScrollBarControl::RelocateThumbLength // /*private */ Void SFYScrollBarControl::RelocateThumbTop(Void) { SInt32Const cur(GetCurrentValue()); SInt32Const min(GetMinimumValue()); SInt32Const max(GetMaximumValue()); if (max - min > _pagesize) { // This is always true. // _scrollbar.thumbTop = static_cast<SInt16>(_scrollbar.scrollRange * (cur - min) / (max - min - _pagesize)); } else { _scrollbar.thumbTop = 0; } return; }// SFYScrollBarControl::RelocateThumbTop //
SFYResponder::SetType | SFYScrollBarControl::CodeEnum | SFYScrollBarControl::SetBevelColor | SFYScrollBarControl::SetTrackColor | SFYScrollBarControl::SetArrowColor | SFYScrollBarControl::SetPageValue | SFYScrollBarControl::SetScrollStepValue | SFYScrollBarControl::SetOrientation | SFYScrollBarControl::OrientationEnum | SFYScrollBarControl::GetThumbTop | SFYScrollBarControl::GetThumbLength | SFYScrollBarControl::GetScrollRange | SFYScrollBarControl::IsScrollable | SFYScrollBarControl::HandleScrollable | SFYControl::SetMinimumValue | SFYControl::SetMaximumValue | SFYControl::SetCurrentValue | SFXBevelColor | SFXRGBColor | SFXEvent | タイプ | 状態 | イベント | 値イベント[SFEVT_RESPONDER_VALUE]
[ protected, virtual ] virtual ~SFYScrollBarControl(Void);
このデストラクタは、何も行いません。
このデストラクタの内部実装は以下の通りです。
/*public virtual */SFYScrollBarControl::~SFYScrollBarControl(Void) { }// SFYScrollBarControl::~SFYScrollBarControl //
[ public ] Bool Decrement(Void);
この関数は、SFYScrollBarControl::SetScrollStepValue 関数で設定したスクロールステップだけ現在値を減らします。
このスクロールバーコントロールは、 値イベント [SFXEvent(SFEVT_RESPONDER_VALUE, SFP16_VALUE_CURRENT, 新しい現在値)] を受信します。
注意 | |
---|---|
スクロールバーコントロールを装着するレスポンダ(ターゲットレスポンダ) 側でスクロールバーコントロールの現在値を設定する場合、 この関数は使用しません。 この関数は、 スクロールバーコントロール側からターゲットレスポンダをスクロールしたい場合に使用します。 通常、ターゲットレスポンダ側でスクロールさせますので、 この関数を使用する機会は少ないと考えられます。 |
この関数の内部実装は以下の通りです。
/*public */Bool SFYScrollBarControl::Decrement(Void) { SInt32 cur(GetCurrentValue()); SInt32 min(GetMinimumValue()); Bool result(true); if (cur > min) { cur -= _scrollstep; cur = (cur > min) ? cur : min; SetCurrentValue(cur); } else { SetCurrentValue(min); result = false; } return result; }// SFYScrollBarControl::Decrement //
SFYScrollBarControl::SetScrollStepValue | SFYScrollBarControl::Increment | 値イベント[SFEVT_RESPONDER_VALUE]
[ protected, const ] Void DrawDecrement( SFXGraphicsPtr graphics // グラフィックスオブジェクト );
この関数は、減分矢印矩形領域を描画します。
独自の処理を行う場合は、この関数をオーバーライドします。
Tip | |
---|---|
この関数は、SFZScrollBarControl::HandleRenderRequest 関数内で呼び出されます。 |
この関数の内部実装は以下の通りです。
enum { MINIMUM_THUMB_LENGTH = 2, MINIMUM_MINOR_AXIS_SIZE = 2, INACTIVE_ARROW = 0x66 }; /*protected */Void SFYScrollBarControl::DrawDecrement(SFXGraphicsPtr graphics) const { SFXRGBColor arrow(GetArrowColor()); SFXBevelColor bevel(GetBevelColor()); SFXRectangleConstRef rc(GetDecrementArrowRectangle()); if (!rc.IsEmpty()) { if (!GetStateActive(true) || !IsScrollable()) { bevel.SetDark(bevel.GetBase()); bevel.SetLight(bevel.GetBase()); (arrow.GetBrightness() > 0x7F) ? arrow.SubRGB(INACTIVE_ARROW) : arrow.AddRGB(INACTIVE_ARROW); } if (GetOrientation() == VERTICAL) { graphics->FillBevelRectangle(rc, bevel); graphics->FillTriangle(CalculateTriangle(rc, SCROLL_UP), arrow); } else { graphics->FillBevelRectangle(rc, bevel); graphics->FillTriangle(CalculateTriangle(rc, SCROLL_LEFT), arrow); } } return; }// SFYScrollBarControl::DrawDecrement /*private */SFXTriangle SFYScrollBarControl::CalculateTriangle(SFXRectangleConstRef rect, ScrollDirectionEnum direction) const { SInt16 w; SInt16 h; SFXRectangle temp(rect); if (direction == SCROLL_UP || direction == SCROLL_DOWN) { h = rect.GetHeight() / 4; w = h * 2; } else { w = rect.GetWidth() / 4; h = w * 2; } temp.SetSize(w, h); temp.Offset((rect.GetWidth() - w - 1) / 2, (rect.GetHeight() - h - 1) / 2); return InscribedTriangle(temp, direction); }// SFZSoftKeyControl::CalculateTriangle // /*private */SFXTriangle SFYScrollBarControl::InscribedTriangle(SFXRectangleConstRef rect, ScrollDirectionEnum direction) const { SFXTriangle result; SInt16 x(rect.GetX()); SInt16 y(rect.GetY()); SInt16 w(rect.GetWidth()); SInt16 h(rect.GetHeight()); switch (direction) { case SCROLL_UP: result.Set(x + w / 2, y, x, y + h, x + w, y + h); break; case SCROLL_DOWN: result.Set(x, y, x + w, y, x + w / 2, y + h); break; case SCROLL_LEFT: result.Set(x + w, y, x, y + h / 2, x + w, y + h); break; case SCROLL_RIGHT: result.Set(x, y, x, y + h, x + w, y + h / 2); break; } return result; }// SFYScrollBarControl::InscribedTriangle //
SFZScrollBarControl::HandleRenderRequest | SFYScrollBarControl::DrawTrack | SFYScrollBarControl::DrawIncrement | SFYScrollBarControl::DrawThumb
[ protected, const ] Void DrawIncrement( SFXGraphicsPtr graphics // グラフィックスオブジェクト );
この関数は、増分矢印矩形領域を描画します。
独自の処理を行う場合は、この関数をオーバーライドします。
Tip | |
---|---|
この関数は、SFZScrollBarControl::HandleRenderRequest 関数内で呼び出されます。 |
この関数の内部実装は以下の通りです。
enum { MINIMUM_THUMB_LENGTH = 2, MINIMUM_MINOR_AXIS_SIZE = 2, INACTIVE_ARROW = 0x66 }; /*protected */Void SFYScrollBarControl::DrawIncrement(SFXGraphicsPtr graphics) const { SFXRGBColor arrow(GetArrowColor()); SFXBevelColor bevel(GetBevelColor()); SFXRectangleConstRef rc(GetIncrementArrowRectangle()); if (!rc.IsEmpty()) { if (!GetStateActive(true) || !IsScrollable()) { bevel.SetDark(bevel.GetBase()); bevel.SetLight(bevel.GetBase()); (arrow.GetBrightness() > 0x7F) ? arrow.SubRGB(INACTIVE_ARROW) : arrow.AddRGB(INACTIVE_ARROW); } if (GetOrientation() == VERTICAL) { graphics->FillBevelRectangle(rc, bevel); graphics->FillTriangle(CalculateTriangle(rc, SCROLL_DOWN), arrow); } else { graphics->FillBevelRectangle(rc, bevel); graphics->FillTriangle(CalculateTriangle(rc, SCROLL_RIGHT), arrow); } } return; }// SFYScrollBarControl::DrawIncrement // /*private */SFXTriangle SFYScrollBarControl::CalculateTriangle(SFXRectangleConstRef rect, ScrollDirectionEnum direction) const { SInt16 w; SInt16 h; SFXRectangle temp(rect); if (direction == SCROLL_UP || direction == SCROLL_DOWN) { h = rect.GetHeight() / 4; w = h * 2; } else { w = rect.GetWidth() / 4; h = w * 2; } temp.SetSize(w, h); temp.Offset((rect.GetWidth() - w - 1) / 2, (rect.GetHeight() - h - 1) / 2); return InscribedTriangle(temp, direction); }// SFZSoftKeyControl::CalculateTriangle // /*private */SFXTriangle SFYScrollBarControl::InscribedTriangle(SFXRectangleConstRef rect, ScrollDirectionEnum direction) const { SFXTriangle result; SInt16 x(rect.GetX()); SInt16 y(rect.GetY()); SInt16 w(rect.GetWidth()); SInt16 h(rect.GetHeight()); switch (direction) { case SCROLL_UP: result.Set(x + w / 2, y, x, y + h, x + w, y + h); break; case SCROLL_DOWN: result.Set(x, y, x + w, y, x + w / 2, y + h); break; case SCROLL_LEFT: result.Set(x + w, y, x, y + h / 2, x + w, y + h); break; case SCROLL_RIGHT: result.Set(x, y, x, y + h, x + w, y + h / 2); break; } return result; }// SFYScrollBarControl::InscribedTriangle //
SFZScrollBarControl::HandleRenderRequest | SFYScrollBarControl::DrawTrack | SFYScrollBarControl::DrawDecrement | SFYScrollBarControl::DrawThumb
[ protected, const ] Void DrawThumb( SFXGraphicsPtr graphics // グラフィックスオブジェクト );
この関数は、サム領域を描画します。
独自の処理を行う場合は、この関数をオーバーライドします。
Tip | |
---|---|
この関数は、SFZScrollBarControl::HandleRenderRequest 関数内で呼び出されます。 |
注意 | |
---|---|
『ページサイズ ≧ {(最大値) - (最小値)} 』の場合、 スクロール不可能状態になり、サム領域は描画されません。 |
この関数の内部実装は以下の通りです。
/*protected */Void SFYScrollBarControl::DrawThumb(SFXGraphicsPtr graphics) const { SFXBevelColor bevel(GetBevelColor()); if (IsScrollable()) { if (!GetStateActive(true)) { bevel.SetDark(bevel.GetBase()); bevel.SetLight(bevel.GetBase()); } graphics->FillBevelRectangle(GetThumbRectangle(), bevel); } return; }// SFYScrollBarControl::DrawThumb
SFZScrollBarControl::HandleRenderRequest | SFYScrollBarControl::DrawTrack | SFYScrollBarControl::DrawDecrement | SFYScrollBarControl::DrawIncrement
[ protected, const ] Void DrawTrack( SFXGraphicsPtr graphics // グラフィックスオブジェクト );
この関数は、トラック(厳密には全体部分)を描画します。
スクロールバーの下地を塗りつぶすときに利用します。
独自の処理を行う場合は、この関数をオーバーライドします。
Tip | |
---|---|
この関数は、SFZScrollBarControl::HandleRenderRequest 関数内で呼び出されます。 |
この関数の内部実装は以下の通りです。
/*protected */Void SFYScrollBarControl::DrawTrack(SFXGraphicsPtr graphics) const { graphics->FillRectangle(GetTrackRectangle(), GetTrackColor()); return; }// SFYScrollBarControl::DrawTrack //
SFZScrollBarControl::HandleRenderRequest | SFYScrollBarControl::DrawDecrement | SFYScrollBarControl::DrawIncrement | SFYScrollBarControl::DrawThumb
[ public, const ] SFXRGBColorConstRef GetArrowColor(Void);
増分 / 減分矢印(三角形部分)の色。
この関数は、矢印の色を取得します。
[ public, const ] SFXBevelColorConstRef GetBevelColor(Void);
スクロールバーの外枠を描画するためのベベルカラー(SFXBevelColor)。
この関数は、スクロールバーの外枠を描画するためのベベルカラーを取得します。
[ protected, const ] SFXRectangleConstRef GetDecrementArrowRectangle(Void);
減分矢印ラベルの領域。
この関数は、減分矢印矩形領域を取得します。
[ protected, const ] SFXRectangleConstRef GetIncrementArrowRectangle(Void);
増分矢印ラベルの領域。
この関数は、増分矢印矩形領域を取得します。
[ public ] OrientationEnum GetOrientation(Void);
スクロールバーの方向(SFYScrollBarControl::HORIZONTAL または SFYScrollBarControl::VERTICAL)。
この関数は、スクロールバーの方向(垂直か水平)を取得します。
[ public ] SInt32 GetPageValue(Void);
ページサイズ。
この関数は、ページサイズを取得します。
ページサイズはサムの長さに対応します。
実際のサムの長さは SFYScrollBarControl::GetThumbLength 関数を呼び出して取得します。
[ protected ] SInt16 GetScrollRange(Void);
スクロールレンジ。
この関数は、スクロールレンジを取得します。
注意 | |
---|---|
スクロールレンジは、トラックの長さからサムの長さを減算した値です。 |
[ public ] SInt32 GetScrollStepValue(Void);
スクロールステップの値。
この関数は、スクロールステップの値を取得します。
[ protected ] SInt16 GetThumbLength(Void);
サムラベルの長さ。
この関数は、サムの長さを取得します。
注意 | |
---|---|
サムの長さは、 SFYScrollBarControl::SetPageValue 関数を使用して設定するページサイズに対応します。 『ページサイズ ≧ {(最大値) - (最小値)} 』の場合、 スクロール不能状態にあり、サムは描画されません。このとき、『サムの長さ=トラックの長さ』となります。 『ページサイズ < {(最大値) - (最小値)} 』の場合、 スクロール可能であり、サムの長さは以下の値になります。
サムの長さ = max(トラックの長さ * ページサイズ / {(最大値) - (最小値)}, 2) // max(a, b) は、a と b の大きい方を表します
なお、最大値 / 最小値は、 SFYControl::SetMaximumValue / SFYControl::SetMinimumValue 関数を使用して設定します。 通常、最小値はデフォルト値の 0 を使用します。 最大値は、スクロールバーに表示する対象がコンテナ系レスポンダの場合は、 レスポンダ領域終端のローカル座標系の X または Y 座標の値になります(スクロール方向が水平の場合は X 座標、垂直の場合は Y 座標)。 トラックの長さは、スクロールバーコントロール矩形領域の長さから減分矢印矩形領域と増分矢印矩形領域の長さを減算した値になります (スクロール方向が水平の場合は X 成分の長さ、垂直の場合は Y 成分の長さ)。 |
[ protected, const ] SFXRectangle GetThumbRectangle(Void);
サム領域。
この関数は、サム領域を取得します。
[ protected ] SInt16 GetThumbTop(Void);
サムトップの位置(垂直スクロールバーの場合は Y 座標の値、水平スクロールバーの場合は X 座標の値)。
この関数は、サムトップの位置を取得します。
注意 | |
---|---|
原点は、減分矢印とトラックの境界となります。 |
[ public, const ] SFXRGBColorConstRef GetTrackColor(Void);
トラック矩形を塗り潰す色。
この関数は、トラック矩形を塗り潰す色を取得します。
[ protected, const ] SFXRectangleConstRef GetTrackRectangle(Void);
トラック領域。
この関数は、トラック領域を取得します。
注意 | |
---|---|
トラック領域は、 スクロールバーコントロール矩形領域から減分矢印矩形領域と増分矢印矩形領域を除いた領域になります 詳細は、SFYScrollBarControl::RelocateTrackAndArrow 関数の内部実装コードを参照してください。 |
SFYScrollBarControl::SetTrackRectangle | SFYScrollBarControl::GetDecrementArrowRectangle | SFYScrollBarControl::GetIncrementArrowRectangle
[ protected, virtual ] Void HandleBoundVirtual(Void);
この関数は、領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, rectangle)] を受信したときに呼び出されます。
仮想領域の変更時に追加の処理を行いたい場合は、この関数をオーバーライドします。
デフォルトの実装は、スクロールバー部品を再配置させます。
領域イベント[(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL) イベント] | |
---|---|
SFYResponder::SetRealBound / SFYResponder::SetVirtualBound 関数は、 この関数内の処理により仮想領域が変化すると、 領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, rectangle)] をレスポンダに送信します。 SFYWidget クラスを継承するレスポンダが領域イベントを受信すると、 SFYWidget::SFYWidget コンストラクタで最初に登録した領域イベント専用ハンドラの処理により、 SFYWidget::HandleBoundVirtual 仮想関数が呼び出されます。 ※ 領域イベントの P32 パラメータ rectangle には変更後の仮想領域が設定されています。 |
仮想領域の変更処理 | |
---|---|
SFYWidget::HandleBoundVirtual 仮想関数をオーバーライドする以外に、 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]を定義・実装し レスポンダに登録して行うことも可能です。 仮想領域の変更処理は、最初に SFYWidget::HandleBoundVirtual 仮想関数を実行し、 次に領域イベント専用ハンドラを登録した順に実行して行われます。 領域イベント専用ハンドラを宣言し登録する手間が省けるので、 通常は SFYWidget::HandleBoundVirtual 仮想関数をオーバーライドして処理を記述します。 |
この関数の内部実装は以下の通りです。
enum { MINIMUM_THUMB_LENGTH = 2, MINIMUM_MINOR_AXIS_SIZE = 2, INACTIVE_ARROW = 0x66 }; /*protected virtual */Void SFYScrollBarControl::HandleBoundVirtual(Void) { Relocate(); return; }// SFYScrollBarControl::HandleBoundVirtual // /*private */Void SFYScrollBarControl::Relocate(Void) { RelocateTrackAndArrow(); RelocateThumb(); return; }// SFYScrollBarControl::Relocate // /*private */Void SFYScrollBarControl::RelocateThumbLength(Void) { SInt32Const min(GetMinimumValue()); SInt32Const max(GetMaximumValue()); SFXRectangleConst rc(GetLocalBound()); SInt16 track; track = (_scrollbar.orient == VERTICAL) ? _track.GetHeight() : _track.GetWidth(); track = (track > 0) ? track : 0; _scrollbar.thumbLength = static_cast<SInt16>(track * _pagesize / (max - min)); if ((_scrollbar.thumbLength < MINIMUM_THUMB_LENGTH) && (MINIMUM_THUMB_LENGTH < track)) { _scrollbar.thumbLength = MINIMUM_THUMB_LENGTH; } _scrollbar.scrollRange = track - _scrollbar.thumbLength; return; }// SFYScrollBarControl::RelocateThumbLength // /*private */ Void SFYScrollBarControl::RelocateThumbTop(Void) { SInt32Const cur(GetCurrentValue()); SInt32Const min(GetMinimumValue()); SInt32Const max(GetMaximumValue()); if (max - min > _pagesize) { // This is always true. // _scrollbar.thumbTop = static_cast<SInt16>(_scrollbar.scrollRange * (cur - min) / (max - min - _pagesize)); } else { _scrollbar.thumbTop = 0; } return; }// SFYScrollBarControl::RelocateThumbTop //
[ protected, virtual ] Void HandleScrollable(Void);
この関数は、スクロール可能状態が変化したときに呼び出されます。
独自の処理を行いたい場合は、この関数をオーバーライドします。
デフォルトの実装は、 スクロールバーイベント [SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0)] を送信します。
この関数の内部実装は以下の通りです。
/*protected virtual */Void SFYScrollBarControl::HandleScrollable(Void) { InvokeBackward(SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0), true); return; }// SFYScrollBarControl::HandleScrollable //
[ public ] Bool Increment(Void);
この関数は、SFYScrollBarControl::SetScrollStepValue 関数で設定したスクロールステップだけ現在値を増やします。
このスクロールバーコントロールは、 値イベント [SFXEvent(SFEVT_RESPONDER_VALUE, SFP16_VALUE_CURRENT, 新しい現在値)] を受信します。
注意 | |
---|---|
スクロールバーコントロールを装着するレスポンダ(ターゲットレスポンダ) 側でスクロールバーコントロールの現在値を設定する場合、 この関数は使用しません。 この関数は、 スクロールバーコントロール側からターゲットレスポンダをスクロールしたい場合に使用します。 通常、ターゲットレスポンダ側でスクロールさせますので、 この関数を使用する機会は少ないと考えられます。 |
この関数の内部実装は以下の通りです。
/*public */Bool SFYScrollBarControl::Increment(Void) { SInt32 cur(GetCurrentValue()); SInt32 max(GetMaximumValue()); Bool result(true); if (cur < max) { cur += _scrollstep; cur = (cur < max) ? cur : max; SetCurrentValue(cur); } else { SetCurrentValue(max); result = false; } return result; }// SFYScrollBarControl::Increment //
SFYScrollBarControl::SetScrollStepValue | SFYScrollBarControl::Decrement | 値イベント[SFEVT_RESPONDER_VALUE]
[ public, const ] Bool IsScrollable(Void);
この関数は、スクロール可能かどうかを判定します。
この関数の内部実装は以下の通りです。
/*public */inline Bool SFYScrollBarControl::IsScrollable(Void) const { return _scrollable; }// SFYScrollBarControl::IsScrollable //
[ protected, virtual ] Void RelocateTrackAndArrow(Void);
この関数は、トラック矩形領域と減分・増分矢印矩形領域を再配置します。
デフォルトの実装は、 ローカル領域と方向 (orientation) を元に減分矢印矩形領域、トラック矩形領域、増分矢印矩形領域を順番に並べて再配置します。
スクロールバーコントロールでは、 SFYScrollBarControl::HandleBoundVirtual 関数のオーバーライドは非推奨です。 トラック矩形領域や減分・増分矢印矩形領域の大きさや配置を変更するには、この関数をオーバーライドします。
/*protected virtual */Void SFYScrollBarControl::RelocateTrackAndArrow(Void) { SFXRectangleConst rc(GetLocalBound()); SInt16 side; SInt16 length; if (_scrollbar.orient == VERTICAL) { side = rc.GetWidth(); length = (side + side < rc.GetHeight()) ? side : rc.GetHeight() / 2; _decrementArrow.Set(rc).SetHeight(length); _track.Set(rc).AddY(length).SubHeight(length + length); _incrementArrow.Set(_decrementArrow).AddY(_track.GetHeight() + length); } else { side = rc.GetHeight(); length = (side + side < rc.GetWidth()) ? side : rc.GetWidth() / 2; _decrementArrow.Set(rc).SetWidth(length); _track.Set(rc).AddX(length).SubWidth(length + length); _incrementArrow.Set(_decrementArrow).AddX(_track.GetWidth() + length); } return; }// SFYScrollBarControl::RelocateTrackAndArrow //
[ public ] Void SetArrowColor( SFXRGBColorConstRef param // 設定する値 );
この関数は、矢印ラベル(三角形)の色を設定します。
デフォルト値: SFXRGBColor(0x00, 0x00, 0x00, 0x00)[黒色]
このスクロールバーコントロールは、 矢印ラベル(三角形)の色が変更されると、 スタイルイベント [SFXEvent(SFEVT_RESPONDER_STYLE, SFP16_STYLE_COLOR, 0)] を受信します。
[ public ] Void SetBevelColor( SFXBevelColorConstRef param // 設定する値 );
この関数は、 スクロールバーの外枠を描画するためのベベルカラー(SFXBevelColor)を設定します。
デフォルト値: SFXBevelColor(SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00), SFXRGBColor(0xCC, 0xCC, 0xCC, 0x00), SFXRGBColor(0x88, 0x88, 0x88, 0x00))
このスクロールバーコントロールは、 スクロールバーの外枠を描画するためのベベルカラーが変更されると、 スタイルイベント [SFXEvent(SFEVT_RESPONDER_STYLE, SFP16_STYLE_COLOR, 0)] を受信します。
[ protected ] Void SetDecrementArrowRectangle( SFXRectangleConstRef param // 設定する値 );
この関数は、減分矢印矩形領域を設定します。
デフォルトの設定は、 SFYScrollBarControl::RelocateTrackAndArrow 関数で行われます。 詳細は、SFYScrollBarControl::RelocateTrackAndArrow 関数の内部実装コードを参照してください。
注意 | |
---|---|
この関数は、 スクロールバーのデフォルトレイアウトをカスタマイズしたい場合に限り利用します。 SFYScrollBarControl::RelocateTrackAndArrow 関数もスクロールバーのレイアウト変更に合わせてオーバーライドする必要があります。 |
この関数の内部実装は以下の通りです。
/*protected */inline Void SFYScrollBarControl::SetDecrementArrowRectangle(SFXRectangleConstRef param) { _decrementArrow.Set(param); }// SFYScrollBarControl::SetDecrementArrowRectangle //
SFYScrollBarControl::GetDecrementArrowRectangle | SFYScrollBarControl::RelocateTrackAndArrow | SFYResponder::Invalidate
[ protected ] Void SetIncrementArrowRectangle( SFXRectangleConstRef param // 設定する値 );
この関数は、増分矢印矩形領域を設定します。
デフォルトの設定は、 SFYScrollBarControl::RelocateTrackAndArrow 関数で行われます。 詳細は、SFYScrollBarControl::RelocateTrackAndArrow 関数の内部実装コードを参照してください。
注意 | |
---|---|
この関数は、 スクロールバーのデフォルトレイアウトをカスタマイズしたい場合に限り利用します。 SFYScrollBarControl::RelocateTrackAndArrow 関数もスクロールバーのレイアウト変更に合わせてオーバーライドする必要があります。 |
この関数の内部実装は以下の通りです。
/*protected */inline Void SFYScrollBarControl::SetIncrementArrowRectangle(SFXRectangleConstRef param) { _incrementArrow.Set(param); }// SFYScrollBarControl::SetIncrementArrowRectangle //
SFYScrollBarControl::GetIncrementArrowRectangle | SFYScrollBarControl::RelocateTrackAndArrow | SFYResponder::Invalidate
[ public ] Void SetOrientation( OrientationEnum param // 設定する値 );
この関数は、スクロールバーの方向を設定します。
水平(SFYScrollBarControl::HORIZONTAL)または垂直(SFYScrollBarControl::VERTICAL)を設定します。
デフォルト値: SFYScrollBarControl::VERTICAL
スクロールバーの方向が変更される場合は、 領域の再配置が行われます。
この関数は、ページサイズを設定します。
このスクロールバーコントロールは、スクロール可能状態が変化した場合、 スクロールバーイベント [SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0)] を受信します。
注意 | |
---|---|
param 引数には、1 以上の整数を指定します。 ページサイズはサムの長さに対応します。 『ページサイズ ≧ {(最大値) - (最小値)} 』の場合、 スクロール不可能であり、スクロールバーコントロールのサムは描画されません。 このとき、 サムの長さ(SFYScrollBarControl::GetThumbLength 関数の戻り値)は 0 になります。 『ページサイズ < {(最大値) - (最小値)} 』の場合、 スクロール可能であり、以下の長さのサムが描画されます。 サムの長さ = max(トラックの長さ * ページサイズ / {(最大値) - (最小値)}, 2) // max(a, b) は、a と b の大きい方を表します
なお、最大値 / 最小値は、 SFYControl::SetMaximumValue / SFYControl::SetMinimumValue 関数を使用して設定します。 通常、最小値はデフォルト値の 0 を使用します。 最大値は、スクロールバーに表示する対象がコンテナ系レスポンダの場合は、 レスポンダ領域終端のローカル座標系の X または Y 座標の値になります(スクロール方向が水平の場合は X 座標、垂直の場合は Y 座標)。 トラックの長さは、スクロールバーコントロール矩形領域の長さから減分矢印矩形領域と増分矢印矩形領域の長さを減算した値になります (スクロール方向が水平の場合は X 成分の長さ、垂直の場合は Y 成分の長さ)。 |
この関数の内部実装は以下の通りです。
/*public */Void SFYScrollBarControl::SetPageValue(SInt32 param) { if (_pagesize != param) { _pagesize = param; QueryScrollable(); RelocateThumb(); Invalidate(); } return; }// SFYScrollBarControl::SetPageValue // /*private */Void SFYScrollBarControl::QueryScrollable(Void) { SInt32Const min(GetMinimumValue()); SInt32Const max(GetMaximumValue()); if (((max > min) && (max - min > _pagesize)) ^ !(!_scrollable)) { _scrollable = !_scrollable; HandleScrollable(); } return; }// SFYScrollBarControl::QueryScrollable // /*protected virtual */Void SFYScrollBarControl::HandleScrollable(Void) { InvokeBackward(SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0), true); return; }// SFYScrollBarControl::HandleScrollable // /*private */Void SFYScrollBarControl::RelocateThumb(Void) { if (IsScrollable()) { RelocateThumbLength(); RelocateThumbTop(); } else { _scrollbar.thumbLength = 0; } return; }// SFYScrollBarControl::RelocateThumb // /*private */Void SFYScrollBarControl::RelocateThumbLength(Void) { SInt32Const min(GetMinimumValue()); SInt32Const max(GetMaximumValue()); SFXRectangleConst rc(GetLocalBound()); SInt16 track; track = (_scrollbar.orient == VERTICAL) ? _track.GetHeight() : _track.GetWidth(); track = (track > 0) ? track : 0; _scrollbar.thumbLength = static_cast<SInt16>(track * _pagesize / (max - min)); if ((_scrollbar.thumbLength < MINIMUM_THUMB_LENGTH) && (MINIMUM_THUMB_LENGTH < track)) { _scrollbar.thumbLength = MINIMUM_THUMB_LENGTH; } _scrollbar.scrollRange = track - _scrollbar.thumbLength; return; }// SFYScrollBarControl::RelocateThumbLength // /*private */ Void SFYScrollBarControl::RelocateThumbTop(Void) { SInt32Const cur(GetCurrentValue()); SInt32Const min(GetMinimumValue()); SInt32Const max(GetMaximumValue()); if (max - min > _pagesize) { // This is always true. // _scrollbar.thumbTop = static_cast<SInt16>(_scrollbar.scrollRange * (cur - min) / (max - min - _pagesize)); } else { _scrollbar.thumbTop = 0; } return; }// SFYScrollBarControl::RelocateThumbTop //
SFYScrollBarControl::GetPageValue | SFYScrollBarControl::GetThumbLength | SFYScrollBarControl::GetTrackRectangle | スクロールバーイベント [SFEVT_RESPONDER_SCROLLBAR]
この関数は、スクロールステップ (SFYScrollBarControl::Increment / SFYScrollBarControl::Decrement 関数で現在値を増減する単位)を設定します。
注意 | |
---|---|
スクロールバーコントロールを装着するレスポンダ(ターゲットレスポンダ) 側でスクロールバーコントロールの現在値を増減する場合、 この関数は使用しません。 この関数は、 スクロールバーコントロール側からターゲットレスポンダをスクロールしたい場合に使用します。 通常、ターゲットレスポンダ側でスクロールさせますので、 この関数を使用する機会は少ないと考えられます。 |
この関数の内部実装は以下の通りです。
/*public */Void SFYScrollBarControl::SetScrollStepValue(SInt32 param) { if (_scrollstep != param) { _scrollstep = param; } return; }// SFYScrollBarControl::SetScrollStepValue //
SFYScrollBarControl::GetScrollStepValue | SFYScrollBarControl::Decrement | SFYScrollBarControl::Increment
[ public ] Void SetTrackColor( SFXRGBColorConstRef param // 設定する値 );
この関数は、トラック矩形を塗り潰す色を設定します。
デフォルト値: SFXRGBColor(0xF0, 0xF0, 0xF0, 0x00)[薄灰色]
このスクロールバーコントロールは、 トラック矩形を塗り潰す色が変更されると、 スタイルイベント [SFXEvent(SFEVT_RESPONDER_STYLE, SFP16_STYLE_COLOR, 0)] を受信します。
[ protected ] Void SetTrackRectangle( SFXRectangleConstRef param // 設定する値 );
この関数は、トラック領域を設定します。
デフォルトの設定は、 SFYScrollBarControl::RelocateTrackAndArrow 関数で行われます。 詳細は、SFYScrollBarControl::RelocateTrackAndArrow 関数の内部実装コードを参照してください。
注意 | |
---|---|
この関数は、 スクロールバーのデフォルトレイアウトをカスタマイズしたい場合に限り利用します。 SFYScrollBarControl::RelocateTrackAndArrow 関数もスクロールバーのレイアウト変更に合わせてオーバーライドする必要があります。 |
この関数の内部実装は以下の通りです。
/*protected */inline Void SFYScrollBarControl::SetTrackRectangle(SFXRectangleConstRef param) { _track.Set(param); return; }// SFYScrollBarControl::SetTrackRectangle //
SFYScrollBarControl::GetTrackRectangle | SFYScrollBarControl::RelocateTrackAndArrow | SFYResponder::Invalidate
enum CodeEnum { CODE_TYPE = four_char_code('.', 's', 'c', 'r') }; SFMTYPEDEFTYPE(CodeEnum)
enum OrientationEnum { HORIZONTAL = 0, // 水平方向 VERTICAL, // 垂直方向 DEFAULT_ORIENTATION = VERTICAL // デフォルト }; SFMTYPEDEFTYPE(OrientationEnum)
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |