gpt4 book ai didi

c++ - 创建 GStreamer XUL 元素?

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:27 26 4
gpt4 key购买 nike

我想为基于 XULRunner 的视频编辑应用程序创建一个名为“video”的自定义 XUL 元素。在 XPCOM 文档中解释了如何从 Javascript 访问您的组件,但我似乎找不到任何关于如何声明新 XUL 元素的文档。我在哪里可以找到这个?谁能指出我正确的方向?

澄清
我希望能够将 GStreamer 管道连接到 XUL 小部件。这需要从我的应用程序的 C++ 部分完成。本质上它归结为调用:

gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(mOverlay), (gulong)windowId);

所以我需要实现的是一种从 XUL 小部件访问 windowId(Windows 上的 HWND)的方法。这样的最低要求(访问 XUL 组件的窗口 ID)真的需要我创建 NPAPI 插件吗?创建一个 NPAPI 插件似乎有些令人生畏(但由于 this project 可能是可行的)。我想避免矫枉过正,所以如果 XPCOM 组件就足够了,那就太好了。

已解决!
我在 XPCOM 插件中找到了一种方法。我发现可以获取顶级 XUL 窗口的本地句柄。这需要一些技巧,因为您需要包含一些私有(private) XUL header 才能破解打开的 de XUL 元素并获取窗口句柄。但是一旦有了它,您就可以创建一个子窗口。

下一个挑战是让子窗口服从 XUL 的布局管理器。由于此窗口不作为 XUL 元素存在,因此它根本不会受到布局管理器的影响。解决方法是创建一个 XUL 元素,该元素将用作覆盖 native 窗口的占位符。对于这个元素,您需要为“调整大小”事件注册一个回调。在事件处理程序中,您可以使自定义窗口的大小和位置与 XUL 元素相同。

我使用 XBL 定义了一个名为“video”的元素类型。它包含一个 XUL 标签作为唯一的子元素。这个元素在我的 XPCOM 插件中用于上述布局。

这个解决方案非常有效。

感谢 Songbird 团队的 Michael Smith。他回答my question on the GStreamer mailing列表。有兴趣可以看看this code .

最佳答案

您不能使用 XPCOM 实现新的 XUL 元素。您的选择是:

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com