2016-03-09 5 views
1

В частности, я хочу отображать текст и изображения на мониторе, поверх всех других окон, но без возможности клика или взаимодействовать с ним - клики на нем должны проходить прямо в любое окно под ним.Как написать прямо на экран?

До сих пор мое исследование привело к тому, что я попытался прочитать документацию X относительно составного окна оверлея, но, к сожалению, я не смог никуда с ним добраться. Единственный ресурс, который я нашел, который был с какой-либо помощью, - небольшая библиотека nodejs (node-x11), которая, к сожалению, кажется, была оставлена, пока еще неполна, и которую я не смог получить. По-видимому, есть также библиотека python, но это оказалось еще менее полным, чем nodejs on.

ответ

0

node-x11 автор здесь (и это не отказались, я просто только добавить необходимые мне функции или запроса пользователей, так что если вы что-то отсутствует, пожалуйста, заполните вопрос!)

Вы можете использовать GetOverlayWindow из composite extension:

Версия 0.3 протокола добавляет окно композитного перекрытия, которое предоставляет менеджерам компоновки с поверхностью, на которой можно рисовать без помех . Это окно всегда находится над нормальными окнами и всегда находится под окном экранной заставки . Это окно InputOutput, ширина которого составляет , а высота - размеры экрана. Его визуальным является корневой визуал , а его ширина границы равна нулю. Попытки перенаправить его с использованием составного расширения игнорируются. Это окно не отображается в ответе запроса QueryTree . Это также окно переопределения переопределения. Эти последние две функции делают его невидимым для оконных менеджеров и других клиентов X11 . Единственный способ получить доступ к XID этого окна - через запрос CompositeGetOverlayWindow. Первоначально окно Composite Overlay не отображается.

CompositeGetOverlayWindow возвращает XID составного наложения Окно. Если окно еще не было отображено, оно отображается этим запросом . Когда все клиенты, которые вызвали этот запрос, завершили свои соединения X11, окно не будет отображено.

Композитные менеджеры могут отображать непосредственно на композитном перекрытии Окно, или они могут видеть другие окна, чтобы быть дочерними элементами этого окна и визуализировать их. Множественные клиенты могут отображать в Овальное окно Composite Overlay Window, создавать дочерние окна, изменять его и переопределять область ввода, но определенные правила арбитража, следующие этим этими клиентами, не определены этой спецификацией; эти политики должны определяться самими клиентами.

узел-x11 пример:

var x11 = require('x11'); 
x11.createClient(function(err, display) { 
    var X = display.client; 
    var root = display.screen[0].root; 
    X.require('composite', function(err, Composite) { 
    Composite.GetOverlayWindow(root, function(err, overlayId) { 
     // now you can draw on overlayId window here. 
    }); 
    }); 
}); 
+0

Да, я видел. Я смог заставить его создать новое окно (с X.CreateWindow), а затем нарисовать его, но я никогда не мог заставить его рисовать оверлейное окно, и после нескольких дней работы я разочаровался - Я думаю, что я просто не понимаю nodejs достаточно хорошо, чтобы понять, как это работает, и он находится на той неудобной высоте, где он слишком далек от C для X-документов, чтобы помочь, но все же слишком низкий уровень, чтобы догадаться. – Benubird