# In the sprite class, the definition of _hover
# self.consume_hover is whether or not the button would like the sprites which are placed below it
# to also get hover events.
def _hover(self, pos):
if self.hover_rect is None:
r = self.rect
else:
r = self.hover_rect
if r.collidepoint(pos):
return (True, self.consume_hover)
return (False, False)
# In my Sprite "manager" class
mouse_pos = pygame.mouse.get_pos()
if mouse_pos is None:
return
mouse_now_over = []
for sprite in self._sprites:
hover = sprite._hover(mouse_pos)
if hover[0] is True:
mouse_now_over.append(sprite)
# first, is this one that the mouse was previously over
if sprite in self._mouse_previously_over:
if hover[1] is True: # It wants to consume the hover
break
continue
sprite.on_mouse_over()
if hover[1] is True:
break
for sprite in self._mouse_previously_over:
if sprite in mouse_now_over:
continue
sprite.on_mouse_off()
self._mouse_previously_over = mouse_now_over