From 92367968e7f1416f33eebfa06c60cacf5c757f65 Mon Sep 17 00:00:00 2001 From: "L. Krause" Date: Thu, 25 May 2017 20:57:13 +0200 Subject: [PATCH 1/2] Use custom native-run icons for Android and HTML5 --- editor/editor_export.h | 1 + editor/editor_run_native.cpp | 2 +- methods.py | 31 ++++++++++++++------------ platform/android/export/export.cpp | 12 +++++++++- platform/android/run_icon.png | Bin 0 -> 636 bytes platform/javascript/export/export.cpp | 12 ++++++++++ platform/javascript/run_icon.png | Bin 0 -> 471 bytes 7 files changed, 42 insertions(+), 16 deletions(-) create mode 100644 platform/android/run_icon.png create mode 100644 platform/javascript/run_icon.png diff --git a/editor/editor_export.h b/editor/editor_export.h index 740f05174b..64381fbb35 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -197,6 +197,7 @@ public: }; virtual Error run(const Ref &p_preset, int p_device, int p_debug_flags) { return OK; } + virtual Ref get_run_icon() const { return get_logo(); } virtual bool can_export(const Ref &p_preset, String &r_error, bool &r_missing_templates) const = 0; diff --git a/editor/editor_run_native.cpp b/editor/editor_run_native.cpp index 4a767621ef..52b7e6992d 100644 --- a/editor/editor_run_native.cpp +++ b/editor/editor_run_native.cpp @@ -41,7 +41,7 @@ void EditorRunNative::_notification(int p_what) { Ref eep = EditorExport::get_singleton()->get_export_platform(i); if (eep.is_null()) continue; - Ref icon = eep->get_logo(); + Ref icon = eep->get_run_icon(); if (!icon.is_null()) { Ref im = icon->get_data(); im = im->duplicate(); diff --git a/methods.py b/methods.py index 2f9d45897e..4d3d5ae343 100644 --- a/methods.py +++ b/methods.py @@ -1513,23 +1513,26 @@ def split_lib(self, libname): def save_active_platforms(apnames, ap): for x in ap: - pth = x + "/logo.png" -# print("open path: "+pth) - pngf = open(pth, "rb") - b = pngf.read(1) - str = " /* AUTOGENERATED FILE, DO NOT EDIT */ \n" - str += " static const unsigned char _" + x[9:] + "_logo[]={" - while(len(b) == 1): - str += hex(ord(b)) + names = ['logo'] + if os.path.isfile(x + "/run_icon.png"): + names.append('run_icon') + + for name in names: + pngf = open(x + "/" + name + ".png", "rb") b = pngf.read(1) - if (len(b) == 1): - str += "," + str = " /* AUTOGENERATED FILE, DO NOT EDIT */ \n" + str += " static const unsigned char _" + x[9:] + "_" + name + "[]={" + while(len(b) == 1): + str += hex(ord(b)) + b = pngf.read(1) + if (len(b) == 1): + str += "," - str += "};\n" + str += "};\n" - wf = x + "/logo.gen.h" - logow = open(wf, "wb") - logow.write(str) + wf = x + "/" + name + ".gen.h" + pngw = open(wf, "wb") + pngw.write(str) def no_verbose(sys, env): diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index d6ed234669..a72e8aa90e 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -37,6 +37,7 @@ #include "os/file_access.h" #include "os/os.h" #include "platform/android/logo.gen.h" +#include "platform/android/run_icon.gen.h" #include "version.h" #include #if 0 @@ -2042,6 +2043,7 @@ class EditorExportAndroid : public EditorExportPlatform { GDCLASS(EditorExportAndroid, EditorExportPlatform) Ref logo; + Ref run_icon; struct Device { @@ -3036,6 +3038,10 @@ public: return OK; } + virtual Ref get_run_icon() const { + return run_icon; + } + virtual bool can_export(const Ref &p_preset, String &r_error, bool &r_missing_templates) const { r_missing_templates = find_export_template("android_debug.apk") == String() || find_export_template("android_release.apk") == String(); @@ -3524,9 +3530,13 @@ public: EditorExportAndroid() { Ref img = memnew(Image(_android_logo)); - logo = Ref(memnew(ImageTexture)); + logo.instance(); logo->create_from_image(img); + img = Ref(memnew(Image(_android_run_icon))); + run_icon.instance(); + run_icon->create_from_image(img); + device_lock = Mutex::create(); device_thread = Thread::create(_device_poll_thread, this); devices_changed = true; diff --git a/platform/android/run_icon.png b/platform/android/run_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e53f8e9da5ac47b03b3c6390677e9c098bff937e GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zxP?HN@zUM8KMV{E>?NMQuIvxk#Dug(Rn{uSGB7YmmbgZg1m~xflqVLYG880c=9TE> zrIsj|=o#o4nz>}I|H{C?xXaVUF~q{ZHh8}`Q=){Ow#Iah9=7(b1@#M79-MaIplXI; zyK~DNZocU%E=Q)RaVi!W6$(sry5iV#B-Eg&V1;w8kj;^Y7E(?-=Y_xP`yHxpv*-Qy zd!KFIf4^IM{KTdlhC_lpY~~ZEi&!*>zM8p{d*4#VK%<#oe%I`~?4wpZ)obYv1|^}+ ziZgdu?_Wxo@iuMqPo=I!Ym$s+p4oKsjqSX((LdT)4_mzc`m1>PWkKz!ry@)}mS1Le z6nJ*x`U4$l6Dz~HuuTn#0Qsn z1io;_=57Bi@UGa}kkMMAaXa&c logo; + Ref run_icon; void _fix_html(Vector &p_html, const Ref &p_preset, const String &p_name, bool p_debug); void _fix_fsloader_js(Vector &p_js, const String &p_pack_name, uint64_t p_pack_size); @@ -68,6 +70,7 @@ public: virtual String get_device_name(int p_device) const { return TTR("Run in Browser"); } virtual String get_device_info(int p_device) const { return TTR("Run exported HTML in the system's default browser."); } virtual Error run(const Ref &p_preset, int p_device, int p_debug_flags); + virtual Ref get_run_icon() const; EditorExportPlatformJavaScript(); }; @@ -314,11 +317,20 @@ Error EditorExportPlatformJavaScript::run(const Ref &p_prese return OK; } +Ref EditorExportPlatformJavaScript::get_run_icon() const { + + return run_icon; +} + EditorExportPlatformJavaScript::EditorExportPlatformJavaScript() { Ref img = memnew(Image(_javascript_logo)); logo.instance(); logo->create_from_image(img); + + img = Ref(memnew(Image(_javascript_run_icon))); + run_icon.instance(); + run_icon->create_from_image(img); } void register_javascript_exporter() { diff --git a/platform/javascript/run_icon.png b/platform/javascript/run_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dedee6f479e2e7648d35af1c8cb235f248db98ff GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Sc;uILpV4%IBGajIv5xj zI14-?iy0Ug+Ci9cu8@rf0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}?A)YRdAr`$$FYouBS}1b-<8=ESksdQ0yPcYwF9=;((5LIxyw36eAzNqfVw0cz zbM{`16#QjqVqu~x@#=wIpsxAph2DwH_n&|ITC`rl?!$rae}37#FP`^VHgo&!b)R~i z)9xLArJ8N7^eADE#PKS=%y`xaNaug!eN z%t zx9)mc*I0Syn0$`dE;+}vbq_AOGF>>vCAVPeOzR(#g8rv@{IVM_dM%KA620fZ#LbM` zKCC{n%rNXJpGwBR-`?rm#U1{kYfO6<6zWYCbK58?_*&xhndeLYzdoFHA>r(UP)qsL zXX1Bszj<1Ik6OX`ZNu9?V&@*n?@MCp{;}}ZxrzT?&zWidQNn*i%$@fi`Q()!?Kt Date: Tue, 27 Jun 2017 03:13:36 +0200 Subject: [PATCH 2/2] Hide HTML5 native-run icon without runnable preset --- platform/javascript/export/export.cpp | 29 ++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/platform/javascript/export/export.cpp b/platform/javascript/export/export.cpp index a8e87e8b44..4bdfdae39e 100644 --- a/platform/javascript/export/export.cpp +++ b/platform/javascript/export/export.cpp @@ -44,6 +44,7 @@ class EditorExportPlatformJavaScript : public EditorExportPlatform { Ref logo; Ref run_icon; + bool runnable_when_last_polled; void _fix_html(Vector &p_html, const Ref &p_preset, const String &p_name, bool p_debug); void _fix_fsloader_js(Vector &p_js, const String &p_pack_name, uint64_t p_pack_size); @@ -66,7 +67,8 @@ public: virtual String get_binary_extension() const; virtual Error export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0); - virtual int get_device_count() const { return 1; } + virtual bool poll_devices(); + virtual int get_device_count() const; virtual String get_device_name(int p_device) const { return TTR("Run in Browser"); } virtual String get_device_info(int p_device) const { return TTR("Run exported HTML in the system's default browser."); } virtual Error run(const Ref &p_preset, int p_device, int p_debug_flags); @@ -306,6 +308,29 @@ Error EditorExportPlatformJavaScript::export_project(const Ref preset; + + for (int i = 0; i < EditorExport::get_singleton()->get_export_preset_count(); i++) { + + Ref ep = EditorExport::get_singleton()->get_export_preset(i); + if (ep->is_runnable() && ep->get_platform() == this) { + preset = ep; + break; + } + } + + bool prev = runnable_when_last_polled; + runnable_when_last_polled = preset.is_valid(); + return runnable_when_last_polled != prev; +} + +int EditorExportPlatformJavaScript::get_device_count() const { + + return runnable_when_last_polled; +} + Error EditorExportPlatformJavaScript::run(const Ref &p_preset, int p_device, int p_debug_flags) { String path = EditorSettings::get_singleton()->get_settings_path() + "/tmp/tmp_export.html"; @@ -331,6 +356,8 @@ EditorExportPlatformJavaScript::EditorExportPlatformJavaScript() { img = Ref(memnew(Image(_javascript_run_icon))); run_icon.instance(); run_icon->create_from_image(img); + + runnable_when_last_polled = false; } void register_javascript_exporter() {