Как определить видимую область Windows в X Windows / Linux? - PullRequest
0 голосов
/ 16 сентября 2008

У меня есть несколько вложенных X Windows - скажем, прокручиваемых окон внутри прокручиваемых окон (см. Пример ниже). В таком случае главное окно содержит (как минимум) основные полосы прокрутки и (основную) область рисования, которой они управляют. Эта область рисования в свою очередь содержит (по крайней мере) пакет прокручиваемого окна - (вспомогательное) главное окно, содержащее полосу прокрутки и вспомогательную область рисования.

Во время прокрутки в реальном времени внутренней области рисования процедура перерисовки не работает, потому что я использую XCopyArea, чтобы ускорить процесс и переместить допустимое содержимое, а также вызвать актуальную процедуру перерисовки только для недавно появившегося содержимого. Это прекрасно работает, когда внутренний пакет чертежа сам по себе, но при вложении в другой пакет возникает проблема - когда внутренний пакет прокрутки частично виден (т. Е. Прокручивается основная область рисования), перерисовка вновь появившегося содержимого отсекается от основного область рисования и никогда фактически не перерисовывается, но считается таковой. Когда при следующей прокрутке XCopyArea получает эту область, предположительно перерисованную, она фактически пуста. Наконец, эта пустая область отображается на частично видимой внутренней партии прокрутки, и она пуста. На первом общем перерисованном сообщении они исправлены.

Если я могу получить обтравочную маску для того, что на самом деле видно из (моей) внутренней области рисования, я могу настроить вызов XCopyArea () и перерисовать вызов и преодолеть проблему без плана "B", который перерисовывает все содержимое на каждом движение полосы прокрутки.

Пример: разработка плагина для Mozilla Firefox и необходимость определения региона, описывающего видимую область окна «my», то есть того, который передается из системы Mozilla в качестве окна просмотра плагина.

1 Ответ

1 голос
/ 16 сентября 2008

Если это действительно окно X Window, а не виджет из какого-то определенного набора инструментов (например, GTK +, может быть,?), Тогда вы можете использовать вызов функции XGetWindowAttributes.

Это заполняет предоставленную структуру XWindowAttributes, которая включает целые числа для x и y позиции окна, а также его ширину и высоту и другие полезные факты.

Но на самом деле я думаю, что вы, вероятно, используете API плагинов Mozilla, унаследованный от Netscape, он же NSAPI, и в этом случае вы получаете вызов вашей функции NPP_SetWindow () хотя бы один раз (и еще раз, если необходимо, потому что что-то изменилось) ) со структурой, которая содержит информацию, которую вы ищете. Попробуйте поискать http://www.mozilla.org/projects/plugins/ для получения дополнительной информации об API, которые вы должны использовать.

...