summaryrefslogtreecommitdiff
path: root/gerber/render/cairo_backend.py
diff options
context:
space:
mode:
Diffstat (limited to 'gerber/render/cairo_backend.py')
-rw-r--r--gerber/render/cairo_backend.py31
1 files changed, 17 insertions, 14 deletions
diff --git a/gerber/render/cairo_backend.py b/gerber/render/cairo_backend.py
index 76be60a..2e9b143 100644
--- a/gerber/render/cairo_backend.py
+++ b/gerber/render/cairo_backend.py
@@ -77,7 +77,7 @@ class GerberCairoContext(GerberContext):
self.output_ctx = cairo.Context(self.surface)
def render_layer(self, layer, filename=None, settings=None, bgsettings=None,
- verbose=False):
+ verbose=False, bounds=None):
if settings is None:
settings = THEMES['default'].get(layer.layer_class, RenderSettings())
if bgsettings is None:
@@ -87,7 +87,10 @@ class GerberCairoContext(GerberContext):
if verbose:
print('[Render]: Rendering Background.')
self.clear()
- self.set_bounds(layer.bounds)
+ if bounds is not None:
+ self.set_bounds(bounds)
+ else:
+ self.set_bounds(layer.bounds)
self._paint_background(bgsettings)
if verbose:
print('[Render]: Rendering {} Layer.'.format(layer.layer_class))
@@ -139,7 +142,7 @@ class GerberCairoContext(GerberContext):
if is_svg:
self.surface.finish()
self.surface_buffer.flush()
- with open(filename, "w") as f:
+ with open(filename, "wb") as f:
self.surface_buffer.seek(0)
f.write(self.surface_buffer.read())
f.flush()
@@ -249,10 +252,10 @@ class GerberCairoContext(GerberContext):
mask.ctx.set_line_cap(cairo.LINE_CAP_ROUND if isinstance(arc.aperture, Circle) else cairo.LINE_CAP_SQUARE)
mask.ctx.move_to(*start) # You actually have to do this...
if arc.direction == 'counterclockwise':
- mask.ctx.arc(*center, radius=radius, angle1=angle1, angle2=angle2)
+ mask.ctx.arc(center[0], center[1], radius, angle1, angle2)
else:
- mask.ctx.arc_negative(*center, radius=radius,
- angle1=angle1, angle2=angle2)
+ mask.ctx.arc_negative(center[0], center[1], radius,
+ angle1, angle2)
mask.ctx.move_to(*end) # ...lame
mask.ctx.stroke()
@@ -288,11 +291,11 @@ class GerberCairoContext(GerberContext):
angle1 = prim.start_angle
angle2 = prim.end_angle
if prim.direction == 'counterclockwise':
- mask.ctx.arc(*center, radius=radius,
- angle1=angle1, angle2=angle2)
+ mask.ctx.arc(center[0], center[1], radius,
+ angle1, angle2)
else:
- mask.ctx.arc_negative(*center, radius=radius,
- angle1=angle1, angle2=angle2)
+ mask.ctx.arc_negative(center[0], center[1], radius,
+ angle1, angle2)
mask.ctx.fill()
self.ctx.mask_surface(mask.surface, self.origin_in_pixels[0])
@@ -357,7 +360,7 @@ class GerberCairoContext(GerberContext):
with self._clip_primitive(rectangle):
with self._new_mask() as mask:
mask.ctx.set_line_width(0)
- mask.ctx.rectangle(*lower_left, width=width, height=height)
+ mask.ctx.rectangle(lower_left[0], lower_left[1], width, height)
mask.ctx.fill()
center = self.scale_point(rectangle.position)
@@ -415,7 +418,7 @@ class GerberCairoContext(GerberContext):
width, height = tuple([abs(coord) for coord in
self.scale_point((rectangle.width,
rectangle.height))])
- mask.ctx.rectangle(*lower_left, width=width, height=height)
+ mask.ctx.rectangle(lower_left[0], lower_left[1], width, height)
mask.ctx.fill()
center = self.scale_point(obround.position)
@@ -565,7 +568,7 @@ class GerberCairoContext(GerberContext):
def _flatten(self, color=None, alpha=None):
color = color if color is not None else self.color
alpha = alpha if alpha is not None else self.alpha
- self.output_ctx.set_source_rgba(*color, alpha=alpha)
+ self.output_ctx.set_source_rgba(color[0], color[1], color[2], alpha)
self.output_ctx.mask_surface(self.active_layer)
self.ctx = None
self.active_layer = None
@@ -576,7 +579,7 @@ class GerberCairoContext(GerberContext):
alpha = settings.alpha if settings is not None else 1.0
if not self.has_bg:
self.has_bg = True
- self.output_ctx.set_source_rgba(*color, alpha=alpha)
+ self.output_ctx.set_source_rgba(color[0], color[1], color[2], alpha)
self.output_ctx.paint()
def _clip_primitive(self, primitive):