154 lines
5.9 KiB
Ada
154 lines
5.9 KiB
Ada
with
|
|
openGL.Glyph.Container,
|
|
freetype.Face,
|
|
freetype.charMap,
|
|
Freetype_C,
|
|
interfaces.C.Pointers;
|
|
|
|
limited
|
|
with
|
|
openGL.Font;
|
|
|
|
private
|
|
with
|
|
freetype.face_Size;
|
|
|
|
package openGL.FontImpl
|
|
--
|
|
-- Implements an openGL font.
|
|
--
|
|
is
|
|
type Item is tagged limited private;
|
|
type View is access all Item'Class;
|
|
|
|
|
|
---------
|
|
-- Types
|
|
--
|
|
|
|
type RenderMode is (RENDER_FRONT, RENDER_BACK, RENDER_SIDE, RENDER_ALL);
|
|
|
|
for RenderMode use (RENDER_FRONT => 16#0001#,
|
|
RENDER_BACK => 16#0002#,
|
|
RENDER_SIDE => 16#0004#,
|
|
RENDER_ALL => 16#ffff#);
|
|
|
|
type TextAlignment is (ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFY);
|
|
|
|
for TextAlignment use (ALIGN_LEFT => 0,
|
|
ALIGN_CENTER => 1,
|
|
ALIGN_RIGHT => 2,
|
|
ALIGN_JUSTIFY => 3);
|
|
|
|
|
|
-- unsigned_char_Pointer
|
|
--
|
|
|
|
use Interfaces;
|
|
|
|
type unsigned_char_array is array (C.size_t range <>) of aliased C.unsigned_char;
|
|
|
|
package unsigned_char_Pointers is new C.Pointers (Index => C.size_t,
|
|
Element => C.unsigned_char,
|
|
Element_array => unsigned_char_array,
|
|
default_Terminator => 0);
|
|
subtype unsigned_char_Pointer is unsigned_char_Pointers.Pointer;
|
|
|
|
|
|
---------
|
|
-- Forge
|
|
--
|
|
|
|
procedure define (Self : access Item; ftFont : access Font.item'Class;
|
|
fontFilePath : in String);
|
|
|
|
procedure define (Self : access Item; ftFont : access Font.item'Class;
|
|
pBufferBytes : access C.unsigned_char;
|
|
bufferSizeInBytes : in Integer);
|
|
procedure destruct (Self : in out Item);
|
|
|
|
|
|
---------------
|
|
-- 'Protected' ~ For derived class use only.
|
|
--
|
|
|
|
function Err (Self : in Item) return freetype_c.FT_Error;
|
|
|
|
function attach (Self : access Item; fontFilePath : in String) return Boolean;
|
|
function attach (Self : access Item; pBufferBytes : access C.unsigned_char;
|
|
bufferSizeInBytes : in Integer) return Boolean;
|
|
|
|
function FaceSize (Self : access Item; Size : in Natural;
|
|
x_Res,
|
|
y_Res : in Natural) return Boolean;
|
|
function FaceSize (Self : in Item) return Natural;
|
|
|
|
procedure Depth (Self : in out Item; Depth : in Real);
|
|
procedure Outset (Self : in out Item; Outset : in Real);
|
|
procedure Outset (Self : in out Item; Front : in Real;
|
|
Back : in Real);
|
|
|
|
procedure GlyphLoadFlags (Self : in out Item; Flags : in freetype_c.FT_Int);
|
|
|
|
function CharMap (Self : access Item; Encoding : in freetype_c.FT_Encoding) return Boolean;
|
|
function CharMapCount (Self : in Item) return Natural;
|
|
function CharMapList (Self : access Item) return freetype.face.FT_Encodings_view;
|
|
|
|
function Ascender (Self : in Item) return Real;
|
|
function Descender (Self : in Item) return Real;
|
|
function LineHeight (Self : in Item) return Real;
|
|
|
|
function BBox (Self : access Item; Text : in String;
|
|
Length : in Integer;
|
|
Position : in Vector_3;
|
|
Spacing : in Vector_3) return Bounds;
|
|
|
|
function Advance (Self : access Item; Text : in String;
|
|
Length : in Integer;
|
|
Spacing : in Vector_3) return Real;
|
|
|
|
function kern_Advance (Self : in Item; From, To : in Character) return Real;
|
|
|
|
|
|
function x_PPEM (Self : in Item) return Real;
|
|
function x_Scale (Self : in Item) return Real;
|
|
function y_Scale (Self : in Item) return Real;
|
|
|
|
function render (Self : access Item; Text : in String;
|
|
Length : in Integer;
|
|
Position : in Vector_3;
|
|
Spacing : in Vector_3;
|
|
renderMode : in Integer) return Vector_3;
|
|
|
|
|
|
private
|
|
|
|
type glyph_Container_view is access all openGL.Glyph.Container.item'Class;
|
|
|
|
|
|
type Item is tagged limited
|
|
record
|
|
Face : aliased freetype.Face.item; -- Current face object.
|
|
charSize : freetype.face_Size.item; -- Current size object.
|
|
|
|
load_Flags : freetype_c.FT_Int; -- The default glyph loading flags.
|
|
Err : freetype_c.FT_Error; -- Current error code. Zero means no error.
|
|
|
|
Intf : access Font.item'Class; -- A link back to the interface of which we implement.
|
|
glyphList : Glyph_Container_view; -- An object that holds a list of glyphs
|
|
|
|
Pen : Vector_3; -- Current pen or cursor position;
|
|
end record;
|
|
|
|
|
|
function CheckGlyph (Self : access Item; Character : in freetype.charmap.CharacterCode) return Boolean;
|
|
--
|
|
-- Check that the glyph at <code>chr</code> exist. If not load it.
|
|
--
|
|
-- Character: The character index.
|
|
--
|
|
-- Returns true if the glyph can be created.
|
|
|
|
|
|
end openGL.FontImpl;
|