| @@ -180,7 +180,6 @@ end; | |||||
| function TtsFontGeneratorFreeType.CreateFont(const aFace: FT_Face; const aRenderer: TtsRenderer; const aSize: Integer; | function TtsFontGeneratorFreeType.CreateFont(const aFace: FT_Face; const aRenderer: TtsRenderer; const aSize: Integer; | ||||
| const aStyle: TtsFontStyles; const aAntiAliasing: TtsAntiAliasing): TtsFont; | const aStyle: TtsFontStyles; const aAntiAliasing: TtsAntiAliasing): TtsFont; | ||||
| var | var | ||||
| face: FT_Face; | |||||
| err: FT_Error; | err: FT_Error; | ||||
| prop: TtsFontProperties; | prop: TtsFontProperties; | ||||
| os2: PTT_OS2; | os2: PTT_OS2; | ||||
| @@ -17,7 +17,7 @@ type | |||||
| fHandle: THandle; | fHandle: THandle; | ||||
| fMat2: TMat2; | fMat2: TMat2; | ||||
| protected | protected | ||||
| constructor Create(const aRenderer: TtsRenderer; const aCreator: TtsFontGenerator; const aProperties: TtsFontProperties; const aHandle: THandle); | |||||
| {%H-}constructor Create(const aRenderer: TtsRenderer; const aCreator: TtsFontGenerator; const aProperties: TtsFontProperties; const aHandle: THandle); | |||||
| public | public | ||||
| destructor Destroy; override; | destructor Destroy; override; | ||||
| end; | end; | ||||
| @@ -225,7 +225,7 @@ begin | |||||
| try | try | ||||
| SelectObject(DC, aFont.fHandle); | SelectObject(DC, aFont.fHandle); | ||||
| if Assigned(GetCharacterPlacementW) then begin | if Assigned(GetCharacterPlacementW) then begin | ||||
| FillChar(GCPRes, SizeOf(GCPRes), #0); | |||||
| FillChar(GCPRes{%H-}, SizeOf(GCPRes), #0); | |||||
| GetMem(GCPRes.lpGlyphs, SizeOf(Cardinal)); | GetMem(GCPRes.lpGlyphs, SizeOf(Cardinal)); | ||||
| try | try | ||||
| GCPRes.lStructSize := SizeOf(GCPRes); | GCPRes.lStructSize := SizeOf(GCPRes); | ||||
| @@ -278,7 +278,7 @@ var | |||||
| begin | begin | ||||
| if (aFont.fMat2.eM11.value <> 1) then | if (aFont.fMat2.eM11.value <> 1) then | ||||
| raise EtsException.Create('invalid value'); | raise EtsException.Create('invalid value'); | ||||
| FillChar(Metric, SizeOf(Metric), #0); | |||||
| FillChar(Metric{%H-}, SizeOf(Metric), #0); | |||||
| GlyphIndex := GetGlyphIndex(aFont, aCharCode); | GlyphIndex := GetGlyphIndex(aFont, aCharCode); | ||||
| if (GlyphIndex < 0) then | if (GlyphIndex < 0) then | ||||
| @@ -339,7 +339,7 @@ var | |||||
| end; | end; | ||||
| begin | begin | ||||
| FillChar(Metric, SizeOf(Metric), #0); | |||||
| FillChar(Metric{%H-}, SizeOf(Metric), #0); | |||||
| GlyphIndex := GetGlyphIndex(aFont, aCharCode); | GlyphIndex := GetGlyphIndex(aFont, aCharCode); | ||||
| if (GlyphIndex < 0) then | if (GlyphIndex < 0) then | ||||
| @@ -404,14 +404,14 @@ var | |||||
| end; | end; | ||||
| begin | begin | ||||
| FillChar(aProperties, SizeOf(aProperties), #0); | |||||
| FillChar(aProperties{%H-}, SizeOf(aProperties), #0); | |||||
| aProperties.Size := aSize; | aProperties.Size := aSize; | ||||
| aProperties.Style := aStyle; | aProperties.Style := aStyle; | ||||
| aProperties.AntiAliasing := aAntiAliasing; | aProperties.AntiAliasing := aAntiAliasing; | ||||
| aProperties.Fontname := aFontname; | aProperties.Fontname := aFontname; | ||||
| // prepare font attribs | // prepare font attribs | ||||
| FillChar(LogFont, SizeOf(LogFont), #0); | |||||
| FillChar(LogFont{%H-}, SizeOf(LogFont), #0); | |||||
| tmpName := AnsiString(aFontname); | tmpName := AnsiString(aFontname); | ||||
| for i := 1 to min(Length(aFontname), Length(LogFont.lfFaceName)) do | for i := 1 to min(Length(aFontname), Length(LogFont.lfFaceName)) do | ||||
| LogFont.lfFaceName[i-1] := tmpName[i]; | LogFont.lfFaceName[i-1] := tmpName[i]; | ||||
| @@ -445,14 +445,14 @@ begin | |||||
| end; | end; | ||||
| end; | end; | ||||
| if GetTextMetricsW(DC, TextMetric) then begin | |||||
| if GetTextMetricsW(DC, TextMetric{%H-}) then begin | |||||
| aProperties.Ascent := TextMetric.tmAscent; | aProperties.Ascent := TextMetric.tmAscent; | ||||
| aProperties.Descent := TextMetric.tmDescent; | aProperties.Descent := TextMetric.tmDescent; | ||||
| aProperties.ExternalLeading := TextMetric.tmExternalLeading; | aProperties.ExternalLeading := TextMetric.tmExternalLeading; | ||||
| aProperties.DefaultChar := TextMetric.tmDefaultChar; | aProperties.DefaultChar := TextMetric.tmDefaultChar; | ||||
| end; | end; | ||||
| if (GetOutlineTextMetricsW(DC, SizeOf(OutlineMetric), OutlineMetric) > 0) then begin | |||||
| if (GetOutlineTextMetricsW(DC, SizeOf(OutlineMetric), OutlineMetric{%H-}) > 0) then begin | |||||
| aProperties.UnderlinePos := OutlineMetric.otmsUnderscorePosition; | aProperties.UnderlinePos := OutlineMetric.otmsUnderscorePosition; | ||||
| aProperties.UnderlineSize := Min(1, OutlineMetric.otmsUnderscoreSize); | aProperties.UnderlineSize := Min(1, OutlineMetric.otmsUnderscoreSize); | ||||
| aProperties.StrikeoutPos := OutlineMetric.otmsStrikeoutPosition; | aProperties.StrikeoutPos := OutlineMetric.otmsStrikeoutPosition; | ||||
| @@ -251,13 +251,13 @@ begin | |||||
| // create new texture | // create new texture | ||||
| if not Assigned(result) then begin | if not Assigned(result) then begin | ||||
| if (aCharImage.Width > TextureSize) or (aCharImage.Height > TextureSize) then | if (aCharImage.Width > TextureSize) or (aCharImage.Height > TextureSize) then | ||||
| raise EtsRendererOpenGL.Create('char is to large to fit into a texture: ' + aChar.CharCode + ' (0x' + IntToHex(Ord(aChar.CharCode), 4) + ')'); | |||||
| raise EtsRendererOpenGL.Create('char is to large to fit into a texture: (0x' + IntToHex(Ord(aChar.CharCode), 4) + ')'); | |||||
| tex := CreateNewTexture; | tex := CreateNewTexture; | ||||
| result := AddToTexture(tex); | result := AddToTexture(tex); | ||||
| end; | end; | ||||
| if not Assigned(result) then | if not Assigned(result) then | ||||
| raise EtsRendererOpenGL.Create('unable to creat render reference for char: ' + aChar.CharCode + ' (0x' + IntToHex(Ord(aChar.CharCode), 4) + ')'); | |||||
| raise EtsRendererOpenGL.Create('unable to creat render reference for char: (0x' + IntToHex(Ord(aChar.CharCode), 4) + ')'); | |||||
| end; | end; | ||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| @@ -68,9 +68,6 @@ type | |||||
| implementation | implementation | ||||
| uses | |||||
| Math; | |||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| //TtsPostProcessFillColor/////////////////////////////////////////////////////////////////////////////////////////////// | //TtsPostProcessFillColor/////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| @@ -145,7 +145,7 @@ type | |||||
| //function GetCharCreate(const aCharCode: WideChar): TtsChar; | //function GetCharCreate(const aCharCode: WideChar): TtsChar; | ||||
| procedure AddChar(const aCharCode: WideChar; const aChar: TtsChar); overload; | procedure AddChar(const aCharCode: WideChar; const aChar: TtsChar); overload; | ||||
| protected | protected | ||||
| constructor Create(const aRenderer: TtsRenderer; const aGenerator: TtsFontGenerator; const aProperties: TtsFontProperties); | |||||
| {%H-}constructor Create(const aRenderer: TtsRenderer; const aGenerator: TtsFontGenerator; const aProperties: TtsFontProperties); | |||||
| public | public | ||||
| property CreateChars: Boolean read fCreateChars write fCreateChars; | property CreateChars: Boolean read fCreateChars write fCreateChars; | ||||
| property Char[const aCharCode: WideChar]: TtsChar read GetChar; | property Char[const aCharCode: WideChar]: TtsChar read GetChar; | ||||
| @@ -337,7 +337,7 @@ type | |||||
| protected | protected | ||||
| property Lines: PtsBlockLine read fFirstLine; | property Lines: PtsBlockLine read fFirstLine; | ||||
| procedure PushNewLine; | procedure PushNewLine; | ||||
| constructor Create(const aRenderer: TtsRenderer; const aTop, aLeft, aWidth, aHeight: Integer; const aFlags: TtsBlockFlags); | |||||
| {%H-}constructor Create(const aRenderer: TtsRenderer; const aTop, aLeft, aWidth, aHeight: Integer; const aFlags: TtsBlockFlags); | |||||
| public | public | ||||
| property Renderer: TtsRenderer read fRenderer; | property Renderer: TtsRenderer read fRenderer; | ||||
| property CurrentColor: TtsColor4f read fCurrentColor; | property CurrentColor: TtsColor4f read fCurrentColor; | ||||
| @@ -16,7 +16,7 @@ const | |||||
| NAME_ID_FULL_NAME = 4; | NAME_ID_FULL_NAME = 4; | ||||
| function MakeTTTableName(const ch1, ch2, ch3, ch4: Char): Cardinal; | function MakeTTTableName(const ch1, ch2, ch3, ch4: Char): Cardinal; | ||||
| function GetTTString(pBuffer: Pointer; BufferSize: Integer; NameID, LanguageID: Cardinal; var Text: String): Boolean; | |||||
| function GetTTString(pBuffer: Pointer; BufferSize: Integer; NameID, LanguageID: Cardinal; out Text: String): Boolean; | |||||
| function GetTTFontFullNameFromStream(Stream: TStream; LanguageID: Cardinal): String; | function GetTTFontFullNameFromStream(Stream: TStream; LanguageID: Cardinal): String; | ||||
| function GetTTFontFullNameFromFile(const aFilename: String; const aLanguageID: Cardinal): String; | function GetTTFontFullNameFromFile(const aFilename: String; const aLanguageID: Cardinal): String; | ||||
| @@ -98,7 +98,7 @@ begin | |||||
| Pos := Stream.Position; | Pos := Stream.Position; | ||||
| // Reading table header | // Reading table header | ||||
| Stream.Read(OffsetTable, sizeof(TT_OFFSET_TABLE)); | |||||
| Stream.Read(OffsetTable{%H-}, sizeof(TT_OFFSET_TABLE)); | |||||
| OffsetTable.uNumOfTables := SWAPWORD(OffsetTable.uNumOfTables); | OffsetTable.uNumOfTables := SWAPWORD(OffsetTable.uNumOfTables); | ||||
| OffsetTable.uMajorVersion := SWAPWORD(OffsetTable.uMajorVersion); | OffsetTable.uMajorVersion := SWAPWORD(OffsetTable.uMajorVersion); | ||||
| OffsetTable.uMinorVersion := SWAPWORD(OffsetTable.uMinorVersion); | OffsetTable.uMinorVersion := SWAPWORD(OffsetTable.uMinorVersion); | ||||
| @@ -109,7 +109,7 @@ begin | |||||
| // seaching table with name | // seaching table with name | ||||
| for Idx := 0 to OffsetTable.uNumOfTables -1 do begin | for Idx := 0 to OffsetTable.uNumOfTables -1 do begin | ||||
| Stream.Read(TableDir, sizeof(TT_TABLE_DIRECTORY)); | |||||
| Stream.Read(TableDir{%H-}, sizeof(TT_TABLE_DIRECTORY)); | |||||
| if (TableName = TableDir.TableName) then begin | if (TableName = TableDir.TableName) then begin | ||||
| TableDir.uOffset := SWAPLONG(TableDir.uOffset); | TableDir.uOffset := SWAPLONG(TableDir.uOffset); | ||||
| @@ -120,7 +120,7 @@ begin | |||||
| Stream.Seek(TableDir.uOffset, soBeginning); | Stream.Seek(TableDir.uOffset, soBeginning); | ||||
| Size := Stream.Read(pBuff^, TableDir.uLength); | Size := Stream.Read(pBuff^, TableDir.uLength); | ||||
| Result := Size = Integer(TableDir.uLength); | |||||
| Result := (Size = Integer(TableDir.uLength)); | |||||
| end else | end else | ||||
| begin | begin | ||||
| @@ -141,7 +141,7 @@ begin | |||||
| Result := ord(ch4) shl 24 or ord(ch3) shl 16 or ord(ch2) shl 8 or ord(ch1); | Result := ord(ch4) shl 24 or ord(ch3) shl 16 or ord(ch2) shl 8 or ord(ch1); | ||||
| end; | end; | ||||
| function GetTTString(pBuffer: Pointer; BufferSize: Integer; NameID, LanguageID: Cardinal; var Text: String): Boolean; | |||||
| function GetTTString(pBuffer: Pointer; BufferSize: Integer; NameID, LanguageID: Cardinal; out Text: String): Boolean; | |||||
| var | var | ||||
| pActBuffer: pByte; | pActBuffer: pByte; | ||||
| ttNTHeader: TT_NAME_TABLE_HEADER; | ttNTHeader: TT_NAME_TABLE_HEADER; | ||||
| @@ -203,7 +203,7 @@ begin | |||||
| pActBuffer := pBuffer; | pActBuffer := pBuffer; | ||||
| Move(pActBuffer^, ttNTHeader, sizeof(TT_NAME_TABLE_HEADER)); | |||||
| Move(pActBuffer^, ttNTHeader{%H-}, sizeof(TT_NAME_TABLE_HEADER)); | |||||
| inc(pActBuffer, sizeof(TT_NAME_TABLE_HEADER)); | inc(pActBuffer, sizeof(TT_NAME_TABLE_HEADER)); | ||||
| ttNTHeader.uNRCount := SWAPWORD(ttNTHeader.uNRCount); | ttNTHeader.uNRCount := SWAPWORD(ttNTHeader.uNRCount); | ||||
| @@ -295,6 +295,7 @@ var | |||||
| begin | begin | ||||
| TableName := MakeTTTableName('n', 'a', 'm', 'e'); | TableName := MakeTTTableName('n', 'a', 'm', 'e'); | ||||
| BufferSize := 0; | |||||
| if GetTTTableData(Stream, TableName, nil, BufferSize) then begin | if GetTTTableData(Stream, TableName, nil, BufferSize) then begin | ||||
| GetMem(Buffer, BufferSize); | GetMem(Buffer, BufferSize); | ||||
| try | try | ||||