Files
lazarus-ccr/components/nvidia-widgets/src/nvbasefont.pas
blaszijk 9769ec83c5 reorganized library sources to be more logical
updated project paths for examples

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2236 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2012-01-06 20:32:26 +00:00

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.