Work around Haxe 3.4 compiler freeze (resolve #874)

This commit is contained in:
Joshua Granick
2017-01-05 17:09:45 -08:00
parent b794292b21
commit 1e7c544dc7
2 changed files with 53 additions and 41 deletions

View File

@@ -0,0 +1,31 @@
package lime._backend.native;
#if !macro
@:build(lime.system.CFFI.build())
#end
class NativeFont {
#if (lime_cffi && !macro)
@:cffi private static function lime_font_get_ascender (handle:Dynamic):Int;
@:cffi private static function lime_font_get_descender (handle:Dynamic):Int;
@:cffi private static function lime_font_get_family_name (handle:Dynamic):Dynamic;
@:cffi private static function lime_font_get_glyph_index (handle:Dynamic, character:String):Int;
@:cffi private static function lime_font_get_glyph_indices (handle:Dynamic, characters:String):Dynamic;
@:cffi private static function lime_font_get_glyph_metrics (handle:Dynamic, index:Int):Dynamic;
@:cffi private static function lime_font_get_height (handle:Dynamic):Int;
@:cffi private static function lime_font_get_num_glyphs (handle:Dynamic):Int;
@:cffi private static function lime_font_get_underline_position (handle:Dynamic):Int;
@:cffi private static function lime_font_get_underline_thickness (handle:Dynamic):Int;
@:cffi private static function lime_font_get_units_per_em (handle:Dynamic):Int;
@:cffi private static function lime_font_load (data:Dynamic):Dynamic;
@:cffi private static function lime_font_outline_decompose (handle:Dynamic, size:Int):Dynamic;
@:cffi private static function lime_font_render_glyph (handle:Dynamic, index:Int, data:Dynamic):Bool;
@:cffi private static function lime_font_render_glyphs (handle:Dynamic, indices:Dynamic, data:Dynamic):Bool;
@:cffi private static function lime_font_set_size (handle:Dynamic, size:Int):Void;
#end
}

View File

@@ -2,6 +2,7 @@ package lime.text;
import haxe.io.Bytes; import haxe.io.Bytes;
import lime._backend.native.NativeFont;
import lime.app.Future; import lime.app.Future;
import lime.app.Promise; import lime.app.Promise;
import lime.graphics.Image; import lime.graphics.Image;
@@ -21,10 +22,6 @@ import js.Browser;
import haxe.io.Path; import haxe.io.Path;
#end #end
#if !macro
@:build(lime.system.CFFI.build())
#end
#if !lime_debug #if !lime_debug
@:fileXml('tags="haxe,release"') @:fileXml('tags="haxe,release"')
@:noDebug @:noDebug
@@ -34,6 +31,7 @@ import haxe.io.Path;
@:autoBuild(lime._macros.AssetsMacro.embedFont()) @:autoBuild(lime._macros.AssetsMacro.embedFont())
#end #end
@:access(lime._backend.native.NativeFont)
@:access(lime.text.Glyph) @:access(lime.text.Glyph)
@@ -78,7 +76,7 @@ class Font {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
if (src == null) throw "Uninitialized font handle."; if (src == null) throw "Uninitialized font handle.";
var data:Dynamic = lime_font_outline_decompose (src, 1024 * 20); var data:Dynamic = NativeFont.lime_font_outline_decompose (src, 1024 * 20);
return data; return data;
#else #else
@@ -155,7 +153,7 @@ class Font {
public function getGlyph (character:String):Glyph { public function getGlyph (character:String):Glyph {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
return lime_font_get_glyph_index (src, character); return NativeFont.lime_font_get_glyph_index (src, character);
#else #else
return -1; return -1;
#end #end
@@ -166,7 +164,7 @@ class Font {
public function getGlyphs (characters:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^`'\"/\\&*()[]{}<>|:;_-+=?,. "):Array<Glyph> { public function getGlyphs (characters:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^`'\"/\\&*()[]{}<>|:;_-+=?,. "):Array<Glyph> {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
var glyphs:Dynamic = lime_font_get_glyph_indices (src, characters); var glyphs:Dynamic = NativeFont.lime_font_get_glyph_indices (src, characters);
return glyphs; return glyphs;
#else #else
return null; return null;
@@ -178,7 +176,7 @@ class Font {
public function getGlyphMetrics (glyph:Glyph):GlyphMetrics { public function getGlyphMetrics (glyph:Glyph):GlyphMetrics {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
var value:Dynamic = lime_font_get_glyph_metrics (src, glyph); var value:Dynamic = NativeFont.lime_font_get_glyph_metrics (src, glyph);
var metrics = new GlyphMetrics (); var metrics = new GlyphMetrics ();
metrics.advance = new Vector2 (value.horizontalAdvance, value.verticalAdvance); metrics.advance = new Vector2 (value.horizontalAdvance, value.verticalAdvance);
@@ -205,7 +203,7 @@ class Font {
var dataPosition = 0; var dataPosition = 0;
if (lime_font_render_glyph (src, glyph, bytes)) { if (NativeFont.lime_font_render_glyph (src, glyph, bytes)) {
var index = bytes.getInt32 (dataPosition); dataPosition += 4; var index = bytes.getInt32 (dataPosition); dataPosition += 4;
var width = bytes.getInt32 (dataPosition); dataPosition += 4; var width = bytes.getInt32 (dataPosition); dataPosition += 4;
@@ -252,12 +250,12 @@ class Font {
// //
//} //}
// //
//lime_font_set_size (src, fontSize); //NativeFont.lime_font_set_size (src, fontSize);
// //
//var bytes = new ByteArray (); //var bytes = new ByteArray ();
//bytes.endian = (System.endianness == BIG_ENDIAN ? "bigEndian" : "littleEndian"); //bytes.endian = (System.endianness == BIG_ENDIAN ? "bigEndian" : "littleEndian");
// //
//if (lime_font_render_glyphs (src, glyphList, bytes)) { //if (NativeFont.lime_font_render_glyphs (src, glyphList, bytes)) {
// //
//bytes.position = 0; //bytes.position = 0;
// //
@@ -404,11 +402,11 @@ class Font {
__fontPathWithoutDirectory = null; __fontPathWithoutDirectory = null;
src = lime_font_load (bytes); src = NativeFont.lime_font_load (bytes);
if (src != null && name == null) { if (src != null && name == null) {
name = cast lime_font_get_family_name (src); name = cast NativeFont.lime_font_get_family_name (src);
} }
@@ -425,11 +423,11 @@ class Font {
__fontPathWithoutDirectory = Path.withoutDirectory (__fontPath); __fontPathWithoutDirectory = Path.withoutDirectory (__fontPath);
src = lime_font_load (__fontPath); src = NativeFont.lime_font_load (__fontPath);
if (src != null && name == null) { if (src != null && name == null) {
name = cast lime_font_get_family_name (src); name = cast NativeFont.lime_font_get_family_name (src);
} }
@@ -536,7 +534,7 @@ class Font {
@:noCompletion private function __setSize (size:Int):Void { @:noCompletion private function __setSize (size:Int):Void {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
lime_font_set_size (src, size); NativeFont.lime_font_set_size (src, size);
#end #end
} }
@@ -552,7 +550,7 @@ class Font {
private function get_ascender ():Int { private function get_ascender ():Int {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
return lime_font_get_ascender (src); return NativeFont.lime_font_get_ascender (src);
#else #else
return 0; return 0;
#end #end
@@ -563,7 +561,7 @@ class Font {
private function get_descender ():Int { private function get_descender ():Int {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
return lime_font_get_descender (src); return NativeFont.lime_font_get_descender (src);
#else #else
return 0; return 0;
#end #end
@@ -574,7 +572,7 @@ class Font {
private function get_height ():Int { private function get_height ():Int {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
return lime_font_get_height (src); return NativeFont.lime_font_get_height (src);
#else #else
return 0; return 0;
#end #end
@@ -585,7 +583,7 @@ class Font {
private function get_numGlyphs ():Int { private function get_numGlyphs ():Int {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
return lime_font_get_num_glyphs (src); return NativeFont.lime_font_get_num_glyphs (src);
#else #else
return 0; return 0;
#end #end
@@ -596,7 +594,7 @@ class Font {
private function get_underlinePosition ():Int { private function get_underlinePosition ():Int {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
return lime_font_get_underline_position (src); return NativeFont.lime_font_get_underline_position (src);
#else #else
return 0; return 0;
#end #end
@@ -607,7 +605,7 @@ class Font {
private function get_underlineThickness ():Int { private function get_underlineThickness ():Int {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
return lime_font_get_underline_thickness (src); return NativeFont.lime_font_get_underline_thickness (src);
#else #else
return 0; return 0;
#end #end
@@ -618,7 +616,7 @@ class Font {
private function get_unitsPerEM ():Int { private function get_unitsPerEM ():Int {
#if (lime_cffi && !macro) #if (lime_cffi && !macro)
return lime_font_get_units_per_em (src); return NativeFont.lime_font_get_units_per_em (src);
#else #else
return 0; return 0;
#end #end
@@ -633,24 +631,7 @@ class Font {
#if (lime_cffi && !macro)
@:cffi private static function lime_font_get_ascender (handle:Dynamic):Int;
@:cffi private static function lime_font_get_descender (handle:Dynamic):Int;
@:cffi private static function lime_font_get_family_name (handle:Dynamic):Dynamic;
@:cffi private static function lime_font_get_glyph_index (handle:Dynamic, character:String):Int;
@:cffi private static function lime_font_get_glyph_indices (handle:Dynamic, characters:String):Dynamic;
@:cffi private static function lime_font_get_glyph_metrics (handle:Dynamic, index:Int):Dynamic;
@:cffi private static function lime_font_get_height (handle:Dynamic):Int;
@:cffi private static function lime_font_get_num_glyphs (handle:Dynamic):Int;
@:cffi private static function lime_font_get_underline_position (handle:Dynamic):Int;
@:cffi private static function lime_font_get_underline_thickness (handle:Dynamic):Int;
@:cffi private static function lime_font_get_units_per_em (handle:Dynamic):Int;
@:cffi private static function lime_font_load (data:Dynamic):Dynamic;
@:cffi private static function lime_font_outline_decompose (handle:Dynamic, size:Int):Dynamic;
@:cffi private static function lime_font_render_glyph (handle:Dynamic, index:Int, data:Dynamic):Bool;
@:cffi private static function lime_font_render_glyphs (handle:Dynamic, indices:Dynamic, data:Dynamic):Bool;
@:cffi private static function lime_font_set_size (handle:Dynamic, size:Int):Void;
#end
} }