Index: experimental/SkV8Example/JsContext.cpp |
diff --git a/experimental/SkV8Example/JsContext.cpp b/experimental/SkV8Example/JsContext.cpp |
index 5778172f27338c962f56482919fd1d54ba143f29..047147dc82785b3e44f96d3eb645612be4b8bb7e 100644 |
--- a/experimental/SkV8Example/JsContext.cpp |
+++ b/experimental/SkV8Example/JsContext.cpp |
@@ -158,13 +158,14 @@ void JsContext::SetStyle(Local<String> name, Local<Value> value, |
const PropertyCallbackInfo<void>& info, |
SkPaint& style) { |
Local<String> s = value->ToString(); |
- if (s->Length() != 7) { |
+ if (s->Length() != 7 && s->Length() != 9) { |
info.GetIsolate()->ThrowException( |
v8::String::NewFromUtf8( |
- info.GetIsolate(), "Invalid fill style format.")); |
+ info.GetIsolate(), |
+ "Invalid fill style format length.")); |
return; |
} |
- char buf[8]; |
+ char buf[10]; |
s->WriteUtf8(buf, sizeof(buf)); |
if (buf[0] != '#') { |
@@ -174,8 +175,14 @@ void JsContext::SetStyle(Local<String> name, Local<Value> value, |
return; |
} |
+ // Colors can be RRGGBBAA, but SkColor uses ARGB. |
long color = strtol(buf+1, NULL, 16); |
- style.setColor(SkColorSetA(SkColor(color), SK_AlphaOPAQUE)); |
+ uint32_t alpha = SK_AlphaOPAQUE; |
+ if (s->Length() == 9) { |
+ alpha = color & 0xFF; |
+ color >>= 8; |
+ } |
+ style.setColor(SkColorSetA(SkColor(color), alpha)); |
} |
void JsContext::GetFillStyle(Local<String> name, |