From 818892d32e1ebb1df149ff9b9d8ec1a52ea8b2de Mon Sep 17 00:00:00 2001 From: Tj Holowaychuk Date: Wed, 3 Nov 2010 17:47:03 -0700 Subject: [PATCH] Partial path restoration fix for {Fill,Stroke}Text() --- src/CanvasRenderingContext2d.cc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index 16b1995..790bda2 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -786,8 +786,20 @@ Context2d::FillText(const Arguments &args) { Context2d *context = ObjectWrap::Unwrap(args.This()); cairo_t *ctx = context->getContext(); + + // Save path + cairo_save(ctx); + cairo_path_t *path = cairo_copy_path_flat(ctx); + cairo_new_path(ctx); + + // Text path context->setTextPath(*str, x, y); SET_SOURCE(context->state->fill); + + // Restore path + cairo_restore(ctx); + cairo_append_path(ctx, path); + return Undefined(); } @@ -809,8 +821,19 @@ Context2d::StrokeText(const Arguments &args) { Context2d *context = ObjectWrap::Unwrap(args.This()); cairo_t *ctx = context->getContext(); + // Save path + cairo_save(ctx); + cairo_path_t *path = cairo_copy_path_flat(ctx); + cairo_new_path(ctx); + + // Text path context->setTextPath(*str, x, y); SET_SOURCE(context->state->stroke); + + // Restore path + cairo_restore(ctx); + cairo_append_path(ctx, path); + return Undefined(); }