diff --git a/src/context2d.cc b/src/context2d.cc index f44a93e..307b297 100644 --- a/src/context2d.cc +++ b/src/context2d.cc @@ -99,6 +99,7 @@ Context2d::Initialize(Handle target) { NODE_SET_PROTOTYPE_METHOD(t, "setStrokeRGBA", SetStrokeRGBA); proto->SetAccessor(String::NewSymbol("lineWidth"), GetLineWidth, SetLineWidth); proto->SetAccessor(String::NewSymbol("lineCap"), GetLineCap, SetLineCap); + proto->SetAccessor(String::NewSymbol("lineJoin"), GetLineJoin, SetLineJoin); target->Set(String::NewSymbol("Context2d"), t->GetFunction()); } @@ -154,6 +155,41 @@ Context2d::SetLineWidth(Local prop, Local val, const AccessorInfo cairo_set_line_width(context->getContext(), val->NumberValue()); } +/* + * Get line join. + */ + +Handle +Context2d::GetLineJoin(Local prop, const AccessorInfo &info) { + Context2d *context = ObjectWrap::Unwrap(info.This()); + switch (cairo_get_line_join(context->getContext())) { + case CAIRO_LINE_JOIN_BEVEL: + return String::NewSymbol("bevel"); + case CAIRO_LINE_JOIN_ROUND: + return String::NewSymbol("round"); + default: + return String::NewSymbol("miter"); + } +} + +/* + * Set line join. + */ + +void +Context2d::SetLineJoin(Local prop, Local val, const AccessorInfo &info) { + Context2d *context = ObjectWrap::Unwrap(info.This()); + cairo_t *ctx = context->getContext(); + String::AsciiValue type(val); + if (0 == strcmp("round", *type)) { + cairo_set_line_join(ctx, CAIRO_LINE_JOIN_ROUND); + } else if (0 == strcmp("bevel", *type)) { + cairo_set_line_join(ctx, CAIRO_LINE_JOIN_BEVEL); + } else { + cairo_set_line_join(ctx, CAIRO_LINE_JOIN_MITER); + } +} + /* * Get line cap. */ @@ -189,7 +225,6 @@ Context2d::SetLineCap(Local prop, Local val, const AccessorInfo & } } - /* * Set fill RGBA, used internally for fillStyle= */ diff --git a/src/context2d.h b/src/context2d.h index ccc7958..b53211f 100644 --- a/src/context2d.h +++ b/src/context2d.h @@ -35,8 +35,10 @@ class Context2d: public node::ObjectWrap { static Handle ClearRect(const Arguments &args); static Handle Arc(const Arguments &args); static Handle GetLineCap(Local prop, const AccessorInfo &info); + static Handle GetLineJoin(Local prop, const AccessorInfo &info); static Handle GetLineWidth(Local prop, const AccessorInfo &info); static void SetLineCap(Local prop, Local val, const AccessorInfo &info); + static void SetLineJoin(Local prop, Local val, const AccessorInfo &info); static void SetLineWidth(Local prop, Local val, const AccessorInfo &info); inline cairo_t *getContext(){ return _context; } inline Canvas *getCanvas(){ return _canvas; }