Files
lime/tools/SVGExport.hx
2019-04-11 12:09:26 -07:00

176 lines
3.6 KiB
Haxe

package;
import format.SVG;
import hxp.*;
import lime.tools.Architecture;
import openfl.display.Bitmap;
import openfl.display.BitmapData;
import openfl.display.PNGEncoderOptions;
import openfl.display.Shape;
import openfl.geom.Matrix;
import sys.io.File;
import sys.io.Process;
import sys.FileSystem;
class SVGExport
{
#if (neko && (haxe_210 || haxe3))
public static function __init__()
{
var haxePath = Sys.getEnv("HAXEPATH");
var command = (haxePath != null && haxePath != "") ? haxePath + "/haxelib" : "haxelib";
var path = "";
if (FileSystem.exists("svg.n"))
{
path = Path.combine(Sys.getCwd(), "../lib/");
}
if (path == "")
{
var process = new Process("haxelib", ["path", "lime"]);
try
{
while (true)
{
var line = StringTools.trim(process.stdout.readLine());
if (line.length > 0 && !StringTools.startsWith(line, "-"))
{
path = StringTools.trim(line);
if (FileSystem.exists(Path.combine(path, "../lib")))
{
path = Path.combine(path, "../lib");
}
else
{
path = Path.combine(path, "../ndll");
}
if (!StringTools.endsWith(path, "/"))
{
path += "/";
}
break;
}
}
}
catch (e:Dynamic) {}
process.close();
}
switch (System.hostPlatform)
{
case WINDOWS:
untyped $loader.path = $array(path + "Windows/", $loader.path);
case MAC:
untyped $loader.path = $array(path + "Mac/", $loader.path);
untyped $loader.path = $array(path + "Mac64/", $loader.path);
case LINUX:
var arguments = Sys.args();
var raspberryPi = false;
for (argument in arguments)
{
if (argument == "-rpi") raspberryPi = true;
}
if (raspberryPi)
{
untyped $loader.path = $array(path + "RPi/", $loader.path);
}
else if (System.hostArchitecture == X64)
{
untyped $loader.path = $array(path + "Linux64/", $loader.path);
}
else
{
untyped $loader.path = $array(path + "Linux/", $loader.path);
}
default:
}
}
#end
public static function main()
{
var arguments = Sys.args();
/*if (arguments.length > 0) {
// When the command-line tools are called from haxelib,
// the last argument is the project directory and the
// path SWF is the current working directory
var lastArgument = "";
for (i in 0...arguments.length) {
lastArgument = arguments.pop ();
if (lastArgument.length > 0) break;
}
lastArgument = new Path (lastArgument).toString ();
if (((StringTools.endsWith (lastArgument, "/") && lastArgument != "/") || StringTools.endsWith (lastArgument, "\\")) && !StringTools.endsWith (lastArgument, ":\\")) {
lastArgument = lastArgument.substr (0, lastArgument.length - 1);
}
if (FileSystem.exists (lastArgument) && FileSystem.isDirectory (lastArgument)) {
Sys.setCwd (lastArgument);
}
}*/
var words = new Array<String>();
for (arg in arguments)
{
if (arg == "-verbose")
{
Log.verbose = true;
}
else
{
words.push(arg);
}
}
if (words.length > 4 && words[0] == "process")
{
try
{
var inputPath = words[1];
var width = Std.parseInt(words[2]);
var height = Std.parseInt(words[3]);
var outputPath = words[4];
var svg = new SVG(File.getContent(inputPath));
var backgroundColor = 0x00FFFFFF;
var shape = new Shape();
svg.render(shape.graphics, 0, 0, width, height);
var bitmapData = new BitmapData(width, height, true, backgroundColor);
bitmapData.draw(shape);
File.saveBytes(outputPath, bitmapData.encode(bitmapData.rect, new PNGEncoderOptions()));
}
catch (e:Dynamic)
{
Log.error(e);
}
}
}
}