Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 31 additions & 18 deletions src/swf/exporters/animate/AnimateButtonSymbol.hx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ class AnimateButtonSymbol extends AnimateSymbol
public var upState:AnimateSpriteSymbol;

private var library:AnimateLibrary;
private var resolvedSymbolType:Class<Dynamic>;
private var resolvedSymbolTypeReady = false;

public function new()
{
Expand Down Expand Up @@ -51,26 +53,11 @@ class AnimateButtonSymbol extends AnimateSymbol
var simpleButton:SimpleButton = null;
SimpleButton.__constructor = __constructor;
this.library = library;
var symbolType = __resolveSymbolType();

#if flash
if (className == "flash.display.SimpleButton")
{
className = "flash.display.SimpleButton2";
}
#end

if (className != null)
if (symbolType != null)
{
var symbolType = Type.resolveClass(SymbolUtils.formatClassName(className));

if (symbolType != null)
{
simpleButton = Type.createInstance(symbolType, []);
}
else
{
// Log.warn ("Could not resolve class \"" + symbol.className + "\"");
}
simpleButton = Type.createInstance(symbolType, []);
}

if (simpleButton == null)
Expand Down Expand Up @@ -99,4 +86,30 @@ class AnimateButtonSymbol extends AnimateSymbol
this.library = library;
__constructor(cast instance);
}

private function __resolveSymbolType():Class<Dynamic>
{
if (className == null)
{
return null;
}

if (resolvedSymbolTypeReady)
{
return resolvedSymbolType;
}

var resolvedClassName = className;

#if flash
if (resolvedClassName == "flash.display.SimpleButton")
{
resolvedClassName = "flash.display.SimpleButton2";
}
#end

resolvedSymbolType = Type.resolveClass(SymbolUtils.formatClassName(resolvedClassName));
resolvedSymbolTypeReady = true;
return resolvedSymbolType;
}
}
105 changes: 74 additions & 31 deletions src/swf/exporters/animate/AnimateDynamicTextSymbol.hx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ import openfl.text.TextFormatAlign;
@:access(openfl.text.TextFormat)
class AnimateDynamicTextSymbol extends AnimateSymbol
{
private static var cachedFontCount = -1;
private static var cachedFontNames:Array<String>;
private static var resolvedFontNames:Map<String, String> = new Map();

public var align: /*TextFormatAlign*/ String;
public var border:Bool;
public var color:Null<Int>;
Expand Down Expand Up @@ -98,39 +102,12 @@ class AnimateDynamicTextSymbol extends AnimateSymbol
}

format.font = fontName;
var resolvedFontName = resolveFontName(format.font);
var found = resolvedFontName != null;

var found = false;

switch (format.font)
{
case "_sans", "_serif", "_typewriter", "", null:
found = true;

default:
for (font in Font.enumerateFonts())
{
if (font.fontName == format.font)
{
found = true;
break;
}
}
}

if (!found)
if (found && resolvedFontName != format.font)
{
var alpha = ~/[^a-zA-Z]+/g;
var spaces = ~/\s/g;

for (font in Font.enumerateFonts())
{
if (alpha.replace(font.fontName, "").substr(0, fontName.length) == spaces.replace(fontName, ""))
{
format.font = font.fontName;
found = true;
break;
}
}
format.font = resolvedFontName;
}

if (found)
Expand Down Expand Up @@ -174,4 +151,70 @@ class AnimateDynamicTextSymbol extends AnimateSymbol
// textField.autoSize = (tag.autoSize) ? TextFieldAutoSize.LEFT : TextFieldAutoSize.NONE;
return textField;
}

private static function getCachedFontNames():Array<String>
{
var fonts = Font.enumerateFonts();

if (cachedFontNames == null || cachedFontCount != fonts.length)
{
cachedFontCount = fonts.length;
cachedFontNames = [];
resolvedFontNames = new Map();

for (font in fonts)
{
cachedFontNames.push(font.fontName);
}
}

return cachedFontNames;
}

private static function resolveFontName(name:String):String
{
switch (name)
{
case "_sans", "_serif", "_typewriter", "", null:
return name;
default:
}

if (resolvedFontNames.exists(name))
{
return resolvedFontNames.get(name);
}

var fontNames = getCachedFontNames();

for (fontName in fontNames)
{
if (fontName == name)
{
resolvedFontNames.set(name, fontName);
return fontName;
}
}

var normalizedName = normalizeFontName(name);

for (fontName in fontNames)
{
if (normalizeFontName(fontName).substr(0, normalizedName.length) == normalizedName)
{
resolvedFontNames.set(name, fontName);
return fontName;
}
}

resolvedFontNames.set(name, null);
return null;
}

private static function normalizeFontName(name:String):String
{
var alpha = ~/[^a-zA-Z]+/g;
var spaces = ~/\s/g;
return spaces.replace(alpha.replace(name, ""), "");
}
}
95 changes: 59 additions & 36 deletions src/swf/exporters/animate/AnimateSpriteSymbol.hx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ class AnimateSpriteSymbol extends AnimateSymbol
public var scale9Grid:Rectangle;

private var library:AnimateLibrary;
private var resolvedBaseSymbolType:Class<Dynamic>;
private var resolvedBaseSymbolTypeReady = false;
private var resolvedSymbolType:Class<Dynamic>;
private var resolvedSymbolTypeReady = false;

public function new()
{
Expand Down Expand Up @@ -49,42 +53,7 @@ class AnimateSpriteSymbol extends AnimateSymbol
private override function __createObject(library:AnimateLibrary):Sprite
{
__init(library);

#if flash
if (className == "flash.display.MovieClip")
{
className = "flash.display.MovieClip2";
}
#end

var symbolType = null;

if (className != null)
{
symbolType = Type.resolveClass(SymbolUtils.formatClassName(className));

if (symbolType == null)
{
// Log.warn ("Could not resolve class \"" + className + "\"");
}
}

if (symbolType == null && baseClassName != null)
{
#if flash
if (baseClassName == "flash.display.MovieClip")
{
baseClassName = "flash.display.MovieClip2";
}
#end

symbolType = Type.resolveClass(SymbolUtils.formatClassName(baseClassName));

if (symbolType == null)
{
// Log.warn ("Could not resolve class \"" + className + "\"");
}
}
var symbolType = __resolveSymbolType();

var sprite:Sprite = null;

Expand Down Expand Up @@ -128,4 +97,58 @@ class AnimateSpriteSymbol extends AnimateSymbol
this.library = library;
__constructor(cast instance);
}

private function __resolveSymbolType():Class<Dynamic>
{
var symbolType = __resolveClassName(className, false);

if (symbolType == null)
{
symbolType = __resolveClassName(baseClassName, true);
}

return symbolType;
}

private function __resolveClassName(name:String, useBaseClass:Bool):Class<Dynamic>
{
if (name == null)
{
return null;
}

if (useBaseClass)
{
if (resolvedBaseSymbolTypeReady)
{
return resolvedBaseSymbolType;
}
}
else if (resolvedSymbolTypeReady)
{
return resolvedSymbolType;
}

#if flash
if (name == "flash.display.MovieClip")
{
name = "flash.display.MovieClip2";
}
#end

var symbolType = Type.resolveClass(SymbolUtils.formatClassName(name));

if (useBaseClass)
{
resolvedBaseSymbolType = symbolType;
resolvedBaseSymbolTypeReady = true;
}
else
{
resolvedSymbolType = symbolType;
resolvedSymbolTypeReady = true;
}

return symbolType;
}
}
49 changes: 31 additions & 18 deletions src/swf/exporters/swflite/ButtonSymbol.hx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ class ButtonSymbol extends SWFSymbol
public var upState:SpriteSymbol;

private var swf:SWFLite;
private var resolvedSymbolType:Class<Dynamic>;
private var resolvedSymbolTypeReady = false;

public function new()
{
Expand Down Expand Up @@ -53,26 +55,11 @@ class ButtonSymbol extends SWFSymbol
SimpleButton.__constructor = __constructor;
#end
this.swf = swf;
var symbolType = __resolveSymbolType();

#if flash
if (className == "flash.display.SimpleButton")
{
className = "flash.display.SimpleButton2";
}
#end

if (className != null)
if (symbolType != null)
{
var symbolType = Type.resolveClass(className);

if (symbolType != null)
{
simpleButton = Type.createInstance(symbolType, []);
}
else
{
// Log.warn ("Could not resolve class \"" + symbol.className + "\"");
}
simpleButton = Type.createInstance(symbolType, []);
}

if (simpleButton == null)
Expand Down Expand Up @@ -103,4 +90,30 @@ class ButtonSymbol extends SWFSymbol
this.swf = swf;
__constructor(cast instance);
}

private function __resolveSymbolType():Class<Dynamic>
{
if (className == null)
{
return null;
}

if (resolvedSymbolTypeReady)
{
return resolvedSymbolType;
}

var resolvedClassName = className;

#if flash
if (resolvedClassName == "flash.display.SimpleButton")
{
resolvedClassName = "flash.display.SimpleButton2";
}
#end

resolvedSymbolType = Type.resolveClass(resolvedClassName);
resolvedSymbolTypeReady = true;
return resolvedSymbolType;
}
}
Loading