Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Taudul <wolf@nereid.pl>2022-10-06 18:42:57 +0300
committerBartosz Taudul <wolf@nereid.pl>2022-10-06 19:12:51 +0300
commit9f60b537295fa5f53389a548415c11061cf28e8c (patch)
treea48565160633e1918203f81d125887eae8165408 /server/TracyFileselector.cpp
parentb369c784a6cc66145542a7ff51d0b25127beee57 (diff)
Enable file selector on emscripten.
Diffstat (limited to 'server/TracyFileselector.cpp')
-rw-r--r--server/TracyFileselector.cpp44
1 files changed, 40 insertions, 4 deletions
diff --git a/server/TracyFileselector.cpp b/server/TracyFileselector.cpp
index cc89a8e1..96086390 100644
--- a/server/TracyFileselector.cpp
+++ b/server/TracyFileselector.cpp
@@ -1,7 +1,11 @@
#include "TracyFileselector.hpp"
#ifndef TRACY_NO_FILESELECTOR
-# include "../nfd/nfd.h"
+# ifdef __EMSCRIPTEN__
+# include <emscripten.h>
+# else
+# include "../nfd/nfd.h"
+# endif
#endif
namespace tracy::Fileselector
@@ -9,21 +13,52 @@ namespace tracy::Fileselector
void Init()
{
-#ifndef TRACY_NO_FILESELECTOR
+#if !defined TRACY_NO_FILESELECTOR && !defined __EMSCRIPTEN__
NFD_Init();
#endif
}
void Shutdown()
{
-#ifndef TRACY_NO_FILESELECTOR
+#if !defined TRACY_NO_FILESELECTOR && !defined __EMSCRIPTEN__
NFD_Quit();
#endif
}
+#ifdef __EMSCRIPTEN__
+static std::function<void(const char*)> s_openFileCallback;
+
+extern "C" int nativeOpenFile()
+{
+ s_openFileCallback( "upload.tracy" );
+ return 0;
+}
+#endif
+
void OpenFile( const char* ext, const char* desc, std::function<void(const char*)> callback )
{
#ifndef TRACY_NO_FILESELECTOR
+# ifdef __EMSCRIPTEN__
+ s_openFileCallback = callback;
+ EM_ASM( {
+ var input = document.createElement( 'input' );
+ input.type = 'file';
+ input.accept = UTF8ToString( $0 );
+ input.onchange = (e) => {
+ var file = e.target.files[0];
+ var reader = new FileReader();
+ reader.readAsArrayBuffer( file );
+ reader.onload = () => {
+ var buf = reader.result;
+ var view = new Uint8Array( buf );
+ FS.createDataFile( '/', 'upload.tracy', view, true, true );
+ Module.ccall( 'nativeOpenFile', 'number', [], [] );
+ FS.unlink( '/upload.tracy' );
+ };
+ };
+ input.click();
+ }, ext );
+# else
nfdu8filteritem_t filter = { desc, ext };
nfdu8char_t* fn;
if( NFD_OpenDialogU8( &fn, &filter, 1, nullptr ) == NFD_OKAY )
@@ -31,12 +66,13 @@ void OpenFile( const char* ext, const char* desc, std::function<void(const char*
callback( (const char*)fn );
NFD_FreePathU8( fn );
}
+# endif
#endif
}
void SaveFile( const char* ext, const char* desc, std::function<void(const char*)> callback )
{
-#ifndef TRACY_NO_FILESELECTOR
+#if !defined TRACY_NO_FILESELECTOR && !defined __EMSCRIPTEN__
nfdu8filteritem_t filter = { desc, ext };
nfdu8char_t* fn;
if( NFD_SaveDialogU8( &fn, &filter, 1, nullptr, nullptr ) == NFD_OKAY )