Я бы хотел создать пользовательский элемент XUL с именем 'video' для приложения для редактирования видео на основе XULRunner.В документации XPCOM объясняется, как получить доступ к вашему компоненту из Javascript, но я не могу найти никакой документации о том, как объявить новый элемент XUL.Где я могу найти это?Кто-нибудь может указать мне правильное направление?
Уточнение
Я хочу иметь возможность подключить конвейер GStreamer к виджету XUL.Это должно быть сделано из C ++ части моего приложения.По сути, это сводится к вызову:
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(mOverlay), (gulong)windowId);
Так что мне нужно добиться способа доступа к windowId (HWND в Windows) из виджета XUL.Действительно ли такое минимальное требование (доступ к идентификатору окна для компонента XUL) действительно требует от меня создания плагина NPAPI?Создание плагина NPAPI кажется несколько сложным (но, вероятно, выполнимым благодаря этому проекту ).Я бы хотел избежать излишеств, поэтому, если будет достаточно компонента XPCOM, это будет здорово.
Решено!
Я нашел способ сделать это в плагине XPCOM.Я обнаружил, что можно получить собственный дескриптор окна XUL верхнего уровня.Это требует некоторого взлома, потому что вам нужно включить некоторые из частных заголовков XUL, чтобы взломать элемент de XUL и получить дескриптор окна.Но когда у вас есть это, вы можете создать дочернее окно.
Следующая задача - заставить дочернее окно подчиняться диспетчеру компоновки XUL.Поскольку это окно не существует как элемент XUL, оно не будет затронуто менеджером макета.Обходной путь должен создать элемент XUL, который будет служить заполнителем для наложения собственного окна.Для этого элемента вам необходимо зарегистрировать обратный вызов для события «resize».В обработчике событий вы можете сделать размер и положение своего пользовательского окна таким же, как у элемента XUL.
Я использую XBL для определения типа элемента с именем «video».Он содержит метку XUL как единственный подэлемент.Этот элемент используется в моем плагине XPCOM, как и для макета, описанного выше.
Это решение работает очень хорошо.
Автор кредита Майкл Смит из команды Songbird.Он ответил на мой вопрос в списке рассылки GStreamer .Если вам интересно, вы можете посмотреть этот код .