"""
pygame-menu
https://github.com/ppizarror/pygame-menu
LEFT ARROW CLASS
Selector with a left arrow on the item.
"""
from __future__ import annotations
__all__ = ["LeftArrowSelection"]
from typing import TYPE_CHECKING
from pygame_menu._types import NumberInstance, NumberType, Tuple2IntType
from pygame_menu.widgets.selection.arrow_selection import ArrowSelection
if TYPE_CHECKING:
import pygame
import pygame_menu
[docs]
class LeftArrowSelection(ArrowSelection):
"""
Widget selection left arrow class.
Creates an arrow to the left of the selected Menu item.
:param arrow_size: Size of arrow on x-axis and y-axis (width, height) in px
:param arrow_right_margin: Distance from the arrow to the widget (px)
:param arrow_vertical_offset: Vertical offset of the arrow (px)
:param blink_ms: Milliseconds between each blink; if ``0`` blinking is disabled
"""
_arrow_right_margin: int
def __init__(
self,
arrow_size: Tuple2IntType = (10, 15),
arrow_right_margin: int = 5,
arrow_vertical_offset: int = 0,
blink_ms: NumberType = 0,
) -> None:
assert isinstance(arrow_right_margin, NumberInstance)
assert arrow_right_margin >= 0, "margin cannot be negative"
super().__init__(
margin_left=arrow_size[0] + arrow_right_margin,
margin_right=0,
margin_top=0,
margin_bottom=0,
arrow_vertical_offset=arrow_vertical_offset,
blink_ms=blink_ms,
)
self._arrow_right_margin = arrow_right_margin
[docs]
def draw(
self, surface: pygame.Surface, widget: pygame_menu.widgets.Widget
) -> LeftArrowSelection:
# A
# \B widget
# C /
# <------>
# margin
rect = widget.get_rect()
a = (
rect.topleft[0] - self._arrow_size[0] - self._arrow_right_margin,
int(
rect.midleft[1] - self._arrow_size[1] / 2 + self._arrow_vertical_offset
),
)
b = (
rect.midleft[0] - self._arrow_right_margin,
rect.midleft[1] + self._arrow_vertical_offset,
)
c = (
rect.bottomleft[0] - self._arrow_size[0] - self._arrow_right_margin,
int(
rect.midleft[1] + self._arrow_size[1] / 2 + self._arrow_vertical_offset
),
)
super()._draw_arrow(surface, widget, a, b, c)
return self