Создать GStreamer XUL элемент? - PullRequest
2 голосов
/ 05 января 2010

Я бы хотел создать пользовательский элемент 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 .Если вам интересно, вы можете посмотреть этот код .

Ответы [ 2 ]

3 голосов
/ 06 января 2010

Вы не можете реализовать новый элемент XUL, используя XPCOM. Ваши варианты:

  • Используйте существующий элемент, такой как HTML5 или . Вот демо из двух, играющих вместе. С улучшенной скоростью двигателя JS он может быть достаточно быстрым для ваших нужд.
  • реализовать новый элемент с использованием XBL (его содержимое может быть только комбинацией других элементов, плюс пользовательские API и стиль)
  • реализовать плагин NPAPI и внедрить его через . Это позволяет вам обрабатывать рисование и события в вашем C-коде. Примеры таких плагинов включают Flash и компонент редактирования (scintilla) в Komodo Edit и IDE.
0 голосов
/ 22 января 2010

Думаю, это самый простой способ - создать новый контекст Canvas в XPCom (C ++) («веб-камера») и через API Thebes внедрить фрейм в этом контексте. И чтобы было что-то более «красивое», я бы предложил все встроить в XBL.

...