124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org/* 224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org * Copyright 2014 Google Inc. 324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org * 424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org * 524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org * found in the LICENSE file. 724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org * 824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org */ 924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org#include <v8.h> 1024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 1124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgusing namespace v8; 1224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 1324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org#include "Global.h" 1424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org#include "BaseContext.h" 1524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org#include "Path2D.h" 1624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org#include "SkCanvas.h" 1724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 1824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 1924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgBaseContext* BaseContext::Unwrap(Handle<Object> obj) { 2024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org Handle<External> field = Handle<External>::Cast(obj->GetInternalField(0)); 2124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org void* ptr = field->Value(); 2224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return static_cast<BaseContext*>(ptr); 2324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 2424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 2524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::FillRect(const v8::FunctionCallbackInfo<Value>& args) { 2624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* BaseContext = Unwrap(args.This()); 2724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = BaseContext->getCanvas(); 2824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 2924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 3024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 3124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 3224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (args.Length() != 4) { 3324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate()->ThrowException( 3424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org v8::String::NewFromUtf8( 3524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate(), "Error: 4 arguments required.")); 3624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 3724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 3824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org double x = args[0]->NumberValue(); 3924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org double y = args[1]->NumberValue(); 4024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org double w = args[2]->NumberValue(); 4124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org double h = args[3]->NumberValue(); 4224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 4324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkRect rect = { 4424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkDoubleToScalar(x), 4524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkDoubleToScalar(y), 4624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkDoubleToScalar(x) + SkDoubleToScalar(w), 4724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkDoubleToScalar(y) + SkDoubleToScalar(h) 4824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org }; 4924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org canvas->drawRect(rect, BaseContext->fFillStyle); 5024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 5124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 5224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::Save(const v8::FunctionCallbackInfo<Value>& args) { 5324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* BaseContext = Unwrap(args.This()); 5424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = BaseContext->getCanvas(); 5524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 5624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 5724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 5824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 5924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org canvas->save(); 6024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 6124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 6224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::Restore(const v8::FunctionCallbackInfo<Value>& args) { 6324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* BaseContext = Unwrap(args.This()); 6424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = BaseContext->getCanvas(); 6524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 6624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 6724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 6824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 6924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org canvas->restore(); 7024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 7124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 7224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::Rotate(const v8::FunctionCallbackInfo<Value>& args) { 7324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* BaseContext = Unwrap(args.This()); 7424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = BaseContext->getCanvas(); 7524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 7624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 7724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 7824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 7924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (args.Length() != 1) { 8024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate()->ThrowException( 8124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org v8::String::NewFromUtf8( 8224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate(), "Error: 1 arguments required.")); 8324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 8424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 8524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org double angle = args[0]->NumberValue(); 8624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org canvas->rotate(SkRadiansToDegrees(angle)); 8724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 8824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 8924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::Translate(const v8::FunctionCallbackInfo<Value>& args) { 9024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* BaseContext = Unwrap(args.This()); 9124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = BaseContext->getCanvas(); 9224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 9324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 9424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 9524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 9624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (args.Length() != 2) { 9724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate()->ThrowException( 9824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org v8::String::NewFromUtf8( 9924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate(), "Error: 2 arguments required.")); 10024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 10124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 10224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org double dx = args[0]->NumberValue(); 10324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org double dy = args[1]->NumberValue(); 10424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org canvas->translate(SkDoubleToScalar(dx), SkDoubleToScalar(dy)); 10524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 10624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 10724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::ResetTransform(const v8::FunctionCallbackInfo<Value>& args) { 10824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* BaseContext = Unwrap(args.This()); 10924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = BaseContext->getCanvas(); 11024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 11124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 11224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 11324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 11424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org canvas->resetMatrix(); 11524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 11624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 11724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::Stroke(const v8::FunctionCallbackInfo<Value>& args) { 11824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* BaseContext = Unwrap(args.This()); 11924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = BaseContext->getCanvas(); 12024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 12124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 12224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 12324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 12424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (args.Length() != 1) { 12524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate()->ThrowException( 12624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org v8::String::NewFromUtf8( 12724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate(), "Error: 1 arguments required.")); 12824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 12924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 13024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 13124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org Handle<External> field = Handle<External>::Cast( 13224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args[0]->ToObject()->GetInternalField(0)); 13324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org void* ptr = field->Value(); 13424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org Path2D* path = static_cast<Path2D*>(ptr); 13524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 13624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org canvas->drawPath(path->getSkPath(), BaseContext->fStrokeStyle); 13724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 13824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 13924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::Fill(const v8::FunctionCallbackInfo<Value>& args) { 14024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* BaseContext = Unwrap(args.This()); 14124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = BaseContext->getCanvas(); 14224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 14324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 14424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 14524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 14624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (args.Length() != 1) { 14724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate()->ThrowException( 14824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org v8::String::NewFromUtf8( 14924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args.GetIsolate(), "Error: 1 arguments required.")); 15024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 15124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 15224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 15324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org Handle<External> field = Handle<External>::Cast( 15424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org args[0]->ToObject()->GetInternalField(0)); 15524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org void* ptr = field->Value(); 15624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org Path2D* path = static_cast<Path2D*>(ptr); 15724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 15824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org canvas->drawPath(path->getSkPath(), BaseContext->fFillStyle); 15924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 16024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 16124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::GetStyle(Local<String> name, 16224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const PropertyCallbackInfo<Value>& info, 16324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const SkPaint& style) { 16424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org char buf[8]; 16524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkColor color = style.getColor(); 16624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org sprintf(buf, "#%02X%02X%02X", SkColorGetR(color), SkColorGetG(color), 16724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkColorGetB(color)); 16824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 16924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org info.GetReturnValue().Set(String::NewFromUtf8(info.GetIsolate(), buf)); 17024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 17124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 17224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::SetStyle(Local<String> name, Local<Value> value, 17324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const PropertyCallbackInfo<void>& info, 17424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkPaint& style) { 17524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org Local<String> s = value->ToString(); 17624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (s->Length() != 7 && s->Length() != 9) { 17724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org info.GetIsolate()->ThrowException( 17824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org v8::String::NewFromUtf8( 17924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org info.GetIsolate(), 18024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org "Invalid fill style format length.")); 18124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 18224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 18324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org char buf[10]; 18424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org s->WriteUtf8(buf, sizeof(buf)); 18524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 18624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (buf[0] != '#') { 18724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org info.GetIsolate()->ThrowException( 18824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org v8::String::NewFromUtf8( 18924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org info.GetIsolate(), "Invalid fill style format.")); 19024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 19124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 19224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 19324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org // Colors can be RRGGBBAA, but SkColor uses ARGB. 19424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org long color = strtol(buf+1, NULL, 16); 19524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org uint32_t alpha = SK_AlphaOPAQUE; 19624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (s->Length() == 9) { 19724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org alpha = color & 0xFF; 19824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org color >>= 8; 19924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 20024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org style.setColor(SkColorSetA(SkColor(color), alpha)); 20124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 20224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 20324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::GetFillStyle(Local<String> name, 20424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const PropertyCallbackInfo<Value>& info) { 20524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* baseContext = Unwrap(info.This()); 20624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org GetStyle(name, info, baseContext->fFillStyle); 20724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 20824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 20924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::GetStrokeStyle(Local<String> name, 21024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const PropertyCallbackInfo<Value>& info) { 21124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* baseContext = Unwrap(info.This()); 21224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org GetStyle(name, info, baseContext->fStrokeStyle); 21324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 21424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 21524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::SetFillStyle(Local<String> name, Local<Value> value, 21624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const PropertyCallbackInfo<void>& info) { 21724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* baseContext = Unwrap(info.This()); 21824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SetStyle(name, value, info, baseContext->fFillStyle); 21924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 22024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 22124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::SetStrokeStyle(Local<String> name, Local<Value> value, 22224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const PropertyCallbackInfo<void>& info) { 22324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* baseContext = Unwrap(info.This()); 22424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SetStyle(name, value, info, baseContext->fStrokeStyle); 22524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 22624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 22724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 22824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::GetWidth(Local<String> name, 22924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const PropertyCallbackInfo<Value>& info) { 23024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* baseContext = Unwrap(info.This()); 23124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = baseContext->getCanvas(); 23224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 23324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 23424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 23524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkISize size = canvas->getDeviceSize(); 23624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 23724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org info.GetReturnValue().Set( 23824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org Int32::New(baseContext->fGlobal->getIsolate(), size.fWidth)); 23924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 24024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 24124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::GetHeight(Local<String> name, 24224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org const PropertyCallbackInfo<Value>& info) { 24324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org BaseContext* baseContext = Unwrap(info.This()); 24424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkCanvas* canvas = baseContext->getCanvas(); 24524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org if (NULL == canvas) { 24624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org return; 24724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org } 24824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org SkISize size = canvas->getDeviceSize(); 24924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 25024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org info.GetReturnValue().Set( 25124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org Int32::New(baseContext->fGlobal->getIsolate(), size.fHeight)); 25224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 25324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 25424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org#define ADD_METHOD(name, fn) \ 25524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org tmpl->Set(String::NewFromUtf8( \ 25624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org fGlobal->getIsolate(), name, \ 25724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org String::kInternalizedString), \ 25824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org FunctionTemplate::New(fGlobal->getIsolate(), fn)) 25924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 26024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.orgvoid BaseContext::addAttributesAndMethods(Handle<ObjectTemplate> tmpl) { 26124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org HandleScope scope(fGlobal->getIsolate()); 26224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 26324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org // Add accessors for each of the fields of the context object. 26424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org tmpl->SetAccessor(String::NewFromUtf8( 26524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org fGlobal->getIsolate(), "fillStyle", String::kInternalizedString), 26624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org GetFillStyle, SetFillStyle); 26724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org tmpl->SetAccessor(String::NewFromUtf8( 26824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org fGlobal->getIsolate(), "strokeStyle", String::kInternalizedString), 26924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org GetStrokeStyle, SetStrokeStyle); 27024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org tmpl->SetAccessor(String::NewFromUtf8( 27124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org fGlobal->getIsolate(), "width", String::kInternalizedString), 27224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org GetWidth); 27324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org tmpl->SetAccessor(String::NewFromUtf8( 27424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org fGlobal->getIsolate(), "height", String::kInternalizedString), 27524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org GetHeight); 27624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org 27724e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org // Add methods. 27824e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org ADD_METHOD("fillRect", FillRect); 27924e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org ADD_METHOD("stroke", Stroke); 28024e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org ADD_METHOD("fill", Fill); 28124e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org ADD_METHOD("rotate", Rotate); 28224e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org ADD_METHOD("save", Save); 28324e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org ADD_METHOD("restore", Restore); 28424e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org ADD_METHOD("translate", Translate); 28524e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org ADD_METHOD("resetTransform", ResetTransform); 28624e0496e8d58e779487307fbe0ae20d5fea4cfc0commit-bot@chromium.org} 287