我正在尝试用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;
}