Source code for gaphas.painter.boundingboxpainter
from __future__ import annotations
from typing import Collection
import cairo
from gaphas.geometry import Rectangle
from gaphas.item import Item
from gaphas.painter.painter import ItemPainterType
[docs]class BoundingBoxPainter:
"""This specific case of an ItemPainter is used to calculate the bounding
boxes (in cairo device coordinates) for the items.
Deprecated since 3.2: Bounding boxes are calculated in the View
directly. This class is not a pass-through for the provided
item_painter.
"""
def __init__(
self,
item_painter: ItemPainterType,
):
self.item_painter = item_painter
def paint_item(self, item: Item, cr: cairo.Context) -> None:
self.item_painter.paint_item(item, cr)
def paint(self, items: Collection[Item], cr: cairo.Context) -> None:
"""Draw the items, return the bounding boxes (in cairo device
coordinates)."""
self.item_painter.paint(items, cr)
def bounding_box(self, items: Collection[Item], cr: cairo.Context) -> Rectangle:
"""Get the unified bounding box of the rendered items."""
surface = cairo.RecordingSurface(cairo.Content.COLOR_ALPHA, None)
cr = cairo.Context(surface)
self.paint(items, cr)
return Rectangle(*surface.ink_extents())