我正在尝试使用 Firebreath 开发一个插件。我可以参考示例并创建一个测试插件。现在我决定使用 LIBSDL 创建 UI 部分。
当我使用 SDL 创建一个窗口时,它会创建一个新窗口,即浏览器外部的窗口。
是否可以使用 LIBSDL 在插件区域内创建窗口?
我正在尝试使用 Firebreath 开发一个插件。我可以参考示例并创建一个测试插件。现在我决定使用 LIBSDL 创建 UI 部分。
当我使用 SDL 创建一个窗口时,它会创建一个新窗口,即浏览器外部的窗口。
是否可以使用 LIBSDL 在插件区域内创建窗口?
是的,在 sdl 1.2.15 中,您可以设置一个名为 SDL_WINDOWID 的环境变量,然后在 sdl 中使用其值。假设您使用的是 windows,在您的 firebreath 插件中,您可以执行以下操作:
bool YourPlugin::onWindowAttached(FB::AttachedEvent *evt, FB::PluginWindow *win)
{
// The window is attached; act appropriately
FB::PluginWindowWin *wnd = dynamic_cast<FB::PluginWindowWin*>(win);
set_sdl_window (wnd->getHWND());
// then run your code
// ...
}
在您的 SDL 客户端代码中的某处定义如下:
int set_sdl_window(HWND window)
{
char windowid[20] = {0};
char env[100] = {0};
if (window != NULL) {
SDL_ulltoa((Uint64)window, windowid, 10);
sprintf(env, "SDL_WINDOWID=%s", windowid);
SDL_putenv (env);
return 0;
}
return 1;
}