package Widgets.Scrollbars is
type Scrollbar is abstract new Widget and Resize_Listener with private;
procedure Calculate_Button( this : access Scrollbar; min, max : out Integer ) is abstract;
procedure Set_Client( this : not null access Scrollbar'Class; client : A_Widget );
type H_Scrollbar is new Scrollbar with private;
type A_H_Scrollbar is access all H_Scrollbar'Class;
function Create_H_Scrollbar( view : not null access Game_Views.Game_View'Class;
id : String ) return A_H_Scrollbar;
pragma Precondition( id'Length > 0 );
pragma Postcondition( Create_H_Scrollbar'Result /= null );
type V_Scrollbar is new Scrollbar with private;
type A_V_Scrollbar is access all V_Scrollbar'Class;
function Create_V_Scrollbar( view : not null access Game_Views.Game_View'Class;
id : String ) return A_V_Scrollbar;
pragma Precondition( id'Length > 0 );
pragma Postcondition( Create_V_Scrollbar'Result /= null );
private
type Scrollbar is abstract new Widget and Resize_Listener with
record
client : A_Widget := null;
pageUp,
pageDown,
dragging : Boolean := False;
dragPos : Integer := 0;
end record;
procedure Construct( this : access Scrollbar;
view : not null access Game_Views.Game_View'Class;
id : String );
pragma Precondition( id'Length > 0 );
procedure Delete( this : in out Scrollbar );
procedure Handle_Action( this : access Scrollbar;
action : A_Resize_Action );
procedure Handle_Mouse_Release( this : access Scrollbar;
evt : not null A_Mouse_Button_Event );
type H_Scrollbar is new Scrollbar with null record;
procedure Calculate_Button( this : access H_Scrollbar; min, max : out Integer );
procedure Draw_Content( this : access H_Scrollbar; dc : Drawing_Context );
procedure Handle_Mouse_Held( this : access H_Scrollbar;
evt : not null A_Mouse_Button_Event );
procedure Handle_Mouse_Move( this : access H_Scrollbar;
evt : not null A_Mouse_Event );
procedure Handle_Mouse_Press( this : access H_Scrollbar;
evt : not null A_Mouse_Button_Event );
type V_Scrollbar is new Scrollbar with null record;
procedure Calculate_Button( this : access V_Scrollbar; min, max : out Integer );
procedure Draw_Content( this : access V_Scrollbar; dc : Drawing_Context );
procedure Handle_Mouse_Held( this : access V_Scrollbar;
evt : not null A_Mouse_Button_Event );
procedure Handle_Mouse_Move( this : access V_Scrollbar;
evt : not null A_Mouse_Event );
procedure Handle_Mouse_Press( this : access V_Scrollbar;
evt : not null A_Mouse_Button_Event );
end Widgets.Scrollbars;