with Allegro.Bitmaps; use Allegro.Bitmaps;
with Objects; use Objects;
with Processes; use Processes;
with Widgets.Containers.Windows; use Widgets.Containers.Windows;
private with Ada.Real_Time;
package Renderers is
type Renderer is new Object and Process with private;
type A_Renderer is access all Renderer'Class;
function Create_Renderer( win : not null A_Window;
fps : Positive ) return A_Renderer;
pragma Postcondition( Create_Renderer'Result /= null );
function Copy( src : A_Renderer ) return A_Renderer;
pragma Postcondition( Copy'Result /= src or else src = null );
procedure Delete( this : in out A_Renderer );
pragma Postcondition( this = null );
procedure Use_Software_Mouse;
private
use Ada.Real_Time;
using_sw_mouse : Boolean := False;
type Page_Index is mod 2;
type Page_Array is array(Page_Index) of A_Bitmap;
type Renderer is new Object and Process with
record
win : A_Window := null;
videoPages : Page_Array;
drawPage : Page_Index := Page_Array'Last;
frameDelta : Time_Span := Time_Span_Zero;
lastFrame : Time := Time_First;
end record;
procedure Adjust( this : access Renderer );
procedure Construct( this : access Renderer;
win : A_Window;
fps : Positive );
procedure Delete( this : in out Renderer );
procedure Draw_Frame( this : access Renderer;
vpage : A_Bitmap;
dt : Time_Span );
function Get_Process_Name( this : access Renderer ) return String;
procedure Tick( this : access Renderer; time : Tick_Time );
end Renderers;