From 1b310dcc456746580b63b8920a2c68d0b9c9dce0 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Sat, 6 Nov 2021 14:56:31 -0400 Subject: [PATCH 01/47] Add support for include.hxp. Note that all paths in an include.hxp file must be absolute. Fortunately, `Sys.getCwd()` works as expected. --- src/lime/tools/HXProject.hx | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/lime/tools/HXProject.hx b/src/lime/tools/HXProject.hx index 78eab0213..58b6c89ac 100644 --- a/src/lime/tools/HXProject.hx +++ b/src/lime/tools/HXProject.hx @@ -540,37 +540,48 @@ class HXProject extends Script return HXProject.fromPath(path, userDefines); } - public static function fromPath(path:String, userDefines:Map = null):HXProject + public static function fromPath(directory:String, userDefines:Map = null):HXProject { - if (!FileSystem.exists(path) || !FileSystem.isDirectory(path)) + if (!FileSystem.exists(directory) || !FileSystem.isDirectory(directory)) { return null; } - var files = ["include.lime", "include.nmml", "include.xml"]; + var files = ["include.lime", "include.nmml", "include.xml", "include.hxp"]; var projectFile = null; for (file in files) { - if (projectFile == null && FileSystem.exists(Path.combine(path, file))) + if (FileSystem.exists(Path.combine(directory, file))) { - projectFile = Path.combine(path, file); + projectFile = Path.combine(directory, file); + break; } } + var project = null; + if (projectFile != null) { - var project = new ProjectXMLParser(projectFile, userDefines); + if (StringTools.endsWith(projectFile, ".hxp")) + { + var cwd = Sys.getCwd(); + Sys.setCwd(directory); + project = HXProject.fromFile(projectFile, userDefines); + Sys.setCwd(cwd); + } + else + { + project = new ProjectXMLParser(projectFile, userDefines); + } if (project.config.get("project.rebuild.path") == null) { - project.config.set("project.rebuild.path", Path.combine(path, "project")); + project.config.set("project.rebuild.path", Path.combine(directory, "project")); } - - return project; } - return null; + return project; } private function getHaxelibVersion(haxelib:Haxelib):String From 83b39e918443d97bb4a99839e7a691e2ad644664 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Mon, 13 Jun 2022 15:57:23 -0400 Subject: [PATCH 02/47] Don't treat include.hxp as a complete project. --- tools/CommandLineTools.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/CommandLineTools.hx b/tools/CommandLineTools.hx index 8f693435a..11358fd65 100644 --- a/tools/CommandLineTools.hx +++ b/tools/CommandLineTools.hx @@ -1179,7 +1179,7 @@ class CommandLineTools if ((extension == "lime" && file != "include.lime") || (extension == "nmml" && file != "include.nmml") || (extension == "xml" && file != "include.xml") - || extension == "hxp") + || (extension == "hxp" && file != "include.hxp")) { matches.get(extension).push(path); } From b3bf305fc42224a7edcc53c2df2d76ec6dfd607b Mon Sep 17 00:00:00 2001 From: Sirox <71220271+Sirox228@users.noreply.github.com> Date: Tue, 1 Nov 2022 10:43:51 +0300 Subject: [PATCH 03/47] Update JNI.hx --- src/lime/system/JNI.hx | 45 +++--------------------------------------- 1 file changed, 3 insertions(+), 42 deletions(-) diff --git a/src/lime/system/JNI.hx b/src/lime/system/JNI.hx index fea483491..a295f33c5 100644 --- a/src/lime/system/JNI.hx +++ b/src/lime/system/JNI.hx @@ -48,52 +48,13 @@ class JNI public static function callMember(method:Dynamic, jobject:Dynamic, a:Array):Dynamic { - switch (a.length) - { - case 0: - return method(jobject); - case 1: - return method(jobject, a[0]); - case 2: - return method(jobject, a[0], a[1]); - case 3: - return method(jobject, a[0], a[1], a[2]); - case 4: - return method(jobject, a[0], a[1], a[2], a[3]); - case 5: - return method(jobject, a[0], a[1], a[2], a[3], a[4]); - case 6: - return method(jobject, a[0], a[1], a[2], a[3], a[4], a[5]); - case 7: - return method(jobject, a[0], a[1], a[2], a[3], a[4], a[5], a[6]); - default: - return null; - } + a.insert(0, jobject); + return Reflect.callMethod(null, method, a); } public static function callStatic(method:Dynamic, a:Array):Dynamic { - switch (a.length) - { - case 0: - return method(); - case 1: - return method(a[0]); - case 2: - return method(a[0], a[1]); - case 3: - return method(a[0], a[1], a[2]); - case 4: - return method(a[0], a[1], a[2], a[3]); - case 5: - return method(a[0], a[1], a[2], a[3], a[4]); - case 6: - return method(a[0], a[1], a[2], a[3], a[4], a[5]); - case 7: - return method(a[0], a[1], a[2], a[3], a[4], a[5], a[6]); - default: - return null; - } + return Reflect.callMethod(null, method, a); } public static function createMemberField(className:String, memberName:String, signature:String):JNIMemberField From d8237ff50b98839b3136f97e128127dbc7e7a785 Mon Sep 17 00:00:00 2001 From: Mihai Alexandru <77043862+MAJigsaw77@users.noreply.github.com> Date: Fri, 25 Nov 2022 21:53:49 +0200 Subject: [PATCH 04/47] Update GameActivity.java --- .../app/src/main/java/org/haxe/lime/GameActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index b82938858..a08d15837 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -38,7 +38,11 @@ public class GameActivity extends SDLActivity { if (metrics == null) { metrics = new DisplayMetrics (); - Extension.mainActivity.getWindowManager ().getDefaultDisplay ().getMetrics (metrics); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + Extension.mainActivity.getWindowManager ().getDefaultDisplay ().getRealMetrics (metrics); + } else { + Extension.mainActivity.getWindowManager ().getDefaultDisplay ().getMetrics (metrics); + } } From b5d6db38a7b2443cfcdd3e50d265509e55736f70 Mon Sep 17 00:00:00 2001 From: Mihai Alexandru <77043862+MAJigsaw77@users.noreply.github.com> Date: Sun, 27 Nov 2022 08:19:34 +0200 Subject: [PATCH 05/47] Update GameActivity.java --- .../app/src/main/java/org/haxe/lime/GameActivity.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index a08d15837..144ac9a21 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -38,11 +38,7 @@ public class GameActivity extends SDLActivity { if (metrics == null) { metrics = new DisplayMetrics (); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - Extension.mainActivity.getWindowManager ().getDefaultDisplay ().getRealMetrics (metrics); - } else { - Extension.mainActivity.getWindowManager ().getDefaultDisplay ().getMetrics (metrics); - } + Extension.mainActivity.getWindowManager ().getDefaultDisplay ().getRealMetrics (metrics); } From 505d90b6ae39b1377af8225472b9d6f8ea46e737 Mon Sep 17 00:00:00 2001 From: player-03 Date: Tue, 20 Dec 2022 14:10:14 -0500 Subject: [PATCH 06/47] Don't modify the argument array. Just on the off chance that the user reuses it. --- src/lime/system/JNI.hx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lime/system/JNI.hx b/src/lime/system/JNI.hx index a295f33c5..237171ce5 100644 --- a/src/lime/system/JNI.hx +++ b/src/lime/system/JNI.hx @@ -48,8 +48,7 @@ class JNI public static function callMember(method:Dynamic, jobject:Dynamic, a:Array):Dynamic { - a.insert(0, jobject); - return Reflect.callMethod(null, method, a); + return Reflect.callMethod(null, method, [jobject].concat(a)); } public static function callStatic(method:Dynamic, a:Array):Dynamic From 61dd0629bee96064217f64dbf8ba1620ebb755c6 Mon Sep 17 00:00:00 2001 From: player-03 Date: Tue, 20 Dec 2022 14:29:37 -0500 Subject: [PATCH 07/47] Use `getDisplayMetrics()`. `getRealMetrics()` is now deprecated as well. It suggests using `getCurrentWindowMetrics()` instead, but that's new in SDK 30 and doesn't even contain DPI information. Whereas this function has been around since the start. --- .../template/app/src/main/java/org/haxe/lime/GameActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index 144ac9a21..e0c37f44c 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -37,8 +37,7 @@ public class GameActivity extends SDLActivity { if (metrics == null) { - metrics = new DisplayMetrics (); - Extension.mainActivity.getWindowManager ().getDefaultDisplay ().getRealMetrics (metrics); + metrics = Extension.mainContext.getResources ().getDisplayMetrics (); } From 92e65370ee926d23a61da6035e9a709b5ce187e8 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 5 Jan 2023 12:38:45 -0500 Subject: [PATCH 08/47] Allow using Eval to run Lime tools. --- run.n | Bin 267244 -> 142183 bytes tools/RunScript.hx | 17 +++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/run.n b/run.n index 4e278d9823ceebb5175c18755cf6e6a6c19c2ee3..2544816fbf894492bf728613d97b2307f7630f0a 100644 GIT binary patch literal 142183 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

%qoQ}fS%0$*at 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 Dy(!7b diff --git a/tools/RunScript.hx b/tools/RunScript.hx index 5b4663cf0..0f4243a15 100644 --- a/tools/RunScript.hx +++ b/tools/RunScript.hx @@ -199,6 +199,23 @@ class RunScript } } + if (args.indexOf("-eval") >= 0) + { + args.remove("-eval"); + Log.info("Experimental: executing `lime " + args.slice(0, args.length - 1).join(" ") + + "` using Eval (https://haxe.org/blog/eval/)"); + + var args = [ + "-D", "lime", + "-cp", "tools", + "-cp", "tools/platforms", + "-cp", "src", + "-lib", "format", + "-lib", "hxp", + "--run", "CommandLineTools"].concat(args); + Sys.exit(runCommand("", "haxe", args)); + } + if (!FileSystem.exists("tools/tools.n") || args.indexOf("-rebuild") > -1) { rebuildTools(); From db0a8e95fa81975e879691f1ea0a3a5cabcb6625 Mon Sep 17 00:00:00 2001 From: Dimitri Pomier Date: Mon, 6 Feb 2023 13:27:13 +0100 Subject: [PATCH 09/47] Allow Assets.registerLibrary() for default library --- src/lime/utils/Assets.hx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lime/utils/Assets.hx b/src/lime/utils/Assets.hx index 58477916f..dc64da5b6 100644 --- a/src/lime/utils/Assets.hx +++ b/src/lime/utils/Assets.hx @@ -492,6 +492,11 @@ class Assets public static function registerLibrary(name:String, library:AssetLibrary):Void { + if (name == null || name == "") + { + name = "default"; + } + if (libraries.exists(name)) { if (libraries.get(name) == library) From 3b5588267b1f584849c6fed12690628b6d265576 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Tue, 7 Mar 2023 12:03:27 -0500 Subject: [PATCH 10/47] tools.hxml: Remove -D no-inline The no-inline macro was added previously to fix a compatibility issue with an older version of Haxe. It remains to be seen whether or not it is necessary as it seems to create conflicts with intermittent versions of Haxe. For this purpose we will remove it, unless it is deemed necessary again in the future. See: https://github.com/openfl/lime/discussions/1645 for more info. --- tools/tools.hxml | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/tools.hxml b/tools/tools.hxml index 01977752a..4c410494c 100644 --- a/tools/tools.hxml +++ b/tools/tools.hxml @@ -9,4 +9,3 @@ -lib hxp #-lib svg -D optional-cffi --D no-inline \ No newline at end of file From 22032ef6b51ed9e3e0f4c865cf65fd9d515abaa3 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Mon, 13 Mar 2023 18:26:44 -0400 Subject: [PATCH 11/47] Allow eval for HXP projects. Plus, do some cleanup. For instance, `nekoOutput` is only used in one spot, so might as well declare it there. Aside: I doubt `fullPath()` is needed, but I don't care to test it. --- src/lime/tools/HXProject.hx | 44 ++++++++++--------------------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/src/lime/tools/HXProject.hx b/src/lime/tools/HXProject.hx index 78eab0213..a891752af 100644 --- a/src/lime/tools/HXProject.hx +++ b/src/lime/tools/HXProject.hx @@ -376,38 +376,18 @@ class HXProject extends Script var tempDirectory = System.getTemporaryDirectory(); var classFile = Path.combine(tempDirectory, name + ".hx"); - var nekoOutput = Path.combine(tempDirectory, name + ".n"); System.copyFile(path, classFile); - #if lime var args = [ name, - "-main", - "lime.tools.HXProject", - "-cp", - tempDirectory, - "-neko", - nekoOutput, - "-cp", - Path.combine(Haxelib.getPath(new Haxelib("hxp")), "src"), - "-lib", - "lime", - "-lib", - "hxp" + #if lime + "-lib", "lime", + "-lib", "hxp", + #end + "-cp", tempDirectory, + "-cp", Path.combine(Haxelib.getPath(new Haxelib("hxp")), "src") ]; - #else - var args = [ - name, - "--interp", - "-main", - "lime.tools.HXProject", - "-cp", - tempDirectory, - "-cp", - Path.combine(Haxelib.getPath(new Haxelib("hxp")), "src") - ]; - #end var input = File.read(classFile, false); var tag = "@:compiler("; @@ -430,10 +410,6 @@ class HXProject extends Script var cacheDryRun = System.dryRun; System.dryRun = false; - #if lime - System.runCommand("", "haxe", args); - #end - var inputFile = Path.combine(tempDirectory, "input.dat"); var outputFile = Path.combine(tempDirectory, "output.dat"); @@ -457,10 +433,12 @@ class HXProject extends Script try { - #if lime - System.runCommand("", "neko", [FileSystem.fullPath(nekoOutput), inputFile, outputFile]); + #if (lime && !eval) + var nekoOutput = FileSystem.fullPath(Path.combine(tempDirectory, name + ".n")); + System.runCommand("", "haxe", args.concat(["--main", "lime.tools.HXProject", "-neko", nekoOutput])); + System.runCommand("", "neko", [nekoOutput, inputFile, outputFile]); #else - System.runCommand("", "haxe", args.concat(["--", inputFile, outputFile])); + System.runCommand("", "haxe", args.concat(["--run", "lime.tools.HXProject", inputFile, outputFile])); #end } catch (e:Dynamic) From aefce3c4ae34c15f9711f9b248ec308f86dfca39 Mon Sep 17 00:00:00 2001 From: jf <22012032+jobf@users.noreply.github.com> Date: Fri, 17 Mar 2023 18:14:42 +0000 Subject: [PATCH 12/47] change hl_al_filteri argument type --- project/src/media/openal/OpenALBindings.cpp | 2 +- src/lime/_internal/backend/native/NativeCFFI.hx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/project/src/media/openal/OpenALBindings.cpp b/project/src/media/openal/OpenALBindings.cpp index 836de928b..cd67d72cc 100644 --- a/project/src/media/openal/OpenALBindings.cpp +++ b/project/src/media/openal/OpenALBindings.cpp @@ -3659,7 +3659,7 @@ namespace lime { DEFINE_HL_PRIM (_VOID, hl_al_effecti, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_effectiv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_enable, _I32); - DEFINE_HL_PRIM (_VOID, hl_al_filteri, _TCFFIPOINTER _I32 _DYN); + DEFINE_HL_PRIM (_VOID, hl_al_filteri, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_filterf, _TCFFIPOINTER _I32 _F32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_al_gen_aux, _NO_ARG); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_al_gen_buffer, _NO_ARG); diff --git a/src/lime/_internal/backend/native/NativeCFFI.hx b/src/lime/_internal/backend/native/NativeCFFI.hx index a3da6319b..7a03bee57 100644 --- a/src/lime/_internal/backend/native/NativeCFFI.hx +++ b/src/lime/_internal/backend/native/NativeCFFI.hx @@ -2271,7 +2271,7 @@ class NativeCFFI return null; } - @:hlNative("lime", "hl_al_filteri") private static function lime_al_filteri(filter:CFFIPointer, param:Int, value:Dynamic):Void {} + @:hlNative("lime", "hl_al_filteri") private static function lime_al_filteri(filter:CFFIPointer, param:Int, value:Int):Void {} @:hlNative("lime", "hl_al_filterf") private static function lime_al_filterf(filter:CFFIPointer, param:Int, value:hl.F32):Void {} From 95411acb8c6edcecbd80e756b692dff0f55c4571 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 28 Mar 2023 12:06:41 -0700 Subject: [PATCH 13/47] ExternalInterface: fix conversion of std::wstring to std:string on non-Windows systems for file dialog functions (closes #1622) --- project/src/ExternalInterface.cpp | 89 +++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 28 deletions(-) diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 08195e7eb..bf746d0fa 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -175,6 +175,54 @@ namespace lime { } + value wstring_to_value (std::wstring* val) { + + if (val) { + + #ifdef HX_WINDOWS + return alloc_wstring (val->c_str ()); + #else + std::string _val = std::string (val->begin (), val->end ()); + return alloc_string (_val.c_str ()); + #endif + + } else { + + return 0; + + } + + } + + + vbyte* wstring_to_vbytes (std::wstring* val) { + + if (val) { + + #ifdef HX_WINDOWS + int size = std::wcslen (val->c_str ()); + char* result = (char*)malloc (size + 1); + std::wcstombs (result, val->c_str (), size); + result[size] = '\0'; + return (vbyte*)result; + #else + std::string _val = std::string (val->begin (), val->end ()); + int size = std::strlen (_val.c_str ()); + char* result = (char*)malloc (size + 1); + std::strncpy (result, _val.c_str (), size); + result[size] = '\0'; + return (vbyte*)result; + #endif + + } else { + + return 0; + + } + + } + + value lime_application_create () { Application* application = CreateApplication (); @@ -687,7 +735,7 @@ namespace lime { if (path) { - value _path = alloc_wstring (path->c_str ()); + value _path = wstring_to_value (path); delete path; return _path; @@ -720,13 +768,9 @@ namespace lime { if (path) { - int size = std::wcslen (path->c_str ()); - char* result = (char*)malloc (size + 1); - std::wcstombs (result, path->c_str (), size); - result[size] = '\0'; + vbyte* _path = wstring_to_vbytes (path); delete path; - - return (vbyte*)result; + return _path; } else { @@ -757,7 +801,7 @@ namespace lime { if (path) { - value _path = alloc_wstring (path->c_str ()); + value _path = wstring_to_value (path); delete path; return _path; @@ -790,13 +834,9 @@ namespace lime { if (path) { - int size = std::wcslen (path->c_str ()); - char* result = (char*)malloc (size + 1); - std::wcstombs (result, path->c_str (), size); - result[size] = '\0'; + vbyte* _path = wstring_to_vbytes (path); delete path; - - return (vbyte*)result; + return _path; } else { @@ -830,7 +870,8 @@ namespace lime { for (int i = 0; i < files.size (); i++) { - val_array_set_i (result, i, alloc_wstring (files[i]->c_str ())); + value _file = wstring_to_value (files[i]); + val_array_set_i (result, i, _file); delete files[i]; } @@ -864,12 +905,8 @@ namespace lime { for (int i = 0; i < files.size (); i++) { - int size = std::wcslen (files[i]->c_str ()); - char* _file = (char*)malloc (size + 1); - std::wcstombs (_file, files[i]->c_str (), size); - _file[size] = '\0'; - - *resultData++ = (vbyte*)_file; + vbyte* _file = wstring_to_vbytes (files[i]); + *resultData++ = _file; delete files[i]; } @@ -899,7 +936,7 @@ namespace lime { if (path) { - value _path = alloc_wstring (path->c_str ()); + value _path = wstring_to_value (path); delete path; return _path; @@ -932,13 +969,9 @@ namespace lime { if (path) { - int size = std::wcslen (path->c_str ()); - char* result = (char*)malloc (size + 1); - std::wcstombs (result, path->c_str (), size); - result[size] = '\0'; + vbyte* _path = wstring_to_vbytes (path); delete path; - - return (vbyte*)result; + return _path; } else { From a68e9c4b8e714e208c715bfd452924deb6821291 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 28 Mar 2023 13:00:20 -0700 Subject: [PATCH 14/47] ExternalInterface: fix error from missing header on Linux in commit 95411acb8c6edcecbd80e756b692dff0f55c4571 --- project/src/ExternalInterface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index bf746d0fa..989d1e798 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -54,6 +54,7 @@ #endif #include +#include DEFINE_KIND (k_finalizer); From 77f3d4bacf87afed54cb98a68ad311bfe80c00b5 Mon Sep 17 00:00:00 2001 From: player-03 Date: Sat, 1 Apr 2023 11:20:05 -0400 Subject: [PATCH 15/47] Improve "Could not find NekoAPI interface" message. This message comes up relatively often when a new user tries to set up Lime, but fails to give any instructions a new user could use. This commit adds a new message explaining the most common issue and how to solve it. It also provides file paths, which may help with more in-depth debugging. --- src/lime/system/CFFI.hx | 45 +++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/lime/system/CFFI.hx b/src/lime/system/CFFI.hx index 4f36f0306..c6e7be02a 100644 --- a/src/lime/system/CFFI.hx +++ b/src/lime/system/CFFI.hx @@ -280,34 +280,35 @@ class CFFI { if (!__loadedNekoAPI) { + var init:Dynamic; try { - var init = load("lime", "neko_init", 5); - - if (init != null) - { - __loaderTrace("Found nekoapi @ " + __moduleNames.get("lime")); - init(function(s) return new String(s), function(len:Int) - { - var r = []; - if (len > 0) r[len - 1] = null; - return r; - }, null, true, false); - } - else if (!lazy) - { - throw("Could not find NekoAPI interface."); - } + init = load("lime", "neko_init", 5); } - catch (e:Dynamic) + catch (e) { - if (!lazy) - { - throw("Could not find NekoAPI interface."); - } } - __loadedNekoAPI = true; + if (init != null) + { + __loaderTrace("Found nekoapi @ " + __moduleNames.get("lime")); + init(function(s) return new String(s), function(len:Int) + { + var r = []; + if (len > 0) r[len - 1] = null; + return r; + }, null, true, false); + + __loadedNekoAPI = true; + } + else if (!lazy) + { + var ndllFolder = __findHaxelib("lime") + "/ndll/" + __sysName(); + throw "Could not find lime.ndll. This file is provided with Lime's Haxelib releases, but not via Git. " + + "Please copy it from Lime's latest Haxelib release into either " + + ndllFolder + " or " + ndllFolder + "64, as appropriate for your system. " + + "Advanced users may run `lime rebuild cpp` instead."; + } } } #end From 776db44e37bc909299d896865f1c46e80b2e9681 Mon Sep 17 00:00:00 2001 From: player-03 Date: Sat, 1 Apr 2023 11:29:35 -0400 Subject: [PATCH 16/47] Add missing type declaration. Nowadays you're supposed to omit this type declaration, but what I didn't realize is that that feature was added in Haxe 4.1. Since Lime still needs to support earlier versions, we'll just have to do it the old way. --- src/lime/system/CFFI.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/system/CFFI.hx b/src/lime/system/CFFI.hx index c6e7be02a..cf0dbb035 100644 --- a/src/lime/system/CFFI.hx +++ b/src/lime/system/CFFI.hx @@ -285,7 +285,7 @@ class CFFI { init = load("lime", "neko_init", 5); } - catch (e) + catch (e:Dynamic) { } From 2026f404ff8ff9a9aaccd39a1540af403f736e03 Mon Sep 17 00:00:00 2001 From: player-03 Date: Sat, 1 Apr 2023 11:33:20 -0400 Subject: [PATCH 17/47] Initialize variable. --- src/lime/system/CFFI.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/system/CFFI.hx b/src/lime/system/CFFI.hx index cf0dbb035..ff230b75c 100644 --- a/src/lime/system/CFFI.hx +++ b/src/lime/system/CFFI.hx @@ -280,7 +280,7 @@ class CFFI { if (!__loadedNekoAPI) { - var init:Dynamic; + var init:Dynamic = null; try { init = load("lime", "neko_init", 5); From 4d3ae39d5013e24f78fb2c4b073d71bc318c594b Mon Sep 17 00:00:00 2001 From: player-03 Date: Sat, 1 Apr 2023 11:56:41 -0400 Subject: [PATCH 18/47] Use forward slashes to load lime.ndll. `substr(7)` returns the substring _starting_ at character 7, which will never be "windows". The author meant to type `substr(0, 7)` instead, to get the substring ending at 7. We could easily make this change, but given that the code has been successfully using forward slashes for several years, I prefer to simplify. --- src/lime/system/CFFI.hx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lime/system/CFFI.hx b/src/lime/system/CFFI.hx index 4f36f0306..3aa9eba9f 100644 --- a/src/lime/system/CFFI.hx +++ b/src/lime/system/CFFI.hx @@ -149,16 +149,15 @@ class CFFI if (result == null) { - var slash = (__sysName().substr(7).toLowerCase() == "windows") ? "\\" : "/"; var haxelib = __findHaxelib("lime"); if (haxelib != "") { - result = __tryLoad(haxelib + slash + "ndll" + slash + __sysName() + slash + library, library, method, args); + result = __tryLoad(haxelib + "/ndll/" + __sysName() + "/" + library, library, method, args); if (result == null) { - result = __tryLoad(haxelib + slash + "ndll" + slash + __sysName() + "64" + slash + library, library, method, args); + result = __tryLoad(haxelib + "/ndll/" + __sysName() + "64/" + library, library, method, args); } } } From 0f694662f95c511138861989759e97a0c6b5415c Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 4 Apr 2023 09:00:28 -0700 Subject: [PATCH 19/47] HTML5HTTPRequst: status 400 should be considered an error --- src/lime/_internal/backend/html5/HTML5HTTPRequest.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx b/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx index e05967b29..cbbe9bbf2 100644 --- a/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx +++ b/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx @@ -534,7 +534,7 @@ class HTML5HTTPRequest { if (request.readyState != 4) return; - if (request.status != null && ((request.status >= 200 && request.status <= 400) || (validStatus0 && request.status == 0))) + if (request.status != null && ((request.status >= 200 && request.status < 400) || (validStatus0 && request.status == 0))) { processResponse(); promise.complete(request.responseText); From adda161ec6811c5c4f18ffe99c3c1f20a77816e1 Mon Sep 17 00:00:00 2001 From: player-03 Date: Wed, 5 Apr 2023 16:36:36 -0400 Subject: [PATCH 20/47] Use "password" text input only on Android. Using `userAgent` to tell whether the app is running on Android. This isn't foolproof, but will work more often than the previous approach (where you chose at compile time and your choice applied to all devices). Resolves #1655. --- src/lime/_internal/backend/html5/HTML5Window.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx index 55ddbc061..ca481b681 100644 --- a/src/lime/_internal/backend/html5/HTML5Window.hx +++ b/src/lime/_internal/backend/html5/HTML5Window.hx @@ -1119,7 +1119,7 @@ class HTML5Window textInput.type = 'text'; #else // use password instead of text to avoid IME issues on Android - textInput.type = 'password'; + textInput.type = Browser.navigator.userAgent.indexOf("Android") >= 0 ? 'password' : 'text'; #end textInput.style.position = 'absolute'; textInput.style.opacity = "0"; From 48dc64373bfdd4c7081a9e87260be2afbe0a7286 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 10:40:25 -0700 Subject: [PATCH 21/47] Application: let AIR handle checking for all windows closed with its own autoExit behavior --- src/lime/app/Application.hx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lime/app/Application.hx b/src/lime/app/Application.hx index 0949139e3..5693a1914 100644 --- a/src/lime/app/Application.hx +++ b/src/lime/app/Application.hx @@ -555,12 +555,15 @@ class Application extends Module @:noCompletion private function __checkForAllWindowsClosed():Void { + // air handles this automatically with NativeApplication.autoExit + #if !air if (__windows.length == 0) { #if !lime_doc_gen System.exit(0); #end } + #end } @:noCompletion private function __onGamepadConnect(gamepad:Gamepad):Void From 23bafb203556d6d4cbe02260051664c6dfa716cf Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 12:41:21 -0700 Subject: [PATCH 22/47] System: exit() on html5 "closes" the main application window --- src/lime/system/System.hx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lime/system/System.hx b/src/lime/system/System.hx index 6d93f4018..6701340b1 100644 --- a/src/lime/system/System.hx +++ b/src/lime/system/System.hx @@ -141,12 +141,13 @@ class System #if (!lime_doc_gen || sys) public static function exit(code:Int):Void { - #if ((sys || air) && !macro) - if (Application.current != null) + var currentApp = Application.current; + #if ((sys || (js && html5) || air) && !macro) + if (currentApp != null) { - Application.current.onExit.dispatch(code); + currentApp.onExit.dispatch(code); - if (Application.current.onExit.canceled) + if (currentApp.onExit.canceled) { return; } @@ -155,6 +156,11 @@ class System #if sys Sys.exit(code); + #elseif (js && html5) + if (currentApp != null && currentApp.window != null) + { + currentApp.window.close(); + } #elseif air NativeApplication.nativeApplication.exit(code); #end From 82ec709831a9d52f6ddec6a5af33d012e44fff08 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 12:43:25 -0700 Subject: [PATCH 23/47] Application: on exit, clear Application.current if it is equal to this This matches setting Application.current in the constructor, and helps avoid memory leaks --- src/lime/app/Application.hx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lime/app/Application.hx b/src/lime/app/Application.hx index 5693a1914..6197d1f2d 100644 --- a/src/lime/app/Application.hx +++ b/src/lime/app/Application.hx @@ -591,6 +591,10 @@ class Application extends Module @:noCompletion private function __onModuleExit(code:Int):Void { __backend.exit(); + if (Application.current == this) + { + Application.current = null; + } } @:noCompletion private function __onWindowClose(window:Window):Void From 906492a5b1bb94ed374ab14103315c28b0b2896a Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 13:31:02 -0700 Subject: [PATCH 24/47] Application: fix handling of canceled when onExit is dispatched --- src/lime/app/Application.hx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lime/app/Application.hx b/src/lime/app/Application.hx index 6197d1f2d..c112f5d0c 100644 --- a/src/lime/app/Application.hx +++ b/src/lime/app/Application.hx @@ -514,7 +514,7 @@ class Application extends Module { application.onUpdate.add(update); application.onExit.add(onModuleExit, false, 0); - application.onExit.add(__onModuleExit, false, 0); + application.onExit.add(__onModuleExit, false, -1000); for (gamepad in Gamepad.devices) { @@ -590,6 +590,10 @@ class Application extends Module @:noCompletion private function __onModuleExit(code:Int):Void { + if (onExit.canceled) + { + return; + } __backend.exit(); if (Application.current == this) { From e9a085311ea2863dfc14a660aea3b54e6017aa4d Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 13:31:40 -0700 Subject: [PATCH 25/47] AIRApplication: check for null with Application.current --- src/lime/_internal/backend/air/AIRApplication.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/_internal/backend/air/AIRApplication.hx b/src/lime/_internal/backend/air/AIRApplication.hx index 9dc75930b..c814ec97b 100644 --- a/src/lime/_internal/backend/air/AIRApplication.hx +++ b/src/lime/_internal/backend/air/AIRApplication.hx @@ -21,7 +21,7 @@ class AIRApplication extends FlashApplication { System.exit(0); - if (Application.current.onExit.canceled) + if (Application.current != null && Application.current.onExit.canceled) { event.preventDefault(); event.stopImmediatePropagation(); From ea8ed5bbe4a2b51287324d97da71c90aa310cf9e Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 13:36:52 -0700 Subject: [PATCH 26/47] HTML5Window: clean up canvas/div and event listeners on window close() --- .../_internal/backend/html5/HTML5Window.hx | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx index 636275a5f..185972d97 100644 --- a/src/lime/_internal/backend/html5/HTML5Window.hx +++ b/src/lime/_internal/backend/html5/HTML5Window.hx @@ -250,6 +250,45 @@ class HTML5Window public function close():Void { + var element = parent.element; + if (element != null) + { + if (canvas != null) + { + if (element != cast canvas) + { + element.removeChild(canvas); + } + canvas = null; + } + else if (div != null) + { + element.removeChild(div); + div = null; + } + + var events = ["mousedown", "mouseenter", "mouseleave", "mousemove", "mouseup", "wheel"]; + + for (event in events) + { + element.removeEventListener(event, handleMouseEvent, true); + } + + element.removeEventListener("contextmenu", handleContextMenuEvent, true); + + element.removeEventListener("dragstart", handleDragEvent, true); + element.removeEventListener("dragover", handleDragEvent, true); + element.removeEventListener("drop", handleDragEvent, true); + + element.removeEventListener("touchstart", handleTouchEvent, true); + element.removeEventListener("touchmove", handleTouchEvent, true); + element.removeEventListener("touchend", handleTouchEvent, true); + element.removeEventListener("touchcancel", handleTouchEvent, true); + + element.removeEventListener("gamepadconnected", handleGamepadEvent, true); + element.removeEventListener("gamepaddisconnected", handleGamepadEvent, true); + } + parent.application.__removeWindow(parent); } From f43173b942faf65695c01f8afefb2dc563d54f6a Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 13:41:14 -0700 Subject: [PATCH 27/47] Application: call __unregisterLimeModule on exit, similar to match the call to __registerLimeModule in the constructor For some reason, this method was never called. --- src/lime/app/Application.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lime/app/Application.hx b/src/lime/app/Application.hx index c112f5d0c..3348e3f4e 100644 --- a/src/lime/app/Application.hx +++ b/src/lime/app/Application.hx @@ -594,6 +594,8 @@ class Application extends Module { return; } + + __unregisterLimeModule(this); __backend.exit(); if (Application.current == this) { @@ -623,8 +625,6 @@ class Application extends Module Touch.onStart.remove(onTouchStart); Touch.onMove.remove(onTouchMove); Touch.onEnd.remove(onTouchEnd); - - onModuleExit(0); } // Get & Set Methods From dc1a11bdace5217ff9f0389e56e962f3c551a033 Mon Sep 17 00:00:00 2001 From: player-03 Date: Mon, 10 Apr 2023 17:26:00 -0400 Subject: [PATCH 28/47] Use version 2 of actions/setup-java GitHub is deprecating Node 12, forcing us to update any actions that rely on it. https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/ actions/setup-java@v2 now requires us to specify a distribution. v1 used Zulu, so we'll just stick with that for now. --- .github/workflows/main.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cb194f38b..b39889d97 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -217,8 +217,9 @@ jobs: with: ndk-version: r15c - - uses: actions/setup-java@v1 + - uses: actions/setup-java@v2 with: + distribution: "zulu" java-version: 8 - uses: krdlab/setup-haxe@v1 @@ -462,8 +463,9 @@ jobs: with: ndk-version: r15c - - uses: actions/setup-java@v1 + - uses: actions/setup-java@v2 with: + distribution: "zulu" java-version: 8 - uses: krdlab/setup-haxe@v1 From 1e6d883baf567f06599af952ebf215b27cf6398e Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 14:58:24 -0700 Subject: [PATCH 29/47] IOSPlatform: when building liblime.iphonesim.a, explicitly add -DHXCPP_M32 It looks like the new hxcpp update defaults to 64-bit now, so we need to be explicit --- tools/platforms/IOSPlatform.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/platforms/IOSPlatform.hx b/tools/platforms/IOSPlatform.hx index 065e4d48d..04fd2277e 100644 --- a/tools/platforms/IOSPlatform.hx +++ b/tools/platforms/IOSPlatform.hx @@ -491,7 +491,7 @@ class IOSPlatform extends PlatformTarget if (armv7) commands.push(["-Dios", "-DHXCPP_CPP11", "-DHXCPP_ARMV7"]); if (armv7s) commands.push(["-Dios", "-DHXCPP_CPP11", "-DHXCPP_ARMV7S"]); if (arm64) commands.push(["-Dios", "-DHXCPP_CPP11", "-DHXCPP_ARM64"]); - if (i386) commands.push(["-Dios", "-Dsimulator", "-DHXCPP_CPP11"]); + if (i386) commands.push(["-Dios", "-Dsimulator", "-DHXCPP_M32", "-DHXCPP_CPP11"]); if (x86_64) commands.push(["-Dios", "-Dsimulator", "-DHXCPP_M64", "-DHXCPP_CPP11"]); if (arc) From 72db2427205b682bfb11f9fe982ec8ef72d0d290 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 15:03:45 -0700 Subject: [PATCH 30/47] IOSPlatform: be explicit about armv6, just in case the default architecture used by hxcpp changes in the future The default changed recently for the x86 simulator, so best to be safe --- tools/platforms/IOSPlatform.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/platforms/IOSPlatform.hx b/tools/platforms/IOSPlatform.hx index 04fd2277e..6412e1c74 100644 --- a/tools/platforms/IOSPlatform.hx +++ b/tools/platforms/IOSPlatform.hx @@ -487,7 +487,7 @@ class IOSPlatform extends PlatformTarget var commands = []; - if (armv6) commands.push(["-Dios", "-DHXCPP_CPP11"]); + if (armv6) commands.push(["-Dios", "-DHXCPP_CPP11", "-DHXCPP_ARMV6"]); if (armv7) commands.push(["-Dios", "-DHXCPP_CPP11", "-DHXCPP_ARMV7"]); if (armv7s) commands.push(["-Dios", "-DHXCPP_CPP11", "-DHXCPP_ARMV7S"]); if (arm64) commands.push(["-Dios", "-DHXCPP_CPP11", "-DHXCPP_ARM64"]); From f34b595e70785758d3517030466a954af17027bb Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 15:20:50 -0700 Subject: [PATCH 31/47] IOSPlatform: remove armv7 from default iOS architectures because latest Xcode reports error Fixes error: The armv7 architecture is deprecated. You should update your ARCHS build setting to remove the armv7 architecture. (in target 'Build Haxe' from project 'MyProject') --- tools/platforms/IOSPlatform.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/platforms/IOSPlatform.hx b/tools/platforms/IOSPlatform.hx index 6412e1c74..8a8736a4f 100644 --- a/tools/platforms/IOSPlatform.hx +++ b/tools/platforms/IOSPlatform.hx @@ -91,7 +91,7 @@ class IOSPlatform extends PlatformTarget title: "" }; - defaults.architectures = [Architecture.ARMV7, Architecture.ARM64]; + defaults.architectures = [Architecture.ARM64]; defaults.window.width = 0; defaults.window.height = 0; defaults.window.fullscreen = true; @@ -250,7 +250,7 @@ class IOSPlatform extends PlatformTarget if (architectures == null || architectures.length == 0) { - architectures = [Architecture.ARMV7, Architecture.ARM64]; + architectures = [Architecture.ARM64]; } if (project.config.getString("ios.device", "universal") == "universal" || project.config.getString("ios.device") == "iphone") From 8825d27cb2f108757bd02751d8514922b567b6de Mon Sep 17 00:00:00 2001 From: player-03 Date: Mon, 10 Apr 2023 19:06:56 -0400 Subject: [PATCH 32/47] Use version 3 of actions/setup-java. Version 2 wasn't even the latest version, and still used Node 12. --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b39889d97..f871238e6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -217,7 +217,7 @@ jobs: with: ndk-version: r15c - - uses: actions/setup-java@v2 + - uses: actions/setup-java@v3 with: distribution: "zulu" java-version: 8 @@ -463,7 +463,7 @@ jobs: with: ndk-version: r15c - - uses: actions/setup-java@v2 + - uses: actions/setup-java@v3 with: distribution: "zulu" java-version: 8 From f07e94708b139ae5f3bec899ab2cf17a8cb0547b Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 11 Apr 2023 09:46:10 -0700 Subject: [PATCH 33/47] Window: minWidth/minHeight/setMinSize and maxWidth/maxHeight/setMaxSize --- project/include/ui/Window.h | 2 + project/src/ExternalInterface.cpp | 36 +++++++ project/src/backend/sdl/SDLWindow.cpp | 14 +++ project/src/backend/sdl/SDLWindow.h | 2 + src/lime/_internal/backend/air/AIRWindow.hx | 17 +++ .../_internal/backend/flash/FlashWindow.hx | 4 + .../_internal/backend/html5/HTML5Window.hx | 4 + .../_internal/backend/native/NativeCFFI.hx | 14 +++ .../_internal/backend/native/NativeWindow.hx | 20 ++++ src/lime/ui/Window.hx | 101 ++++++++++++++++++ 10 files changed, 214 insertions(+) diff --git a/project/include/ui/Window.h b/project/include/ui/Window.h index dc4146142..2db40ab27 100644 --- a/project/include/ui/Window.h +++ b/project/include/ui/Window.h @@ -48,6 +48,8 @@ namespace lime { virtual void Move (int x, int y) = 0; virtual void ReadPixels (ImageBuffer *buffer, Rectangle *rect) = 0; virtual void Resize (int width, int height) = 0; + virtual void SetMinimumSize (int width, int height) = 0; + virtual void SetMaximumSize (int width, int height) = 0; virtual bool SetBorderless (bool borderless) = 0; virtual void SetCursor (Cursor cursor) = 0; virtual void SetDisplayMode (DisplayMode* displayMode) = 0; diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 298a55316..4fd7c5518 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -3518,6 +3518,38 @@ namespace lime { } + void lime_window_set_minimum_size (value window, int width, int height) { + + Window* targetWindow = (Window*)val_data (window); + targetWindow->SetMinimumSize (width, height); + + } + + + HL_PRIM void HL_NAME(hl_window_set_minimum_size) (HL_CFFIPointer* window, int width, int height) { + + Window* targetWindow = (Window*)window->ptr; + targetWindow->SetMinimumSize (width, height); + + } + + + void lime_window_set_maximum_size (value window, int width, int height) { + + Window* targetWindow = (Window*)val_data (window); + targetWindow->SetMaximumSize (width, height); + + } + + + HL_PRIM void HL_NAME(hl_window_set_maximum_size) (HL_CFFIPointer* window, int width, int height) { + + Window* targetWindow = (Window*)window->ptr; + targetWindow->SetMaximumSize (width, height); + + } + + bool lime_window_set_borderless (value window, bool borderless) { Window* targetWindow = (Window*)val_data (window); @@ -3986,6 +4018,8 @@ namespace lime { DEFINE_PRIME3v (lime_window_move); DEFINE_PRIME3 (lime_window_read_pixels); DEFINE_PRIME3v (lime_window_resize); + DEFINE_PRIME3v (lime_window_set_minimum_size); + DEFINE_PRIME3v (lime_window_set_maximum_size); DEFINE_PRIME2 (lime_window_set_borderless); DEFINE_PRIME2v (lime_window_set_cursor); DEFINE_PRIME2 (lime_window_set_display_mode); @@ -4173,6 +4207,8 @@ namespace lime { DEFINE_HL_PRIM (_VOID, hl_window_move, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_DYN, hl_window_read_pixels, _TCFFIPOINTER _TRECTANGLE _TIMAGEBUFFER); DEFINE_HL_PRIM (_VOID, hl_window_resize, _TCFFIPOINTER _I32 _I32); + DEFINE_HL_PRIM (_VOID, hl_window_set_minimum_size, _TCFFIPOINTER _I32 _I32); + DEFINE_HL_PRIM (_VOID, hl_window_set_maximum_size, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_BOOL, hl_window_set_borderless, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_VOID, hl_window_set_cursor, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_window_set_display_mode, _TCFFIPOINTER _TDISPLAYMODE _TDISPLAYMODE); diff --git a/project/src/backend/sdl/SDLWindow.cpp b/project/src/backend/sdl/SDLWindow.cpp index 871c2e7ec..59ff7435f 100644 --- a/project/src/backend/sdl/SDLWindow.cpp +++ b/project/src/backend/sdl/SDLWindow.cpp @@ -745,6 +745,20 @@ namespace lime { } + void SDLWindow::SetMinimumSize (int width, int height) { + + SDL_SetWindowMinimumSize (sdlWindow, width, height); + + } + + + void SDLWindow::SetMaximumSize (int width, int height) { + + SDL_SetWindowMaximumSize (sdlWindow, width, height); + + } + + bool SDLWindow::SetBorderless (bool borderless) { if (borderless) { diff --git a/project/src/backend/sdl/SDLWindow.h b/project/src/backend/sdl/SDLWindow.h index e66569f9c..50ee4638e 100644 --- a/project/src/backend/sdl/SDLWindow.h +++ b/project/src/backend/sdl/SDLWindow.h @@ -42,6 +42,8 @@ namespace lime { virtual void Move (int x, int y); virtual void ReadPixels (ImageBuffer *buffer, Rectangle *rect); virtual void Resize (int width, int height); + virtual void SetMinimumSize (int width, int height); + virtual void SetMaximumSize (int width, int height); virtual bool SetBorderless (bool borderless); virtual void SetCursor (Cursor cursor); virtual void SetDisplayMode (DisplayMode* displayMode); diff --git a/src/lime/_internal/backend/air/AIRWindow.hx b/src/lime/_internal/backend/air/AIRWindow.hx index 821ec79cd..3dccc8264 100644 --- a/src/lime/_internal/backend/air/AIRWindow.hx +++ b/src/lime/_internal/backend/air/AIRWindow.hx @@ -5,6 +5,7 @@ import flash.display.NativeWindow; import flash.display.NativeWindowInitOptions; import flash.display.NativeWindowRenderMode; import flash.display.NativeWindowSystemChrome; +import flash.geom.Point; import flash.events.Event; import flash.events.NativeWindowBoundsEvent; import flash.html.HTMLLoader; @@ -231,6 +232,22 @@ class AIRWindow extends FlashWindow } } + public override function setMinSize(width:Int, height:Int):Void + { + if (nativeWindow != null) + { + nativeWindow.minSize = new Point(width, height); + } + } + + public override function setMaxSize(width:Int, height:Int):Void + { + if (nativeWindow != null) + { + nativeWindow.maxSize = new Point(width, height); + } + } + public override function setMaximized(value:Bool):Bool { if (nativeWindow != null) diff --git a/src/lime/_internal/backend/flash/FlashWindow.hx b/src/lime/_internal/backend/flash/FlashWindow.hx index 2d3988e5c..a1f3dc7b6 100644 --- a/src/lime/_internal/backend/flash/FlashWindow.hx +++ b/src/lime/_internal/backend/flash/FlashWindow.hx @@ -586,6 +586,10 @@ class FlashWindow public function resize(width:Int, height:Int):Void {} + public function setMinSize(width:Int, height:Int):Void {} + + public function setMaxSize(width:Int, height:Int):Void {} + public function setBorderless(value:Bool):Bool { return value; diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx index 185972d97..6ca19adb8 100644 --- a/src/lime/_internal/backend/html5/HTML5Window.hx +++ b/src/lime/_internal/backend/html5/HTML5Window.hx @@ -966,6 +966,10 @@ class HTML5Window public function resize(width:Int, height:Int):Void {} + public function setMinSize(width:Int, height:Int):Void {} + + public function setMaxSize(width:Int, height:Int):Void {} + public function setBorderless(value:Bool):Bool { return value; diff --git a/src/lime/_internal/backend/native/NativeCFFI.hx b/src/lime/_internal/backend/native/NativeCFFI.hx index 6372a96bc..5b1fee433 100644 --- a/src/lime/_internal/backend/native/NativeCFFI.hx +++ b/src/lime/_internal/backend/native/NativeCFFI.hx @@ -323,6 +323,10 @@ class NativeCFFI @:cffi private static function lime_window_resize(handle:Dynamic, width:Int, height:Int):Void; + @:cffi private static function lime_window_set_minimum_size(handle:Dynamic, width:Int, height:Int):Void; + + @:cffi private static function lime_window_set_maximum_size(handle:Dynamic, width:Int, height:Int):Void; + @:cffi private static function lime_window_set_borderless(handle:Dynamic, borderless:Bool):Bool; @:cffi private static function lime_window_set_cursor(handle:Dynamic, cursor:Int):Void; @@ -582,6 +586,10 @@ class NativeCFFI "lime_window_read_pixels", "oooo", false)); private static var lime_window_resize = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_resize", "oiiv", false)); + private static var lime_window_set_minimum_size = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_minimum_size", "oiiv", + false)); + private static var lime_window_set_maximum_size = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_maximum_size", "oiiv", + false)); private static var lime_window_set_borderless = new cpp.CallableBool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_borderless", "obb", false)); private static var lime_window_set_cursor = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_cursor", "oiv", @@ -753,6 +761,8 @@ class NativeCFFI private static var lime_window_move = CFFI.load("lime", "lime_window_move", 3); private static var lime_window_read_pixels = CFFI.load("lime", "lime_window_read_pixels", 3); private static var lime_window_resize = CFFI.load("lime", "lime_window_resize", 3); + private static var lime_window_set_minimum_size = CFFI.load("lime", "lime_window_set_minimum_size", 3); + private static var lime_window_set_maximum_size = CFFI.load("lime", "lime_window_set_maximum_size", 3); private static var lime_window_set_borderless = CFFI.load("lime", "lime_window_set_borderless", 2); private static var lime_window_set_cursor = CFFI.load("lime", "lime_window_set_cursor", 2); private static var lime_window_set_display_mode = CFFI.load("lime", "lime_window_set_display_mode", 2); @@ -1324,6 +1334,10 @@ class NativeCFFI @:hlNative("lime", "hl_window_resize") private static function lime_window_resize(handle:CFFIPointer, width:Int, height:Int):Void {} + @:hlNative("lime", "hl_window_set_minimum_size") private static function lime_window_set_minimum_size(handle:CFFIPointer, width:Int, height:Int):Void {} + + @:hlNative("lime", "hl_window_set_maximum_size") private static function lime_window_set_maximum_size(handle:CFFIPointer, width:Int, height:Int):Void {} + @:hlNative("lime", "hl_window_set_borderless") private static function lime_window_set_borderless(handle:CFFIPointer, borderless:Bool):Bool { return false; diff --git a/src/lime/_internal/backend/native/NativeWindow.hx b/src/lime/_internal/backend/native/NativeWindow.hx index 4b0e94253..36790c5f4 100644 --- a/src/lime/_internal/backend/native/NativeWindow.hx +++ b/src/lime/_internal/backend/native/NativeWindow.hx @@ -461,6 +461,26 @@ class NativeWindow } } + public function setMinSize(width:Int, height:Int):Void + { + if (handle != null) + { + #if (!macro && lime_cffi) + NativeCFFI.lime_window_set_minimum_size(handle, width, height); + #end + } + } + + public function setMaxSize(width:Int, height:Int):Void + { + if (handle != null) + { + #if (!macro && lime_cffi) + NativeCFFI.lime_window_set_maximum_size(handle, width, height); + #end + } + } + public function setBorderless(value:Bool):Bool { if (handle != null) diff --git a/src/lime/ui/Window.hx b/src/lime/ui/Window.hx index 177214835..f1abc1758 100644 --- a/src/lime/ui/Window.hx +++ b/src/lime/ui/Window.hx @@ -50,8 +50,12 @@ class Window public var height(get, set):Int; public var hidden(get, null):Bool; public var id(default, null):Int; + public var maxHeight(get, set):Int; public var maximized(get, set):Bool; + public var maxWidth(get, set):Int; + public var minHeight(get, set):Int; public var minimized(get, set):Bool; + public var minWidth(get, set):Int; public var mouseLock(get, set):Bool; public var onActivate(default, null) = new EventVoid>(); public var onClose(default, null) = new EventVoid>(); @@ -114,6 +118,10 @@ class Window @:noCompletion private var __width:Int; @:noCompletion private var __x:Int; @:noCompletion private var __y:Int; + @:noCompletion private var __minWidth:Int; + @:noCompletion private var __minHeight:Int; + @:noCompletion private var __maxWidth:Int; + @:noCompletion private var __maxHeight:Int; #if commonjs private static function __init__() @@ -128,8 +136,12 @@ class Window "frameRate": {get: p.get_frameRate, set: p.set_frameRate}, "fullscreen": {get: p.get_fullscreen, set: p.set_fullscreen}, "height": {get: p.get_height, set: p.set_height}, + "maxHeight": {get: p.get_maxHeight, set: p.set_maxHeight}, "maximized": {get: p.get_maximized, set: p.set_maximized}, + "maxWidth": {get: p.get_maxWidth, set: p.set_maxWidth}, + "minHeight": {get: p.get_minHeight, set: p.set_minHeight}, "minimized": {get: p.get_minimized, set: p.set_minimized}, + "minWidth": {get: p.get_minWidth, set: p.set_minWidth}, "mouseLock": {get: p.get_mouseLock, set: p.set_mouseLock}, "resizable": {get: p.get_resizable, set: p.set_resizable}, "scale": {get: p.get_scale}, @@ -396,12 +408,57 @@ class Window public function resize(width:Int, height:Int):Void { + if (width < __minWidth) + { + width = __minWidth; + } + else if (width > __maxWidth) + { + width = __maxWidth; + } + if (height < __minHeight) + { + height = __minHeight; + } + else if (height > __maxHeight) + { + height = __maxHeight; + } + __backend.resize(width, height); __width = width; __height = height; } + public function setMinSize(width:Int, height:Int):Void + { + __backend.setMinSize(width, height); + + __minWidth = width; + __minHeight = height; + if (__width < __minWidth) { + __width = __minWidth; + } + if (__height < __minHeight) { + __height = __minHeight; + } + } + + public function setMaxSize(width:Int, height:Int):Void + { + __backend.setMaxSize(width, height); + + __maxWidth = width; + __maxHeight = height; + if (__width > __maxWidth) { + __width = __maxWidth; + } + if (__height > __maxHeight) { + __height = __maxHeight; + } + } + public function setIcon(image:Image):Void { if (image == null) @@ -494,6 +551,17 @@ class Window return __hidden; } + @:noCompletion private inline function get_maxHeight():Int + { + return __maxHeight; + } + + @:noCompletion private function set_maxHeight(value:Int):Int + { + setMaxSize(__maxWidth, value); + return __maxHeight; + } + @:noCompletion private inline function get_maximized():Bool { return __maximized; @@ -505,6 +573,28 @@ class Window return __maximized = __backend.setMaximized(value); } + @:noCompletion private inline function get_maxWidth():Int + { + return __maxWidth; + } + + @:noCompletion private function set_maxWidth(value:Int):Int + { + setMinSize(value, __maxHeight); + return __maxWidth; + } + + @:noCompletion private inline function get_minHeight():Int + { + return __minHeight; + } + + @:noCompletion private function set_minHeight(value:Int):Int + { + setMinSize(__minWidth, value); + return __minHeight; + } + @:noCompletion private inline function get_minimized():Bool { return __minimized; @@ -516,6 +606,17 @@ class Window return __minimized = __backend.setMinimized(value); } + @:noCompletion private inline function get_minWidth():Int + { + return __minWidth; + } + + @:noCompletion private function set_minWidth(value:Int):Int + { + setMinSize(value, __minHeight); + return __minWidth; + } + @:noCompletion private function get_mouseLock():Bool { return __backend.getMouseLock(); From e753c5c9334f9a49cc6ab6505b7ee1397c6fbe72 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 11 Apr 2023 15:21:52 -0700 Subject: [PATCH 34/47] AIRHelper: fix failed Adobe AIR for iOS build on Windows It was incorrectly trying to list simulators from Xcode (and Xcode, obviously, doesn't exist on Windows) --- src/lime/tools/AIRHelper.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/tools/AIRHelper.hx b/src/lime/tools/AIRHelper.hx index 08c009060..4a0d66c57 100644 --- a/src/lime/tools/AIRHelper.hx +++ b/src/lime/tools/AIRHelper.hx @@ -204,7 +204,7 @@ class AIRHelper Sys.putEnv("AIR_NOANDROIDFLAIR", "true"); } - if (targetPlatform == IOS) + if (targetPlatform == IOS && System.hostPlatform == MAC) { Sys.putEnv("AIR_IOS_SIMULATOR_DEVICE", XCodeHelper.getSimulatorName(project)); } From 2e19898c288b29dcd7c33774ab546eb695a7a38a Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 11 Apr 2023 15:50:53 -0700 Subject: [PATCH 35/47] XCodeHelper: fix null exception when trying to get the ID or name of the selected iOS simulator Ideally, it shouldn't return null, but if it does, fail gracefully --- src/lime/tools/XCodeHelper.hx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/lime/tools/XCodeHelper.hx b/src/lime/tools/XCodeHelper.hx index 5368f8499..11c0b236c 100644 --- a/src/lime/tools/XCodeHelper.hx +++ b/src/lime/tools/XCodeHelper.hx @@ -101,12 +101,22 @@ class XCodeHelper public static function getSimulatorID(project:HXProject):String { - return getSelectedSimulator(project).id; + var simulator = getSelectedSimulator(project); + if (simulator == null) + { + return null; + } + return simulator.id; } public static function getSimulatorName(project:HXProject):String { - return getSelectedSimulator(project).name; + var simulator = getSelectedSimulator(project); + if (simulator == null) + { + return null; + } + return simulator.name; } private static function getSimulators():String From 04b69a9cef0bfdc333cc8371a8efa507d0f33487 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 11 Apr 2023 15:51:56 -0700 Subject: [PATCH 36/47] AIRHelper: display a warning when no selected iOS simulator is found when building AIR for iOS app Ideally, we'd always get a simulator name, but better to fail gracefully --- src/lime/tools/AIRHelper.hx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lime/tools/AIRHelper.hx b/src/lime/tools/AIRHelper.hx index 4a0d66c57..76dc40c74 100644 --- a/src/lime/tools/AIRHelper.hx +++ b/src/lime/tools/AIRHelper.hx @@ -206,7 +206,15 @@ class AIRHelper if (targetPlatform == IOS && System.hostPlatform == MAC) { - Sys.putEnv("AIR_IOS_SIMULATOR_DEVICE", XCodeHelper.getSimulatorName(project)); + var simulatorName = XCodeHelper.getSimulatorName(project); + if (simulatorName == null) + { + Log.warn("Skipping AIR_IOS_SIMULATOR_DEVICE environment variable because default simulator not found"); + } + else + { + Sys.putEnv("AIR_IOS_SIMULATOR_DEVICE", simulatorName); + } } System.runCommand(workingDirectory, project.defines.get("AIR_SDK") + "/bin/adt", args); From 1ac0810895c9adb881109fab1447d10d2689242d Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 11 Apr 2023 16:02:14 -0700 Subject: [PATCH 37/47] XcodeHelper: search for default iPhone simulator device id with a regular expression instead of a specific string Previously, the value was "iphone-11". Now the regex is ~/iphone-\d+/g As long as the naming scheme stays the same, this should choose the newest iPhone supported by Xcode, and we won't need to update manually anymore, like in commit 72dd60f1c851afac9f9166b963bc76e2ece15097 --- src/lime/tools/XCodeHelper.hx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/lime/tools/XCodeHelper.hx b/src/lime/tools/XCodeHelper.hx index 11c0b236c..1565d516a 100644 --- a/src/lime/tools/XCodeHelper.hx +++ b/src/lime/tools/XCodeHelper.hx @@ -6,7 +6,7 @@ import lime.tools.HXProject; class XCodeHelper { private static inline var DEFAULT_IPAD_SIMULATOR = "ipad-air"; - private static inline var DEFAULT_IPHONE_SIMULATOR = "iphone-11"; + private static var DEFAULT_IPHONE_SIMULATOR_REGEX = ~/iphone-\d+/g; private static function extractSimulatorFlagName(line:String):String { @@ -92,7 +92,14 @@ class XCodeHelper } else { - currentDevice = devices.get(DEFAULT_IPHONE_SIMULATOR); + for (device in devices.keys()) + { + if (DEFAULT_IPHONE_SIMULATOR_REGEX.match(device)) + { + currentDevice = devices.get(device); + break; + } + } } } From f8ec10b969d82946664a8fe6b719a8b776b574a7 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Thu, 13 Apr 2023 15:42:05 -0700 Subject: [PATCH 38/47] AIRHelper: allow listen=port in to use USB debugging instead of wifi debugging for Adobe AIR apps on Android or iOS --- src/lime/tools/AIRHelper.hx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lime/tools/AIRHelper.hx b/src/lime/tools/AIRHelper.hx index 76dc40c74..039ea0de6 100644 --- a/src/lime/tools/AIRHelper.hx +++ b/src/lime/tools/AIRHelper.hx @@ -149,12 +149,20 @@ class AIRHelper if (project.debug) { - args.push("-connect"); - if (project.config.exists("air.connect")) { + args.push("-connect"); args.push(project.config.getString("air.connect")); } + else if (project.config.exists("air.listen")) + { + args.push("-listen"); + args.push(project.config.getString("air.listen")); + } + else + { + args.push("-connect"); + } } args = args.concat(signingOptions); From f1dec33ef0f6639736d510765547eda6e8b94d29 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Sun, 16 Apr 2023 13:21:51 -0400 Subject: [PATCH 39/47] Use `performance.now()` for HTML5 timing. This way, changing the computer clock can't mess up animations. (Unless we're using the fallback, in which case everything will act as before.) --- src/lime/_internal/backend/html5/HTML5Application.hx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lime/_internal/backend/html5/HTML5Application.hx b/src/lime/_internal/backend/html5/HTML5Application.hx index 78a4c3bfb..3b137e92b 100644 --- a/src/lime/_internal/backend/html5/HTML5Application.hx +++ b/src/lime/_internal/backend/html5/HTML5Application.hx @@ -325,7 +325,7 @@ class HTML5Application if (!window.requestAnimationFrame) window.requestAnimationFrame = function(callback, element) { - var currTime = new Date().getTime(); + var currTime = window.performance.now(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); @@ -341,7 +341,7 @@ class HTML5Application window.requestAnimFrame = window.requestAnimationFrame; "); - lastUpdate = Date.now().getTime(); + lastUpdate = Browser.window.performance.now(); handleApplicationEvent(); @@ -361,7 +361,7 @@ class HTML5Application updateGameDevices(); - currentUpdate = Date.now().getTime(); + currentUpdate = Browser.window.performance.now(); if (currentUpdate >= nextUpdate) { From fb5d64dc79f076a1d9e325c2e42130c87fe0ab50 Mon Sep 17 00:00:00 2001 From: andresa88 Date: Mon, 17 Apr 2023 10:06:24 -0700 Subject: [PATCH 40/47] Fixed an HTML Image issue when using the genes library to compile ES modules. Need to explicitly use: new window.Image() --- src/lime/_internal/backend/html5/HTML5HTTPRequest.hx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx b/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx index cbbe9bbf2..94c3f2b59 100644 --- a/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx +++ b/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx @@ -444,7 +444,11 @@ class HTML5HTTPRequest private static function __loadImage(uri:String, promise:Promise, options:Int):Void { + #if (openfljs || genes) + var image:JSImage = untyped #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); + #else var image = new JSImage(); + #end if (!__isSameOrigin(uri)) { From e14d3e24d65a38ba073a4413a934371908c46381 Mon Sep 17 00:00:00 2001 From: player-03 Date: Mon, 17 Apr 2023 14:19:15 -0400 Subject: [PATCH 41/47] Always call `new window.Image()`, for consistency. There's no practical downside to doing this, and it makes Lime compatible with tools that act like genes but aren't named "genes." --- src/lime/_internal/backend/html5/HTML5HTTPRequest.hx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx b/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx index 94c3f2b59..d2cb080bc 100644 --- a/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx +++ b/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx @@ -444,11 +444,7 @@ class HTML5HTTPRequest private static function __loadImage(uri:String, promise:Promise, options:Int):Void { - #if (openfljs || genes) - var image:JSImage = untyped #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); - #else - var image = new JSImage(); - #end + var image:JSImage = #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); if (!__isSameOrigin(uri)) { From 0535ae026652e6e8216aea583fd119902559d009 Mon Sep 17 00:00:00 2001 From: player-03 Date: Mon, 17 Apr 2023 14:21:44 -0400 Subject: [PATCH 42/47] Always call `new window.Image()`, for consistency. --- src/lime/graphics/Image.hx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/lime/graphics/Image.hx b/src/lime/graphics/Image.hx index 8712788e8..ed93ba544 100644 --- a/src/lime/graphics/Image.hx +++ b/src/lime/graphics/Image.hx @@ -1438,11 +1438,7 @@ class Image @:noCompletion private function __fromBase64(base64:String, type:String, onload:Image->Void = null):Void { #if (js && html5) - #if (openfljs || genes) var image:JSImage = untyped #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); - #else - var image = new JSImage(); - #end var image_onLoaded = function(event) { @@ -1574,11 +1570,7 @@ class Image catch (e:Dynamic) {} }); #elseif (js && html5) - #if (openfljs || genes) var image:JSImage = untyped #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); - #else - var image = new JSImage(); - #end #if !display if (!HTML5HTTPRequest.__isSameOrigin(path)) From 9f9604e0c89a90941e31c3710864f8f8ba71e0f6 Mon Sep 17 00:00:00 2001 From: player-03 Date: Mon, 17 Apr 2023 14:23:29 -0400 Subject: [PATCH 43/47] Restore `untyped` keyword. I meant to move this to right before `__js__` because it's only needed in Haxe 3, but forgot. Also, I realized Lime always puts it before the `#if`, so I just put it back where it was. --- src/lime/_internal/backend/html5/HTML5HTTPRequest.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx b/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx index d2cb080bc..a45d34c0d 100644 --- a/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx +++ b/src/lime/_internal/backend/html5/HTML5HTTPRequest.hx @@ -444,7 +444,7 @@ class HTML5HTTPRequest private static function __loadImage(uri:String, promise:Promise, options:Int):Void { - var image:JSImage = #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); + var image:JSImage = untyped #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); if (!__isSameOrigin(uri)) { From 7d4d20df9ecd5951e882fc817d01485ea04279e5 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 17 Apr 2023 14:30:00 -0700 Subject: [PATCH 44/47] actions: build html5 samples with genes to ensure that it doesn't break --- .github/workflows/main.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f871238e6..c23511704 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -639,6 +639,7 @@ jobs: - name: Install Haxe dependencies run: | + haxelib install genes --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - uses: actions/download-artifact@v3 @@ -663,6 +664,12 @@ jobs: lime build SimpleImage html5 -release -verbose -nocolor lime build SimpleAudio html5 -release -verbose -nocolor + - name: Build Lime samples with Genes + run: | + lime build HelloWorld html5 -clean -release -verbose -nocolor --haxelib=genes + lime build SimpleImage html5 -clean -release -verbose -nocolor --haxelib=genes + lime build SimpleAudio html5 -clean -release -verbose -nocolor --haxelib=genes + ios-samples: needs: package-haxelib runs-on: macos-11 From ef5edc0dfb81f837ecd8bb5d85524542650d6222 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 17 Apr 2023 14:58:37 -0700 Subject: [PATCH 45/47] actions: temporarily require hxcpp 4.2.1 until HaxeFoundation/hxcpp#1042 is released --- .github/workflows/main.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c23511704..dd1c36553 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -101,7 +101,7 @@ jobs: rm /usr/local/bin/python3* brew bundle popd - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -153,7 +153,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -232,7 +232,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -290,7 +290,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -340,7 +340,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -478,7 +478,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet @@ -587,7 +587,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet @@ -685,7 +685,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet @@ -736,7 +736,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet @@ -782,7 +782,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet @@ -843,7 +843,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet @@ -895,7 +895,7 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp --quiet + haxelib install hxcpp 4.2.1 --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet From 7c9a1894f6278ba29007715168494d03eefb1e3a Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Fri, 21 Apr 2023 19:11:38 +0100 Subject: [PATCH 46/47] Take const char pointers in lime::Font methods --- project/include/text/Font.h | 4 ++-- project/src/text/Font.cpp | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/project/include/text/Font.h b/project/include/text/Font.h index 6523207db..bcf3d4a8e 100644 --- a/project/include/text/Font.h +++ b/project/include/text/Font.h @@ -49,8 +49,8 @@ namespace lime { int GetAscender (); int GetDescender (); wchar_t *GetFamilyName (); - int GetGlyphIndex (char* character); - void* GetGlyphIndices (bool useCFFIValue, char* characters); + int GetGlyphIndex (const char* character); + void* GetGlyphIndices (bool useCFFIValue, const char* characters); void* GetGlyphMetrics (bool useCFFIValue, int index); int GetHeight (); int GetNumGlyphs (); diff --git a/project/src/text/Font.cpp b/project/src/text/Font.cpp index 8ab0bdd0b..61328850c 100644 --- a/project/src/text/Font.cpp +++ b/project/src/text/Font.cpp @@ -25,7 +25,7 @@ #define IS_IN_RANGE(c, f, l) (((c) >= (f)) && ((c) <= (l))) -unsigned long readNextChar (char*& p) +unsigned long readNextChar (const char*& p) { // TODO: since UTF-8 is a variable-length // encoding, you should pass in the input @@ -33,7 +33,8 @@ unsigned long readNextChar (char*& p) // can determine if a malformed UTF-8 // sequence would exceed the end of the buffer... - unsigned char c1, c2, *ptr = (unsigned char*) p; + const unsigned char* ptr = (const unsigned char*) p; + unsigned char c1, c2; unsigned long uc = 0; int seqlen; @@ -792,7 +793,7 @@ namespace lime { } - int Font::GetGlyphIndex (char* character) { + int Font::GetGlyphIndex (const char* character) { long charCode = readNextChar (character); @@ -801,7 +802,7 @@ namespace lime { } - void* Font::GetGlyphIndices (bool useCFFIValue, char* characters) { + void* Font::GetGlyphIndices (bool useCFFIValue, const char* characters) { if (useCFFIValue) { From 1a71249c095576ea14c0218b43eff47e3d9f3c2c Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 24 Apr 2023 11:51:58 -0700 Subject: [PATCH 47/47] actions: needs JDK 11 for android-samples Uses JDK 11 for android-ndll too, for consistency --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dd1c36553..d87f6d3ae 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -220,7 +220,7 @@ jobs: - uses: actions/setup-java@v3 with: distribution: "zulu" - java-version: 8 + java-version: 11 - uses: krdlab/setup-haxe@v1 with: @@ -466,7 +466,7 @@ jobs: - uses: actions/setup-java@v3 with: distribution: "zulu" - java-version: 8 + java-version: 11 - uses: krdlab/setup-haxe@v1 with: