Skip to content

Commit 9b6f81d

Browse files
committed
Font: add strikethroughPosition and strikethroughThickness
Similar to underlinePosition and underlineThickness
1 parent 8d81a0f commit 9b6f81d

File tree

6 files changed

+120
-3
lines changed

6 files changed

+120
-3
lines changed

project/include/text/Font.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ namespace lime {
5656
int GetNumGlyphs ();
5757
int GetUnderlinePosition ();
5858
int GetUnderlineThickness ();
59+
int GetStrikethroughPosition ();
60+
int GetStrikethroughThickness ();
5961
int GetUnitsPerEM ();
6062
int RenderGlyph (int index, Bytes *bytes, int offset = 0);
6163
int RenderGlyphs (value indices, Bytes *bytes);

project/src/ExternalInterface.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1363,6 +1363,54 @@ namespace lime {
13631363
}
13641364

13651365

1366+
int lime_font_get_strikethrough_position (value fontHandle) {
1367+
1368+
#ifdef LIME_FREETYPE
1369+
Font *font = (Font*)val_data (fontHandle);
1370+
return font->GetStrikethroughPosition ();
1371+
#else
1372+
return 0;
1373+
#endif
1374+
1375+
}
1376+
1377+
1378+
HL_PRIM int HL_NAME(hl_font_get_strikethrough_position) (HL_CFFIPointer* fontHandle) {
1379+
1380+
#ifdef LIME_FREETYPE
1381+
Font *font = (Font*)fontHandle->ptr;
1382+
return font->GetStrikethroughPosition ();
1383+
#else
1384+
return 0;
1385+
#endif
1386+
1387+
}
1388+
1389+
1390+
int lime_font_get_strikethrough_thickness (value fontHandle) {
1391+
1392+
#ifdef LIME_FREETYPE
1393+
Font *font = (Font*)val_data (fontHandle);
1394+
return font->GetStrikethroughThickness ();
1395+
#else
1396+
return 0;
1397+
#endif
1398+
1399+
}
1400+
1401+
1402+
HL_PRIM int HL_NAME(hl_font_get_strikethrough_thickness) (HL_CFFIPointer* fontHandle) {
1403+
1404+
#ifdef LIME_FREETYPE
1405+
Font *font = (Font*)fontHandle->ptr;
1406+
return font->GetStrikethroughThickness ();
1407+
#else
1408+
return 0;
1409+
#endif
1410+
1411+
}
1412+
1413+
13661414
int lime_font_get_units_per_em (value fontHandle) {
13671415

13681416
#ifdef LIME_FREETYPE
@@ -4000,6 +4048,8 @@ namespace lime {
40004048
DEFINE_PRIME1 (lime_font_get_num_glyphs);
40014049
DEFINE_PRIME1 (lime_font_get_underline_position);
40024050
DEFINE_PRIME1 (lime_font_get_underline_thickness);
4051+
DEFINE_PRIME1 (lime_font_get_strikethrough_position);
4052+
DEFINE_PRIME1 (lime_font_get_strikethrough_thickness);
40034053
DEFINE_PRIME1 (lime_font_get_units_per_em);
40044054
DEFINE_PRIME1 (lime_font_load);
40054055
DEFINE_PRIME1 (lime_font_load_bytes);
@@ -4191,6 +4241,8 @@ namespace lime {
41914241
DEFINE_HL_PRIM (_I32, hl_font_get_num_glyphs, _TCFFIPOINTER);
41924242
DEFINE_HL_PRIM (_I32, hl_font_get_underline_position, _TCFFIPOINTER);
41934243
DEFINE_HL_PRIM (_I32, hl_font_get_underline_thickness, _TCFFIPOINTER);
4244+
DEFINE_HL_PRIM (_I32, hl_font_get_strikethrough_position, _TCFFIPOINTER);
4245+
DEFINE_HL_PRIM (_I32, hl_font_get_strikethrough_thickness, _TCFFIPOINTER);
41944246
DEFINE_HL_PRIM (_I32, hl_font_get_units_per_em, _TCFFIPOINTER);
41954247
// DEFINE_PRIME1 (lime_font_load);
41964248
DEFINE_HL_PRIM (_TCFFIPOINTER, hl_font_load_bytes, _TBYTES);

project/src/text/Font.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,6 +1268,37 @@ namespace lime {
12681268
}
12691269

12701270

1271+
int Font::GetStrikethroughPosition () {
1272+
1273+
TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2);
1274+
1275+
if (os2 && os2->version != 0xFFFFU)
1276+
{
1277+
1278+
return os2->yStrikeoutPosition;
1279+
1280+
}
1281+
1282+
return 0;
1283+
}
1284+
1285+
1286+
int Font::GetStrikethroughThickness () {
1287+
1288+
TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2);
1289+
1290+
1291+
if (os2 && os2->version != 0xFFFFU)
1292+
{
1293+
1294+
return os2->yStrikeoutSize;
1295+
1296+
}
1297+
1298+
return 0;
1299+
}
1300+
1301+
12711302
int Font::GetUnitsPerEM () {
12721303

12731304
return ((FT_Face)face)->units_per_EM;

src/lime/_internal/backend/native/NativeCFFI.hx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ class NativeCFFI
135135

136136
@:cffi private static function lime_font_get_underline_thickness(handle:Dynamic):Int;
137137

138+
@:cffi private static function lime_font_get_strikethrough_position(handle:Dynamic):Int;
139+
140+
@:cffi private static function lime_font_get_strikethrough_thickness(handle:Dynamic):Int;
141+
138142
@:cffi private static function lime_font_get_units_per_em(handle:Dynamic):Int;
139143

140144
@:cffi private static function lime_font_load(data:Dynamic):Dynamic;
@@ -433,6 +437,10 @@ class NativeCFFI
433437
"oi", false));
434438
private static var lime_font_get_underline_thickness = new cpp.Callable<cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_font_get_underline_thickness",
435439
"oi", false));
440+
private static var lime_font_get_strikethrough_position = new cpp.Callable<cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_font_get_strikethrough_position",
441+
"oi", false));
442+
private static var lime_font_get_strikethrough_thickness = new cpp.Callable<cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_font_get_strikethrough_thickness",
443+
"oi", false));
436444
private static var lime_font_get_units_per_em = new cpp.Callable<cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_font_get_units_per_em", "oi", false));
437445
private static var lime_font_load = new cpp.Callable<cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_load", "oo", false));
438446
private static var lime_font_load_bytes = new cpp.Callable<cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_load_bytes", "oo", false));
@@ -672,6 +680,8 @@ class NativeCFFI
672680
private static var lime_font_get_num_glyphs = CFFI.load("lime", "lime_font_get_num_glyphs", 1);
673681
private static var lime_font_get_underline_position = CFFI.load("lime", "lime_font_get_underline_position", 1);
674682
private static var lime_font_get_underline_thickness = CFFI.load("lime", "lime_font_get_underline_thickness", 1);
683+
private static var lime_font_get_strikethrough_position = CFFI.load("lime", "lime_font_get_strikethrough_position", 1);
684+
private static var lime_font_get_strikethrough_thickness = CFFI.load("lime", "lime_font_get_strikethrough_thickness", 1);
675685
private static var lime_font_get_units_per_em = CFFI.load("lime", "lime_font_get_units_per_em", 1);
676686
private static var lime_font_load = CFFI.load("lime", "lime_font_load", 1);
677687
private static var lime_font_load_bytes = CFFI.load("lime", "lime_font_load_bytes", 1);
@@ -970,6 +980,16 @@ class NativeCFFI
970980
return 0;
971981
}
972982

983+
@:hlNative("lime", "hl_font_get_strikethrough_position") private static function lime_font_get_strikethrough_position(handle:CFFIPointer):Int
984+
{
985+
return 0;
986+
}
987+
988+
@:hlNative("lime", "hl_font_get_strikethrough_thickness") private static function lime_font_get_strikethrough_thickness(handle:CFFIPointer):Int
989+
{
990+
return 0;
991+
}
992+
973993
@:hlNative("lime", "hl_font_get_units_per_em") private static function lime_font_get_units_per_em(handle:CFFIPointer):Int
974994
{
975995
return 0;

src/lime/text/Font.hx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ class Font
3838
* The ascender value of the font.
3939
*/
4040
public var ascender:Int;
41-
41+
4242
/**
4343
* The descender value of the font.
4444
*/
4545
public var descender:Int;
46-
46+
4747
/**
4848
* The height of the font.
4949
*/
@@ -59,7 +59,7 @@ class Font
5959
*/
6060
public var numGlyphs:Int;
6161

62-
62+
6363
public var src:Dynamic;
6464

6565
/**
@@ -72,6 +72,16 @@ class Font
7272
*/
7373
public var underlineThickness:Int;
7474

75+
/**
76+
* The underline position of the font.
77+
*/
78+
public var strikethroughPosition:Int;
79+
80+
/**
81+
* The underline thickness of the font.
82+
*/
83+
public var strikethroughThickness:Int;
84+
7585
/**
7686
* The units per EM of the font.
7787
*/
@@ -612,6 +622,8 @@ class Font
612622
numGlyphs = NativeCFFI.lime_font_get_num_glyphs(src);
613623
underlinePosition = NativeCFFI.lime_font_get_underline_position(src);
614624
underlineThickness = NativeCFFI.lime_font_get_underline_thickness(src);
625+
strikethroughPosition = NativeCFFI.lime_font_get_strikethrough_position(src);
626+
strikethroughThickness = NativeCFFI.lime_font_get_strikethrough_thickness(src);
615627
unitsPerEM = NativeCFFI.lime_font_get_units_per_em(src);
616628
}
617629
#end

tools/tools.n

1.75 MB
Binary file not shown.

0 commit comments

Comments
 (0)