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