Геометрия стоек X11

Может ли кто-нибудь объяснить (или дать ссылку на объяснение), как устроены стойки X11? Из единственного описания, которое мне удалось найти здесь мне непонятно, что двенадцать значений в свойстве _NET_WM_STRUT_PARTIAL представляют. Например, в приведенной ниже ситуации, когда два дисплея Xinerama выровнены по левому краю, как мне определить стойку (отмеченную xxx)? Я полагаю, что начало координат находится в верхнем левом углу.

+-------------------+
|                   |
|                   |
|                   |
|                   |
+-------+---+-------+
|       |xxx|
|       +---+
|           |
|           |
+-----------+

person John Newman    schedule 27.01.2014    source источник


Ответы (1)


На этой странице объясняется _NET_WM_STRUT_PARTIAL:

_NET_WM_STRUT_PARTIAL, left, right, top, bottom, left_start_y, left_end_y,
right_start_y, right_end_y, top_start_x, top_end_x, bottom_start_x,
bottom_end_x,CARDINAL[12]/32

[...] Например, для клиента в виде панели, появляющегося внизу экрана, высотой 50 пикселей и занимающего пространство от 200 до 600 пикселей слева от края экрана, будет установлена ​​​​нижняя стойка 50, и задайте для bottom_start_x значение 200, а для bottom_end_x значение 600. Другим примером является панель на экране с использованием расширения Xinerama. Предположим, что в настройке используются два монитора, один из которых работает с разрешением 1280 x 1024, а другой — справа. в разрешении 1024x768, с выровненными верхними краями двух физических дисплеев. Если панель хочет заполнить весь нижний край меньшего дисплея панелью высотой 50 пикселей, она должна установить нижний распор равным 306, с bottom_start_x равным 1280, а нижний_конец_x равен 2303. Обратите внимание, что распорка задается относительно края экрана. , а не край монитора ксинерамы.

(мое смелое лицо).

Теперь, как это работает? Думайте об этом как о функции, которая запускается значением, отличным от 0, в первых 4 целых числах. Поэтому, если вы хотите зарезервировать место внизу, вы устанавливаете left, right, top на 0, а bottom на 50.

Затем пары *_start_x и *_end_x определяют размер зарезервированной области вдоль края экрана.

В вашем примере вы хотите зарезервировать место в правой части экрана. Если ваша основная область составляет 2000 пикселей, а меньший экран имеет ширину 1200 пикселей, а область должна быть 150 пикселей, то вам нужно bottom = 2000 - 1200 + 150 = 950 (виртуальный экран в этой настройке везде имеет ширину 2000 пикселей, поэтому вам нужно сместить значение с разницей ширины двух реальных мониторов).

right_start_y == высота верхнего монитора.

right_end_y == right_start_y + высота области, которую вы хотите зарезервировать.

person Aaron Digulla    schedule 27.01.2014
comment
это именно та часть, которую я не понял. Если я предполагаю, что система координат начинается в верхнем левом углу, то нижнее число не суммируется. И как мне установить другие значения (слева, справа, сверху и т.д.)? - person John Newman; 27.01.2014
comment
Я добавил пример, используя вашу настройку. - person Aaron Digulla; 27.01.2014
comment
хорошо, спасибо, становится понятнее. В чем разница между нижним и верхним значением? Когда я должен установить для верхнего значения ненулевое значение? - person John Newman; 27.01.2014
comment
Если вы хотите строку меню в стиле Apple: top=14, top_start_x=0, top_end_x = ширина экрана, все остальное равно 0. - person Aaron Digulla; 27.01.2014
comment
но это можно сделать, установив значение bottom=non-zero и right_start_y=0, не так ли? - person John Newman; 27.01.2014
comment
bottom использует два атрибута bottom_* и ничего больше. right_start_y с right=0 не будет иметь никакого эффекта. - person Aaron Digulla; 27.01.2014