From 4811395d4308a1e728c77bc91246a829132db041 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Mon, 5 Dec 2022 00:06:54 +0000 Subject: [PATCH] SVG support in NATFlixel. Close #165 --- projects/nat-archive-tool/src/nat/Archive.kiss | 2 +- .../src/nat/systems/ImageAttachmentSystem.kiss | 2 +- .../nat-flixel-desktop-playground/Project.xml | 1 + .../source/EntrySprite.hx | 4 ++++ .../source/EntrySprite.kiss | 16 +++++++++++----- test-project.sh | 1 + 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/projects/nat-archive-tool/src/nat/Archive.kiss b/projects/nat-archive-tool/src/nat/Archive.kiss index 69d1ed99..1e72a926 100644 --- a/projects/nat-archive-tool/src/nat/Archive.kiss +++ b/projects/nat-archive-tool/src/nat/Archive.kiss @@ -73,5 +73,5 @@ (method fullString [:Entry e] (haxe.Json.stringify e null "\t")) -(method filePath [file] +(method :String filePath [file] (joinPath archiveDir "files" file)) \ No newline at end of file diff --git a/projects/nat-archive-tool/src/nat/systems/ImageAttachmentSystem.kiss b/projects/nat-archive-tool/src/nat/systems/ImageAttachmentSystem.kiss index cd98a109..06dc4727 100644 --- a/projects/nat-archive-tool/src/nat/systems/ImageAttachmentSystem.kiss +++ b/projects/nat-archive-tool/src/nat/systems/ImageAttachmentSystem.kiss @@ -2,7 +2,7 @@ (defNew [] (super - ["jpg" "jpeg" "png"] + ["jpg" "jpeg" "png" "svg"] ->[archive e imageFiles &opt ui] (unless (upgradeToVersion2 archive e) // TODO an edge case exists when more image files are added to an Entry diff --git a/projects/nat-flixel-desktop-playground/Project.xml b/projects/nat-flixel-desktop-playground/Project.xml index 7d5f6dd4..2752e839 100644 --- a/projects/nat-flixel-desktop-playground/Project.xml +++ b/projects/nat-flixel-desktop-playground/Project.xml @@ -36,6 +36,7 @@ + diff --git a/projects/nat-flixel-desktop-playground/source/EntrySprite.hx b/projects/nat-flixel-desktop-playground/source/EntrySprite.hx index 82946d18..791639ac 100644 --- a/projects/nat-flixel-desktop-playground/source/EntrySprite.hx +++ b/projects/nat-flixel-desktop-playground/source/EntrySprite.hx @@ -3,6 +3,8 @@ package; import kiss.Prelude; import kiss.List; import flash.display.BitmapData; +import openfl.display.Sprite; +import format.SVG; import kiss_flixel.KissExtendedSprite; import flixel.text.FlxText; import flixel.util.FlxSpriteUtil; @@ -13,7 +15,9 @@ import nat.BoolExpInterp; import nat.components.Images; import nat.components.Position; import nat.components.Scale; +import sys.io.File; using kiss_flixel.CameraTools; +using haxe.io.Path; @:build(kiss.Kiss.build()) class EntrySprite extends KissExtendedSprite {} diff --git a/projects/nat-flixel-desktop-playground/source/EntrySprite.kiss b/projects/nat-flixel-desktop-playground/source/EntrySprite.kiss index 3801676c..f4418067 100644 --- a/projects/nat-flixel-desktop-playground/source/EntrySprite.kiss +++ b/projects/nat-flixel-desktop-playground/source/EntrySprite.kiss @@ -16,11 +16,17 @@ (cond ((hasComponent e Images2) - (let [images (readComponent e Images2)] - (.onComplete (BitmapData.loadFromFile (archive.filePath (nth images.imageFiles images.pinnedImageIndex))) - ->bitmapData { - (loadGraphic bitmapData) - }))) + (let [images (readComponent e Images2) + pinnedImage (archive.filePath (nth images.imageFiles images.pinnedImageIndex))] + (case (pinnedImage.extension) + ("svg" (let [sprite (new Sprite)] + (.render (new SVG (File.getContent pinnedImage)) sprite.graphics) + (let [bitmapData (new BitmapData (Std.int sprite.width) (Std.int sprite.height))] + (bitmapData.draw sprite) + (loadGraphic bitmapData)))) + (otherwise + (.onComplete (BitmapData.loadFromFile pinnedImage) + ->bitmapData (loadGraphic bitmapData)))))) ((hasComponent e Circle) (set isCircle true) (let [c (readComponent e Circle) diff --git a/test-project.sh b/test-project.sh index dc66384f..5804e183 100755 --- a/test-project.sh +++ b/test-project.sh @@ -18,6 +18,7 @@ then haxelib install flixel-addons --quiet haxelib install flixel-ui --quiet haxelib install hxcpp --quiet + haxelib install svg --quiet fi # if "desktop-" is in the project name, only test for C++