| Index: experimental/SkV8Example/JsContext.cpp
|
| diff --git a/experimental/SkV8Example/JsContext.cpp b/experimental/SkV8Example/JsContext.cpp
|
| index 87f7d0efe3bc0a8a330a66ead9d66f4787555ad9..2006ab2061bf66a0cb46f0fd9f562b7744a7b8f0 100644
|
| --- a/experimental/SkV8Example/JsContext.cpp
|
| +++ b/experimental/SkV8Example/JsContext.cpp
|
| @@ -52,10 +52,37 @@ void JsContext::FillRect(const v8::FunctionCallbackInfo<Value>& args) {
|
| SkDoubleToScalar(x) + SkDoubleToScalar(w),
|
| SkDoubleToScalar(y) + SkDoubleToScalar(h)
|
| };
|
| - jsContext->fFillStyle.setStyle(SkPaint::kFill_Style);
|
| canvas->drawRect(rect, jsContext->fFillStyle);
|
| }
|
|
|
| +void JsContext::Save(const v8::FunctionCallbackInfo<Value>& args) {
|
| + JsContext* jsContext = Unwrap(args.This());
|
| + SkCanvas* canvas = jsContext->fCanvas;
|
| +
|
| + canvas->save();
|
| +}
|
| +
|
| +void JsContext::Restore(const v8::FunctionCallbackInfo<Value>& args) {
|
| + JsContext* jsContext = Unwrap(args.This());
|
| + SkCanvas* canvas = jsContext->fCanvas;
|
| +
|
| + canvas->restore();
|
| +}
|
| +
|
| +void JsContext::Rotate(const v8::FunctionCallbackInfo<Value>& args) {
|
| + JsContext* jsContext = Unwrap(args.This());
|
| + SkCanvas* canvas = jsContext->fCanvas;
|
| +
|
| + if (args.Length() != 1) {
|
| + args.GetIsolate()->ThrowException(
|
| + v8::String::NewFromUtf8(
|
| + args.GetIsolate(), "Error: 1 arguments required."));
|
| + return;
|
| + }
|
| + double angle = args[0]->NumberValue();
|
| + canvas->rotate(SkRadiansToDegrees(angle));
|
| +}
|
| +
|
| void JsContext::Translate(const v8::FunctionCallbackInfo<Value>& args) {
|
| JsContext* jsContext = Unwrap(args.This());
|
| SkCanvas* canvas = jsContext->fCanvas;
|
| @@ -94,11 +121,9 @@ void JsContext::Stroke(const v8::FunctionCallbackInfo<Value>& args) {
|
| void* ptr = field->Value();
|
| Path* path = static_cast<Path*>(ptr);
|
|
|
| - jsContext->fFillStyle.setStyle(SkPaint::kStroke_Style);
|
| - canvas->drawPath(path->getSkPath(), jsContext->fFillStyle);
|
| + canvas->drawPath(path->getSkPath(), jsContext->fStrokeStyle);
|
| }
|
|
|
| -
|
| void JsContext::Fill(const v8::FunctionCallbackInfo<Value>& args) {
|
| JsContext* jsContext = Unwrap(args.This());
|
| SkCanvas* canvas = jsContext->fCanvas;
|
| @@ -115,25 +140,23 @@ void JsContext::Fill(const v8::FunctionCallbackInfo<Value>& args) {
|
| void* ptr = field->Value();
|
| Path* path = static_cast<Path*>(ptr);
|
|
|
| - jsContext->fFillStyle.setStyle(SkPaint::kFill_Style);
|
| canvas->drawPath(path->getSkPath(), jsContext->fFillStyle);
|
| }
|
|
|
| -
|
| -void JsContext::GetFillStyle(Local<String> name,
|
| - const PropertyCallbackInfo<Value>& info) {
|
| - JsContext* jsContext = Unwrap(info.This());
|
| - SkColor color = jsContext->fFillStyle.getColor();
|
| +void JsContext::GetStyle(Local<String> name,
|
| + const PropertyCallbackInfo<Value>& info,
|
| + const SkPaint& style) {
|
| char buf[8];
|
| + SkColor color = style.getColor();
|
| sprintf(buf, "#%02X%02X%02X", SkColorGetR(color), SkColorGetG(color),
|
| SkColorGetB(color));
|
|
|
| info.GetReturnValue().Set(String::NewFromUtf8(info.GetIsolate(), buf));
|
| }
|
|
|
| -void JsContext::SetFillStyle(Local<String> name, Local<Value> value,
|
| - const PropertyCallbackInfo<void>& info) {
|
| - JsContext* jsContext = Unwrap(info.This());
|
| +void JsContext::SetStyle(Local<String> name, Local<Value> value,
|
| + const PropertyCallbackInfo<void>& info,
|
| + SkPaint& style) {
|
| Local<String> s = value->ToString();
|
| if (s->Length() != 7) {
|
| info.GetIsolate()->ThrowException(
|
| @@ -152,7 +175,31 @@ void JsContext::SetFillStyle(Local<String> name, Local<Value> value,
|
| }
|
|
|
| long color = strtol(buf+1, NULL, 16);
|
| - jsContext->fFillStyle.setColor(SkColorSetA(SkColor(color), SK_AlphaOPAQUE));
|
| + style.setColor(SkColorSetA(SkColor(color), SK_AlphaOPAQUE));
|
| +}
|
| +
|
| +void JsContext::GetFillStyle(Local<String> name,
|
| + const PropertyCallbackInfo<Value>& info) {
|
| + JsContext* jsContext = Unwrap(info.This());
|
| + GetStyle(name, info, jsContext->fFillStyle);
|
| +}
|
| +
|
| +void JsContext::GetStrokeStyle(Local<String> name,
|
| + const PropertyCallbackInfo<Value>& info) {
|
| + JsContext* jsContext = Unwrap(info.This());
|
| + GetStyle(name, info, jsContext->fStrokeStyle);
|
| +}
|
| +
|
| +void JsContext::SetFillStyle(Local<String> name, Local<Value> value,
|
| + const PropertyCallbackInfo<void>& info) {
|
| + JsContext* jsContext = Unwrap(info.This());
|
| + SetStyle(name, value, info, jsContext->fFillStyle);
|
| +}
|
| +
|
| +void JsContext::SetStrokeStyle(Local<String> name, Local<Value> value,
|
| + const PropertyCallbackInfo<void>& info) {
|
| + JsContext* jsContext = Unwrap(info.This());
|
| + SetStyle(name, value, info, jsContext->fStrokeStyle);
|
| }
|
|
|
|
|
| @@ -175,6 +222,12 @@ void JsContext::GetHeight(Local<String> name,
|
|
|
| Persistent<ObjectTemplate> JsContext::gContextTemplate;
|
|
|
| +#define ADD_METHOD(name, fn) \
|
| + result->Set(String::NewFromUtf8( \
|
| + fGlobal->getIsolate(), name, \
|
| + String::kInternalizedString), \
|
| + FunctionTemplate::New(fn))
|
| +
|
| Handle<ObjectTemplate> JsContext::makeContextTemplate() {
|
| EscapableHandleScope handleScope(fGlobal->getIsolate());
|
|
|
| @@ -188,6 +241,9 @@ Handle<ObjectTemplate> JsContext::makeContextTemplate() {
|
| fGlobal->getIsolate(), "fillStyle", String::kInternalizedString),
|
| GetFillStyle, SetFillStyle);
|
| result->SetAccessor(String::NewFromUtf8(
|
| + fGlobal->getIsolate(), "strokeStyle", String::kInternalizedString),
|
| + GetStrokeStyle, SetStrokeStyle);
|
| + result->SetAccessor(String::NewFromUtf8(
|
| fGlobal->getIsolate(), "width", String::kInternalizedString),
|
| GetWidth);
|
| result->SetAccessor(String::NewFromUtf8(
|
| @@ -195,31 +251,14 @@ Handle<ObjectTemplate> JsContext::makeContextTemplate() {
|
| GetHeight);
|
|
|
| // Add methods.
|
| - result->Set(
|
| - String::NewFromUtf8(
|
| - fGlobal->getIsolate(), "fillRect",
|
| - String::kInternalizedString),
|
| - FunctionTemplate::New(FillRect));
|
| - result->Set(
|
| - String::NewFromUtf8(
|
| - fGlobal->getIsolate(), "stroke",
|
| - String::kInternalizedString),
|
| - FunctionTemplate::New(Stroke));
|
| - result->Set(
|
| - String::NewFromUtf8(
|
| - fGlobal->getIsolate(), "fill",
|
| - String::kInternalizedString),
|
| - FunctionTemplate::New(Fill));
|
| - result->Set(
|
| - String::NewFromUtf8(
|
| - fGlobal->getIsolate(), "translate",
|
| - String::kInternalizedString),
|
| - FunctionTemplate::New(Translate));
|
| - result->Set(
|
| - String::NewFromUtf8(
|
| - fGlobal->getIsolate(), "resetTransform",
|
| - String::kInternalizedString),
|
| - FunctionTemplate::New(ResetTransform));
|
| + ADD_METHOD("fillRect", FillRect);
|
| + ADD_METHOD("stroke", Stroke);
|
| + ADD_METHOD("fill", Fill);
|
| + ADD_METHOD("rotate", Rotate);
|
| + ADD_METHOD("save", Save);
|
| + ADD_METHOD("restore", Restore);
|
| + ADD_METHOD("translate", Translate);
|
| + ADD_METHOD("resetTransform", ResetTransform);
|
|
|
| // Return the result through the current handle scope.
|
| return handleScope.Escape(result);
|
|
|