управление z-порядком в libchamplain - PullRequest
0 голосов
/ 22 мая 2018

Я подозреваю, что решение находится в пределах libchamplain , но я спрашиваю и здесь, на случай, если кто-то знает выход.

В небольшой программе Python-Gtk3 яиспользуя libchamplain, чтобы выбрать местоположение и указать размер.

Для этого я предлагаю пользователю круг, которым он может управлять с помощью двух маркеров, по центру и по центру.

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

Проблема заключается в этом третьем варианте, потому что, как кажется, libchamplain настаивает на том, чтобы вытянуть объект вперед в порядке z, поэтому я не могу достичьцентральная точка больше.

Я открыл там проблему , предоставив исходный код моей программы на Python .Мое решение, очень грязное, состоит в том, чтобы убрать маркеры и создать их снова, каждый раз, когда круг перемещается.Новые маркеры появляются перед кружком, и это то, что я хочу, но это не то, что я хочу.

Интересно, есть ли у кого-нибудь более точное решение в текущей версии libchamplain.

1 Ответ

0 голосов
/ 23 мая 2018

Очевидно, что libchamplain 0.12 не учитывает свойство z-position: z-порядок маркеров в слое определяется порядком их появления в дочернем списке слоя.Изначально это тот же порядок, в котором маркеры были добавлены в слой.

Настоящая путаница (с моей точки зрения) начинается, когда вы нажимаете на объект, потому что в этот момент libchamplain перемещает этот объект вконец дочернего элемента его контейнера, то есть на вершине z-порядка.

Иржи Течет, куратор библиотеки, предлагает создать свой собственный маркер как лучшее решение, и если я настаиваю на неправильном использовании APIтаким образом, сделать это так:

self.layer.set_child_below_sibling(self.marker_circle)
...