Source code for quill.exporter.cairo_context

"""
Draw to a Cairo context
"""

import cairo


from quill.exporter.base2 import ExporterBase2



[docs]class CairoContext(ExporterBase2): def __init__(self, context, width, height): self._width = width self._height = height self._context = context
[docs] def begin_export(self): cr = self._context cr.set_line_cap(cairo.LINE_CAP_ROUND) cr.set_line_join(cairo.LINE_JOIN_ROUND)
[docs] def end_export(self): pass
[docs] def new_page(self, page): self._context.identity_matrix() self._context.scale(self._height, self._height)
_pen_scale_factor = float(1600.0)
[docs] def stroke(self, stroke): cr = self._context cr.set_source_rgb(*stroke.rgb()) if stroke.has_pressure(): # width changes, each segment is its own stroke p1 = stroke.get_point(0) for i in xrange(stroke.n_points() - 1): p0 = p1 p1 = stroke.get_point(i+1) cr.set_line_width(stroke.thickness() / self._pen_scale_factor * (p0[2] + p1[2])/2) cr.move_to(p0[0], p0[1]) cr.line_to(p1[0], p1[1]) cr.stroke() else: # constant width, join all segment into one stroke cr.set_line_width(stroke.thickness() / self._pen_scale_factor) p1 = stroke.get_point(0) for i in xrange(stroke.n_points() - 1): p0 = p1 p1 = stroke.get_point(i+1) cr.move_to(p0[0], p0[1]) cr.line_to(p1[0], p1[1]) cr.stroke()
[docs] def image(self, image): cr = self._context