Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(470)

Unified Diff: runtime/embedders/openglui/common/canvas_state.cc

Issue 12212074: Support for non-DOM canvases/contexts (backed by bitaps). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/embedders/openglui/common/canvas_state.cc
===================================================================
--- runtime/embedders/openglui/common/canvas_state.cc (revision 18200)
+++ runtime/embedders/openglui/common/canvas_state.cc (working copy)
@@ -140,36 +140,35 @@
void CanvasState::setGlobalCompositeOperation(const char* op) {
SkXfermode::Mode mode;
- if (strcmp(op, "source-atop") == 0) {
- mode = SkXfermode::kSrcATop_Mode;
- } else if (strcmp(op, "source-in") == 0) {
- mode = SkXfermode::kSrcIn_Mode;
- } else if (strcmp(op, "source-out") == 0) {
- mode = SkXfermode::kSrcOut_Mode;
- } else if (strcmp(op, "source-over") == 0) {
- mode = SkXfermode::kSrcOver_Mode; // Default.
- } else if (strcmp(op, "destination-atop") == 0) {
- mode = SkXfermode::kDstATop_Mode;
- } else if (strcmp(op, "destination-in") == 0) {
- mode = SkXfermode::kDstIn_Mode;
- } else if (strcmp(op, "destination-out") == 0) {
- mode = SkXfermode::kDstOut_Mode;
- } else if (strcmp(op, "destination-over") == 0) {
- mode = SkXfermode::kDstOver_Mode;
- } else if (strcmp(op, "lighter") == 0) {
- mode = SkXfermode::kLighten_Mode;
- } else if (strcmp(op, "darker") == 0) {
- mode = SkXfermode::kDarken_Mode;
- } else if (strcmp(op, "xor") == 0) {
- mode = SkXfermode::kXor_Mode;
- } else if (strcmp(op, "copy") == 0) {
- mode = SkXfermode::kSrc_Mode;
+ static const struct CompositOpToXfermodeMode {
+ const char* mCompositOp;
+ uint8_t m_xfermodeMode;
+ } gMapCompositOpsToXfermodeModes[] = {
+ { "clear", SkXfermode::kClear_Mode },
+ { "copy", SkXfermode::kSrc_Mode },
+ { "source-over", SkXfermode::kSrcOver_Mode },
+ { "source-in", SkXfermode::kSrcIn_Mode },
+ { "source-out", SkXfermode::kSrcOut_Mode },
+ { "source-atop", SkXfermode::kSrcATop_Mode },
+ { "destination-over", SkXfermode::kDstOver_Mode },
+ { "destination-in", SkXfermode::kDstIn_Mode },
+ { "destination-out", SkXfermode::kDstOut_Mode },
+ { "destination-atop", SkXfermode::kDstATop_Mode },
+ { "xor", SkXfermode::kXor_Mode },
+ { "darker", SkXfermode::kDarken_Mode },
+ { "lighter", SkXfermode::kPlus_Mode }
+ };
+ for (unsigned i = 0;
+ i < SK_ARRAY_COUNT(gMapCompositOpsToXfermodeModes);
+ i++) {
+ if (strcmp(op, gMapCompositOpsToXfermodeModes[i].mCompositOp) == 0) {
+ mode = (SkXfermode::Mode)gMapCompositOpsToXfermodeModes[i].m_xfermodeMode;
+ paint_.setXfermodeMode(mode);
+ return;
+ }
}
- SkXfermode* m = SkXfermode::Create(mode);
- // It seems we don't need unref() here. Including it causes
- // a crash. Maybe Skia has a preallocated long-lived set of
- // instances.
- paint_.setXfermode(m);
+ LOGE("Unknown CompositeOperator %s\n", op);
+ paint_.setXfermodeMode(SkXfermode::kSrcOver_Mode); // fall-back
}
void CanvasState::Arc(float x, float y, float radius,
@@ -215,10 +214,11 @@
// See http://www.w3.org/TR/CSS21/syndata.html#color-units.
// There is also another format: hsl(240,100%,100%) (and hsla)
// TODO(gram): We probably eventually want to use a table rather
-// than a big if statement.
+// than a big if statement; see setGlobalCompositeOperation for
+// an example.
ColorRGBA CanvasState::GetColor(const char* color) {
if (color[0] == '#') {
- int r, g, b;
+ int r = 0, g = 0, b = 0;
if (strlen(color) == 7) {
r = hexDigit(color[1]) * 16 + hexDigit(color[2]);
g = hexDigit(color[3]) * 16 + hexDigit(color[4]);

Powered by Google App Engine
This is Rietveld 408576698