Mercurial > libervia-desktop-kivy
comparison src/libs/garden/garden.contextmenu/context_menu.py @ 84:2caee196d19a
garden: context menu fixes:
- fixed size so menus are displayed correclty on different screen resolutions
- fixed position of ContextMenu on show
these fixes haven been proposed upstream
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 24 Dec 2016 14:20:40 +0100 |
parents | 741a7d6d8c28 |
children |
comparison
equal
deleted
inserted
replaced
83:741a7d6d8c28 | 84:2caee196d19a |
---|---|
3 from kivy.core.window import Window | 3 from kivy.core.window import Window |
4 from kivy.uix.behaviors import ButtonBehavior | 4 from kivy.uix.behaviors import ButtonBehavior |
5 from kivy.lang import Builder | 5 from kivy.lang import Builder |
6 from kivy.clock import Clock | 6 from kivy.clock import Clock |
7 from functools import partial | 7 from functools import partial |
8 import traceback | |
9 | 8 |
10 import kivy.properties as kp | 9 import kivy.properties as kp |
11 import os | 10 import os |
12 | 11 |
13 | 12 |
91 point_relative_to_root = root_parent.to_local(*self.to_window(x, y)) | 90 point_relative_to_root = root_parent.to_local(*self.to_window(x, y)) |
92 | 91 |
93 # Choose the best position to open the menu | 92 # Choose the best position to open the menu |
94 if x is not None and y is not None: | 93 if x is not None and y is not None: |
95 if point_relative_to_root[0] + self.width < root_parent.width: | 94 if point_relative_to_root[0] + self.width < root_parent.width: |
96 pox_x = x | 95 pos_x = x |
97 else: | 96 else: |
98 pox_x = x - self.width | 97 pos_x = x - self.width |
99 if issubclass(self.parent.__class__, AbstractMenuItem): | 98 if issubclass(self.parent.__class__, AbstractMenuItem): |
100 pox_x -= self.parent.width | 99 pos_x -= self.parent.width |
101 | 100 |
102 if point_relative_to_root[1] - self.height < 0: | 101 if point_relative_to_root[1] - self.height < 0: |
103 pos_y = y | 102 pos_y = y |
104 if issubclass(self.parent.__class__, AbstractMenuItem): | 103 if issubclass(self.parent.__class__, AbstractMenuItem): |
105 pos_y -= self.parent.height + self.spacer.height | 104 pos_y -= self.parent.height + self.spacer.height |
106 else: | 105 else: |
107 pos_y = y - self.height | 106 pos_y = y - self.height |
108 | 107 |
109 parent_pos = root_parent.pos | 108 self.pos = pos_x, pos_y |
110 pos = (pox_x + parent_pos[0], pos_y + parent_pos[1]) | |
111 | |
112 self.pos = pos | |
113 | 109 |
114 def self_or_submenu_collide_with_point(self, x, y): | 110 def self_or_submenu_collide_with_point(self, x, y): |
115 queue = self.menu_item_widgets | 111 queue = self.menu_item_widgets |
116 collide_widget = None | 112 collide_widget = None |
117 | 113 |
251 hovered = kp.BooleanProperty(False) | 247 hovered = kp.BooleanProperty(False) |
252 | 248 |
253 def _on_hovered(self, new_hovered): | 249 def _on_hovered(self, new_hovered): |
254 if new_hovered: | 250 if new_hovered: |
255 spacer_height = self.parent.spacer.height if self.parent.spacer else 0 | 251 spacer_height = self.parent.spacer.height if self.parent.spacer else 0 |
256 point = self.right, self.top + spacer_height | |
257 self.show_submenu(self.width, self.height + spacer_height) | 252 self.show_submenu(self.width, self.height + spacer_height) |
258 else: | 253 else: |
259 self.hide_submenu() | 254 self.hide_submenu() |
260 | 255 |
261 | 256 |