Source code for gaphas.painter.itempainter

from typing import Collection, Optional

from cairo import LINE_JOIN_ROUND

from gaphas.item import DrawContext, Item
from gaphas.types import CairoContext
from gaphas.view.selection import Selection

# The tolerance for Cairo. Bigger values increase speed and reduce accuracy
# (default: 0.1)
TOLERANCE = 0.8


[docs]class ItemPainter: draw_all = False def __init__(self, selection: Optional[Selection] = None) -> None: self.selection = selection or Selection() def paint_item(self, item: Item, cairo: CairoContext) -> None: cairo.save() try: cairo.transform(item.matrix_i2c.to_cairo()) selection = self.selection item.draw( DrawContext( cairo=cairo, selected=(item in selection.selected_items), focused=(item is selection.focused_item), hovered=(item is selection.hovered_item), ) ) finally: cairo.restore() def paint(self, items: Collection[Item], cairo: CairoContext) -> None: """Draw the items.""" cairo.set_tolerance(TOLERANCE) cairo.set_line_join(LINE_JOIN_ROUND) for item in items: self.paint_item(item, cairo)