1 /* libs/graphics/svg/SkSVGImage.cpp 2 ** 3 ** Copyright 2006, The Android Open Source Project 4 ** 5 ** Licensed under the Apache License, Version 2.0 (the "License"); 6 ** you may not use this file except in compliance with the License. 7 ** You may obtain a copy of the License at 8 ** 9 ** http://www.apache.org/licenses/LICENSE-2.0 10 ** 11 ** Unless required by applicable law or agreed to in writing, software 12 ** distributed under the License is distributed on an "AS IS" BASIS, 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 ** See the License for the specific language governing permissions and 15 ** limitations under the License. 16 */ 17 18 #include "SkSVGImage.h" 19 #include "SkSVGParser.h" 20 21 const SkSVGAttribute SkSVGImage::gAttributes[] = { 22 SVG_ATTRIBUTE(height), 23 SVG_ATTRIBUTE(width), 24 SVG_ATTRIBUTE(x), 25 SVG_LITERAL_ATTRIBUTE(xlink:href, f_xlink_href), 26 SVG_ATTRIBUTE(y) 27 }; 28 29 DEFINE_SVG_INFO(Image) 30 31 void SkSVGImage::translate(SkSVGParser& parser, bool defState) { 32 parser._startElement("image"); 33 INHERITED::translate(parser, defState); 34 SVG_ADD_ATTRIBUTE(x); 35 SVG_ADD_ATTRIBUTE(y); 36 // SVG_ADD_ATTRIBUTE(width); 37 // SVG_ADD_ATTRIBUTE(height); 38 translateImage(parser); 39 parser._endElement(); 40 } 41 42 void SkSVGImage::translateImage(SkSVGParser& parser) { 43 SkASSERT(f_xlink_href.size() > 0); 44 const char* data = f_xlink_href.c_str(); 45 SkASSERT(strncmp(data, "data:image/", 11) == 0); 46 data += 11; 47 SkASSERT(strncmp(data, "png;", 4) == 0 || strncmp(data, "jpeg;", 5) == 0); 48 data = strchr(data, ';'); 49 SkASSERT(strncmp(data, ";base64,", 8) == 0); 50 data += 8; 51 parser._addAttribute("base64", data); 52 } 53