Files
freetype/pascal/test/gdriver.pas
2023-08-27 18:03:45 +02:00

124 lines
3.8 KiB
ObjectPascal

(*******************************************************************
*
* gdriver : Graphics utility driver generic interface 1.1
*
* Generic interface for all drivers of the graphics utility used
* by the FreeType test programs.
*
* Copyright 1996 David Turner, Robert Wilhelm and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
* modified and distributed under the terms of the FreeType project
* license, LICENSE.TXT. By continuing to use, modify or distribute
* this file you indicate that you have read the license and
* understand and accept it fully.
*
******************************************************************)
Unit GDriver;
interface
uses GEvents, GMain;
(* Note that we now support an event based model, even with */
/* full-screen modes. It is the responsability of the driver */
/* to map its events to the TEvent structure when called */
/* through Get_Event *)
type
Event = record
what : GEvent; (* event class *)
info : Int; (* event parameter *)
end;
(* the event classes are defined in the file 'gevents.h' included *)
(* by the test programs, not by the graphics utility *)
procedure Get_Event( var ev : Event );
(* get last event. In full-screen modes, a key-stroke must be */
/* translated to an event class with a parameter. *)
function Driver_Set_Graphics( mode : Int ) : boolean;
(* A call to this function must set the graphics mode, the Vio *)
(* variable, as well as the values vio_ScanLineWidth, vio_Width *)
(* and vio_Height *)
function Driver_Restore_Mode : boolean;
(* Restore previous mode or release display buffer/window *)
procedure Driver_Display_Bitmap( var buff; line, col : Int );
(* Display bitmap on screen *)
implementation
{$IFDEF OS2}
uses Os2Base, CRT;
{$I GDRV_OS2.INC}
{$ELSE}
uses CRT;
{$I GDRV_DOS.INC}
{$ENDIF}
type
Translator = record
key : char;
ev_class : GEvent;
ev_info : Int;
end;
const
Num_Translators = 15;
Translators : array[1..Num_Translators] of Translator
= (
(key:#27; ev_class:event_Quit ; ev_info:0),
(key:'x'; ev_class: event_Rotate_Glyph; ev_info: -1),
(key:'c'; ev_class: event_Rotate_Glyph; ev_info: 1),
(key:'v'; ev_class: event_Rotate_Glyph; ev_info: -16),
(key:'b'; ev_class: event_Rotate_Glyph; ev_info: 16),
(key:'9'; ev_class: event_Change_Glyph; ev_info:-100),
(key:'0'; ev_class: event_Change_Glyph; ev_info: 100),
(key:'i'; ev_class: event_Change_Glyph; ev_info: -10),
(key:'o'; ev_class: event_Change_Glyph; ev_info: 10),
(key:'k'; ev_class: event_Change_Glyph; ev_info: -1),
(key:'l'; ev_class: event_Change_Glyph; ev_info: 1),
(key:'+'; ev_class: event_Scale_Glyph; ev_info: 10),
(key:'-'; ev_class: event_Scale_Glyph; ev_info: -10),
(key:'u'; ev_class: event_Scale_Glyph; ev_info: 1),
(key:'j'; ev_class: event_Scale_Glyph; ev_info: -1)
);
procedure Get_Event( var ev : Event );
var
i : Int;
c : char;
begin
c := ReadKey;
for i := 1 to Num_Translators do
begin
if c = translators[i].key then
begin
ev.what := translators[i].ev_class;
ev.info := translators[i].ev_info;
exit;
end;
end;
(* unrecognized keystroke *)
ev.what := event_Keyboard;
ev.info := Int(c);
end;
end.