當前位置: 首頁>>代碼示例>>Python>>正文


Python Rect.hit_test方法代碼示例

本文整理匯總了Python中rect.Rect.hit_test方法的典型用法代碼示例。如果您正苦於以下問題:Python Rect.hit_test方法的具體用法?Python Rect.hit_test怎麽用?Python Rect.hit_test使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在rect.Rect的用法示例。


在下文中一共展示了Rect.hit_test方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。

示例1: FoldingBox

# 需要導入模塊: from rect import Rect [as 別名]
# 或者: from rect.Rect import hit_test [as 別名]
class FoldingBox(SingleContainer):
	"""Collapsible container"""
	def __init__(self, x, y, w, h, title, **kwargs):
		'''Create a folding box
		
		Keyword arguments:
		name -- unique widget identifier
		content -- child container
		collapsed -- if true, container folded initially
		'''
		SingleContainer.__init__(self, x, y, w, h+15, **kwargs)
		
		self.elements['topbar'] = Rectangle()
		self.elements['title'] = pyglet.text.Label(title, font_size=8, color=(0,0,0,255), x=w/2, y=h+7, anchor_x='left', anchor_y='center')
		
		self._last_h = 15
		self._collapsed = kwargs.get('collapsed', False)
		if self._collapsed:
			self._h, self._last_h = self._last_h, self._h
		
		self.content = kwargs.get('content', Container(0, 0, w, h))
	
	def _get_title(self):
		return self.elements['title'].text
	def _set_title(self, title):
		self.elements['title'].text = title
	title = property(_get_title, _set_title)
	
	def update_theme(self, theme):
		SingleContainer.update_theme(self, theme)
		
		if theme:
			patch = self.theme['folding_box'][('image_closed' if self._collapsed else 'image')]
			
			self.elements['topbar'].patch = patch
			self.elements['title'].font_name = theme['font']
			self.elements['title'].font_size = theme['font_size_small']
			self.elements['title'].color = theme['font_color']
			
			if self._collapsed:
				self._h = patch.padding_top
			else:
				self._last_h = patch.padding_top
	
	def update_layout(self):
		SingleContainer.update_layout(self)
		
		if self.theme:
			patch = self.theme['folding_box'][('image_closed' if self._collapsed else 'image')]
			
			if self.content:
				self._w = self.content.w + patch.padding_left + patch.padding_right
				if not self._collapsed:
					self._h = self.content.h + patch.padding_bottom + patch.padding_top
			
			self.elements['topbar'].update(patch.padding_left, self.h - patch.padding_top, self.w - patch.padding_left - patch.padding_right, 1)
			self.elements['title'].x = patch.padding_left
			self.elements['title'].y = self.h - patch.padding_top/2 + 1
			
			self.topbar = Rect(0, self.h-patch.padding_top, self.w, patch.padding_top)
	
	def on_mouse_press(self, x, y, button, modifiers):
		if button == pyglet.window.mouse.LEFT and \
				self.topbar.hit_test(x - self._gx, y - self._gy):
			self._collapsed = not self._collapsed
			self._h, self._last_h = self._last_h, self._h
			self.elements['topbar'].patch = self.theme['folding_box'][('image_closed' if self._collapsed else 'image')]
			self.find_root().update_layout()
			return pyglet.event.EVENT_HANDLED
		
		SingleContainer.on_mouse_press(self, x, y, button, modifiers)
		return pyglet.event.EVENT_UNHANDLED
	
	def clip_rect(self):
		return Rect(self._gx, self._gy, self.w, self.h-15)
開發者ID:pborky,項目名稱:pyneuro,代碼行數:77,代碼來源:folding_box.py

示例2: Dialogue

# 需要導入模塊: from rect import Rect [as 別名]
# 或者: from rect.Rect import hit_test [as 別名]
class Dialogue(SingleContainer):
	"""Moveable window, optionally resizeable"""
	def __init__(self, x, y, w, h, title, **kwargs):
		'''Create a dialogue
		
		Keyword arguments:
		name -- unique widget identifier
		content -- child container
		resizeable -- if true, the dialogue is resizable
		'''
		SingleContainer.__init__(self, x, y, w, h, **kwargs)
		
		self.resizeable = kwargs.get('resizeable', False)
		
		self.elements['frame'] = Rectangle()
		self.elements['title'] = pyglet.text.Label(title, font_size=8, bold=True, color=(0,0,0,255), x=w/2, y=h+7, anchor_x='center', anchor_y='center')
		if self.resizeable:
			self.elements['resize'] = Rectangle(w-15, 0, 15, 15, (0.75, 0.75, 0.75, 0.5))
		
		self.topbar = Rect(0, h, w, 15)
		
		self._in_drag = False
		self._in_resize = False
		
		self.content = kwargs.get('content', Container(0, 0, w, h))
	
	def _get_title(self):
		return self.elements['title'].text
	def _set_title(self, title):
		self.elements['title'].text = title
	title = property(_get_title, _set_title)	
	
	def update_theme(self, theme):
		SingleContainer.update_theme(self, theme)
		
		if theme:
			self.elements['frame'].patch = theme['dialogue']['image']
			self.elements['title'].font_name = theme['font']
			self.elements['title'].font_size = theme['font_size_small']
			self.elements['title'].color = theme['font_color']
	
	def update_layout(self):
		SingleContainer.update_layout(self)
		
		if self.content:
			self._y = self._y + self._h - self.content.h
			self._w, self._h = self.content.w, self.content.h
		
		self.elements['frame'].update(0, 0, self.w, self.h)
		self.elements['title'].x = self.w/2
		if self.resizeable:
			self.elements['resize'].update(self.w-15, 0, 15, 15)
		
		if self.theme:
			patch = self.theme['dialogue']['image']
			self.topbar = Rect(-patch.padding_left, self.h, self.w + patch.padding_right, patch.padding_top)
			self.elements['title'].y = self.h + patch.padding_top/2
	
	def bounds(self):
		return Rect(self._gx, self._gy, self.w, self.h + self.topbar.h)
	
	def on_mouse_press(self, x, y, button, modifiers):
		if button == pyglet.window.mouse.LEFT and \
				self.topbar.hit_test(x - self.x, y - self.y):
			self._in_drag = True
			self._offset_x = x - self.x
			self._offset_y = y - self.y
			return pyglet.event.EVENT_HANDLED
		
		if self.resizeable and button == pyglet.window.mouse.LEFT and \
				self.elements['resize'].hit_test(x - self.x, y - self.y):
			self._in_resize = True
			self._orig_y = self.y
			self._orig_h = self.h
			self._offset_x = x - self.x - self.w
			self._offset_y = y - self.y
			return pyglet.event.EVENT_HANDLED
		
		SingleContainer.on_mouse_press(self, x, y, button, modifiers)
		return pyglet.event.EVENT_UNHANDLED
	
	def on_mouse_drag(self, x, y, dx, dy, button, modifiers):
		if button == pyglet.window.mouse.LEFT and self._in_drag:
			self.x = x - self._offset_x
			self.y = y - self._offset_y
			return pyglet.event.EVENT_HANDLED
		
		if button == pyglet.window.mouse.LEFT and self._in_resize:
			self._w = x - self.x - self._offset_x
			if self.w < 100:
				self._w = 100
			
			self._h = self._orig_h - (y - self._orig_y - self._offset_y)
			self.y = self._orig_y + (y - self._orig_y - self._offset_y)
			if self.h < 50:
				self.y -= 50 - self.h
				self._h = 50
			
			self.content._w, self.content._h = self.w, self.h
			self.update_layout()
#.........這裏部分代碼省略.........
開發者ID:pborky,項目名稱:pyneuro,代碼行數:103,代碼來源:dialogue.py


注:本文中的rect.Rect.hit_test方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。