Implement clipboard support for WASM backend

The Emscripten backend was missing Platform_SetClipboardTextFn/GetClipboardTextFn,
so ImGui::SetClipboardText was a no-op in the browser.
Hook navigator.clipboard.writeText for writes and keep a local copy for reads.
This commit is contained in:
DaniPopes
2026-02-07 03:35:09 +01:00
parent c93c9bce6f
commit a23e910d5f

View File

@@ -24,6 +24,24 @@ static float s_prevScale = -1;
static int s_width, s_height;
static uint64_t s_time;
static const char* s_prevCursor = nullptr;
static std::string s_clipboard;
static void SetClipboard( ImGuiContext*, const char* text )
{
s_clipboard = text;
EM_ASM( {
var text = UTF8ToString($0);
if( navigator.clipboard && navigator.clipboard.writeText )
{
navigator.clipboard.writeText( text );
}
}, text );
}
static const char* GetClipboard( ImGuiContext* )
{
return s_clipboard.c_str();
}
static ImGuiKey TranslateKeyCode( const char* code )
{
@@ -183,6 +201,10 @@ Backend::Backend( const char* title, const std::function<void()>& redraw, const
ImGuiIO& io = ImGui::GetIO();
io.BackendPlatformName = "wasm (tracy profiler)";
auto& platform = ImGui::GetPlatformIO();
platform.Platform_SetClipboardTextFn = SetClipboard;
platform.Platform_GetClipboardTextFn = GetClipboard;
emscripten_set_mousedown_callback( "#canvas", nullptr, EM_TRUE, []( int, const EmscriptenMouseEvent* e, void* ) -> EM_BOOL {
ImGui::GetIO().AddMouseButtonEvent( e->button == 0 ? 0 : 3 - e->button, true );
tracy::s_wasActive = true;