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

Side by Side Diff: src/svg/parser/SkSVGGradient.cpp

Issue 2154193003: Delete the legacy SVG parser (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « src/svg/parser/SkSVGGradient.h ('k') | src/svg/parser/SkSVGGroup.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2006 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8
9 #include "SkSVGGradient.h"
10 #include "SkSVGParser.h"
11 #include "SkSVGStop.h"
12
13 SkSVGGradient::SkSVGGradient() {
14 }
15
16 SkSVGElement* SkSVGGradient::getGradient() {
17 return this;
18 }
19
20 bool SkSVGGradient::isDef() {
21 return true;
22 }
23
24 bool SkSVGGradient::isNotDef() {
25 return false;
26 }
27
28 void SkSVGGradient::translate(SkSVGParser& parser, bool defState) {
29 INHERITED::translate(parser, defState);
30 // !!! no support for 'objectBoundingBox' yet
31 bool first = true;
32 bool addedFirst = false;
33 bool addedLast = false;
34 SkString offsets("[");
35 SkString* lastOffset = nullptr;
36 for (SkSVGElement** ptr = fChildren.begin(); ptr < fChildren.end(); ptr++) {
37 SkASSERT((*ptr)->getType() == SkSVGType_Stop);
38 SkSVGStop* stop = (SkSVGStop*) *ptr;
39 if (first && stop->f_offset.equals("0") == false) {
40 addedFirst = true;
41 offsets.append("0,");
42 }
43 SkString* thisOffset = &stop->f_offset;
44 if (lastOffset && thisOffset->equals(*lastOffset)) {
45 if (thisOffset->equals("1")) {
46 offsets.remove(offsets.size() - 2, 2);
47 offsets.append(".999,");
48 } else {
49 SkASSERT(0); // !!! need to write this case
50 }
51 }
52 offsets.append(*thisOffset);
53 if (ptr == fChildren.end() - 1) { // last
54 if (stop->f_offset.equals("1") == false) {
55 offsets.append(",1");
56 addedLast = true;
57 }
58 } else
59 offsets.appendUnichar(',');
60 first = false;
61 lastOffset = thisOffset;
62 }
63 offsets.appendUnichar(']');
64 parser._addAttribute("offsets", offsets);
65 if (addedFirst)
66 parser.translate(*fChildren.begin(), defState);
67 for (SkSVGElement** ptr = fChildren.begin(); ptr < fChildren.end(); ptr++)
68 parser.translate(*ptr, defState);
69 if (addedLast)
70 parser.translate(*(fChildren.end() - 1), defState);
71 }
72
73 void SkSVGGradient::translateGradientUnits(SkString& units) {
74 // !!! no support for 'objectBoundingBox' yet
75 SkASSERT(strcmp(units.c_str(), "userSpaceOnUse") == 0);
76 }
77
78 void SkSVGGradient::write(SkSVGParser& parser, SkString& baseColor) {
79 if (baseColor.c_str()[0] != '#')
80 return;
81 SkSVGPaint* saveHead = parser.fHead;
82 parser.fHead = &fPaintState;
83 parser.fSuppressPaint = true;
84 SkString originalID(f_id);
85 f_id.set("mask"); // write out gradient named given name + color (less initi al #)
86 f_id.append(baseColor.c_str() + 1);
87 SkString originalColors;
88 for (SkSVGElement** ptr = fChildren.begin(); ptr < fChildren.end(); ptr++) {
89 SkSVGStop* colorElement = (SkSVGStop*) *ptr;
90 SkString& color = colorElement->fPaintState.f_stopColor;
91 originalColors.append(color);
92 originalColors.appendUnichar(',');
93 SkASSERT(color.c_str()[0] == '#');
94 SkString replacement;
95 replacement.set("0x");
96 replacement.append(color.c_str() + 1, 2); // add stop colors using given color, turning existing stop color into alpha
97 SkASSERT(baseColor.c_str()[0] == '#');
98 SkASSERT(baseColor.size() == 7);
99 replacement.append(baseColor.c_str() + 1);
100 color.set(replacement);
101 }
102 translate(parser, true);
103 const char* originalPtr = originalColors.c_str(); // restore original gradie nt values
104 for (SkSVGElement** ptr = fChildren.begin(); ptr < fChildren.end(); ptr++) {
105 SkSVGStop* color = (SkSVGStop*) *ptr;
106 const char* originalEnd = strchr(originalPtr, ',');
107 color->fPaintState.f_stopColor.set(originalPtr, originalEnd - originalPt r);
108 originalPtr = originalEnd + 1;
109 }
110 f_id.set(originalID);
111 parser.fSuppressPaint = false;
112 parser.fHead = saveHead;
113 }
OLDNEW
« no previous file with comments | « src/svg/parser/SkSVGGradient.h ('k') | src/svg/parser/SkSVGGroup.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698