124 lines
3.8 KiB
ObjectPascal
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.
|
|
|