You've already forked lazarus-ccr
82 lines
1.8 KiB
ObjectPascal
82 lines
1.8 KiB
ObjectPascal
![]() |
unit nvBaseFont;
|
||
|
|
||
|
{$mode objfpc}{$H+}
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses
|
||
|
fpimage;
|
||
|
|
||
|
type
|
||
|
|
||
|
{ TNVBaseFont }
|
||
|
|
||
|
TNVBaseFont = class
|
||
|
private
|
||
|
FAngle: double;
|
||
|
FFlags: word;
|
||
|
FName: string;
|
||
|
FSize: integer;
|
||
|
|
||
|
function GetFlags(AIndex: integer): boolean;
|
||
|
procedure SetFlags(AIndex: integer; AValue: boolean);
|
||
|
protected
|
||
|
procedure SetAngle(AValue: double); virtual;
|
||
|
public
|
||
|
constructor Create(AName: string; ASize: integer);
|
||
|
|
||
|
//font characteristics
|
||
|
property Name: string read FName;
|
||
|
property Size: integer read FSize;
|
||
|
|
||
|
//text metrics
|
||
|
function TextHeight(Text: string): integer; virtual; abstract;
|
||
|
function TextWidth(Text: string): integer; virtual; abstract;
|
||
|
procedure TextSize(Text: string; var w, h: integer); virtual; abstract;
|
||
|
|
||
|
//font flags <<possibly not implemented for all font classes>>
|
||
|
property Angle: double read FAngle write SetAngle;
|
||
|
property Bold: boolean index 1 read GetFlags write SetFlags;
|
||
|
property Italic: boolean index 2 read GetFlags write SetFlags;
|
||
|
property StrikeTrough: boolean index 3 read GetFlags write SetFlags;
|
||
|
property Underline: boolean index 4 read GetFlags write SetFlags;
|
||
|
|
||
|
//printing function
|
||
|
procedure TextOut(x, y: double; Text: string); virtual; abstract;
|
||
|
end;
|
||
|
|
||
|
|
||
|
implementation
|
||
|
|
||
|
{ TNVBaseFont }
|
||
|
|
||
|
function TNVBaseFont.GetFlags(AIndex: integer): boolean;
|
||
|
begin
|
||
|
Result := (FFlags and (1 shl AIndex)) <> 0;
|
||
|
end;
|
||
|
|
||
|
procedure TNVBaseFont.SetFlags(AIndex: integer; AValue: boolean);
|
||
|
begin
|
||
|
if AValue then
|
||
|
FFlags := FFlags or (1 shl AIndex)
|
||
|
else
|
||
|
FFlags := FFlags and not (1 shl AIndex);
|
||
|
end;
|
||
|
|
||
|
procedure TNVBaseFont.SetAngle(AValue: double);
|
||
|
begin
|
||
|
if FAngle <> AValue then
|
||
|
FAngle := AValue;
|
||
|
end;
|
||
|
|
||
|
constructor TNVBaseFont.Create(AName: string; ASize: integer);
|
||
|
begin
|
||
|
FAngle := 0;
|
||
|
FFlags:= 0;
|
||
|
FName := AName;
|
||
|
FSize := ASize;
|
||
|
end;
|
||
|
|
||
|
end.
|
||
|
|