245 lines
5.7 KiB
Ada
245 lines
5.7 KiB
Ada
with
|
|
ada.unchecked_Deallocation;
|
|
|
|
|
|
package body openGL.Font
|
|
is
|
|
-----------
|
|
-- Utility
|
|
--
|
|
|
|
function Hash (the_Id : in font_Id) return ada.Containers.Hash_type
|
|
is
|
|
use ada.Containers;
|
|
begin
|
|
return Hash (the_Id.Name) + Hash_type (the_Id.Size);
|
|
end Hash;
|
|
|
|
|
|
---------
|
|
-- Forge
|
|
--
|
|
|
|
procedure define (Self : in out Item; fontFilePath : in String)
|
|
is
|
|
begin
|
|
Self.Impl := new FontImpl.item;
|
|
Self.Impl.define (Self'Access, fontFilePath);
|
|
end define;
|
|
|
|
|
|
procedure define (Self : in out Item; pBufferBytes : in FontImpl.unsigned_char_Pointer;
|
|
bufferSizeInBytes : in Natural)
|
|
is
|
|
begin
|
|
Self.Impl := new FontImpl.item;
|
|
Self.Impl.define (Self'Access, pBufferBytes, bufferSizeInBytes);
|
|
end define;
|
|
|
|
|
|
procedure define (Self : in out Item; pImpl : in FontImpl.view)
|
|
is
|
|
begin
|
|
Self.Impl := pImpl;
|
|
end define;
|
|
|
|
|
|
procedure destruct (Self : in out Item)
|
|
is
|
|
procedure free is new ada.unchecked_Deallocation (FontImpl.item'Class,
|
|
FontImpl.view);
|
|
begin
|
|
Self.Impl.destruct;
|
|
free (Self.Impl);
|
|
end destruct;
|
|
|
|
|
|
procedure free (Self : in out View)
|
|
is
|
|
procedure deallocate is new ada.unchecked_Deallocation (Item'Class, View);
|
|
begin
|
|
Self.destruct;
|
|
deallocate (Self);
|
|
end free;
|
|
|
|
|
|
--------------
|
|
-- Attributes
|
|
--
|
|
|
|
function CharMap (Self : in Item; Encoding : in freetype_c.FT_Encoding) return Boolean
|
|
is
|
|
begin
|
|
return Self.impl.CharMap (Encoding);
|
|
end CharMap;
|
|
|
|
|
|
function CharMapCount (Self : in Item) return Natural
|
|
is
|
|
begin
|
|
return Self.impl.CharMapCount;
|
|
end CharMapCount;
|
|
|
|
|
|
function CharMapList (Self : access Item) return freetype.face.FT_Encodings_view
|
|
is
|
|
begin
|
|
return Self.impl.CharMapList;
|
|
end CharMapList;
|
|
|
|
|
|
function Ascender (Self : in Item) return Real
|
|
is
|
|
begin
|
|
return Self.impl.Ascender;
|
|
end Ascender;
|
|
|
|
|
|
function Descender (Self : in Item) return Real
|
|
is
|
|
begin
|
|
return Self.impl.Descender;
|
|
end Descender;
|
|
|
|
|
|
function LineHeight (Self : in Item) return Real
|
|
is
|
|
begin
|
|
return Self.impl.LineHeight;
|
|
end LineHeight;
|
|
|
|
|
|
function FaceSize (Self : access Item; Size : in Natural;
|
|
x_Res, y_Res : in Natural) return Boolean
|
|
is
|
|
begin
|
|
return Self.impl.FaceSize (Size, x_Res, y_Res);
|
|
end FaceSize;
|
|
|
|
|
|
function FaceSize (Self : in Item) return Natural
|
|
is
|
|
begin
|
|
return Self.impl.FaceSize;
|
|
end FaceSize;
|
|
|
|
|
|
procedure Depth (Self : in out Item; Depth : in Real)
|
|
is
|
|
begin
|
|
Self.impl.Depth (Depth);
|
|
end Depth;
|
|
|
|
|
|
procedure Outset (Self : in out Item; Outset : in Real)
|
|
is
|
|
begin
|
|
Self.impl.Outset (Outset);
|
|
end Outset;
|
|
|
|
|
|
procedure Outset (Self : in out Item; Front : in Real;
|
|
Back : in Real)
|
|
is
|
|
begin
|
|
Self.impl.Outset (Front, Back);
|
|
end Outset;
|
|
|
|
|
|
function BBox (Self : access Item; Text : in String;
|
|
Length : in Integer := -1;
|
|
Position : in Vector_3 := Origin_3D;
|
|
Spacing : in Vector_3 := Origin_3D) return Bounds
|
|
is
|
|
begin
|
|
return Self.impl.BBox (Text, Length, Position, Spacing);
|
|
end BBox;
|
|
|
|
|
|
function Error (Self : in Item) return freetype_c.FT_Error
|
|
is
|
|
begin
|
|
return Self.impl.Err;
|
|
end Error;
|
|
|
|
|
|
--------------
|
|
-- Operations
|
|
--
|
|
|
|
function attach (Self : in Item; Font_File_Path : in String) return Boolean
|
|
is
|
|
begin
|
|
return Self.impl.attach (Font_File_Path);
|
|
end Attach;
|
|
|
|
|
|
function attach (Self : in Item; pBufferBytes : in FontImpl.unsigned_char_Pointer;
|
|
bufferSizeInBytes : in Natural) return Boolean
|
|
is
|
|
begin
|
|
return Self.impl.Attach (pBufferBytes, bufferSizeInBytes);
|
|
end Attach;
|
|
|
|
|
|
procedure glyph_load_Flags (Self : in out Item; Flags : in freetype_c.FT_Int)
|
|
is
|
|
begin
|
|
Self.impl.GlyphLoadFlags (Flags);
|
|
end glyph_load_Flags;
|
|
|
|
|
|
function Advance (Self : access Item; Text : in String;
|
|
Length : in Integer := -1;
|
|
Spacing : in Vector_3 := Origin_3D) return Real
|
|
is
|
|
begin
|
|
return Self.impl.Advance (Text, Length, Spacing);
|
|
end Advance;
|
|
|
|
|
|
function kern_Advance (Self : in Item; From, To : in Character) return Real
|
|
is
|
|
begin
|
|
return Self.impl.kern_Advance (From, To);
|
|
end kern_Advance;
|
|
|
|
|
|
function x_PPEM (Self : in Item) return Real
|
|
is
|
|
begin
|
|
return Self.impl.x_PPEM;
|
|
end x_PPEM;
|
|
|
|
|
|
function x_Scale (Self : in Item) return Real
|
|
is
|
|
begin
|
|
return Self.impl.x_Scale;
|
|
end x_Scale;
|
|
|
|
|
|
function y_Scale (Self : in Item) return Real
|
|
is
|
|
begin
|
|
return Self.impl.y_Scale;
|
|
end y_Scale;
|
|
|
|
|
|
function check_Glyphs (Self : access Item; Text : in String;
|
|
Length : in Integer := -1;
|
|
Position : in Vector_3 := Origin_3D;
|
|
Spacing : in Vector_3 := Origin_3D;
|
|
Mode : in fontImpl.RenderMode := fontImpl.RENDER_ALL) return Vector_3
|
|
is
|
|
begin
|
|
return Self.impl.Render (Text,
|
|
Length,
|
|
Position,
|
|
Spacing,
|
|
Mode'enum_Rep);
|
|
end check_Glyphs;
|
|
|
|
|
|
end openGL.Font;
|