Как определить видимую область Windows в X Windows / Linux?

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

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

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

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

Да, это окно, переданное из вызова NSAPI, но используется в отдельном (дочернем) процессе, в котором плагин действительно работает. XGetWindowAttributes дает информацию, но не о том, закрыто ли окно или, что наиболее важно, прокручено и частично видно, что мне и нужно.

theJonan 17.09.2008 01:37

Это X Window System или просто X, а не «X Windows».

postfuturist 10.10.2008 07:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
899
1

Ответы 1

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

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

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

Другие вопросы по теме