1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/*
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Copyright 2006 The Android Open Source Project
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Use of this source code is governed by a BSD-style license that can be
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * found in the LICENSE file.
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "SkSVGImage.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "SkSVGParser.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst SkSVGAttribute SkSVGImage::gAttributes[] = {
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SVG_ATTRIBUTE(height),
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SVG_ATTRIBUTE(width),
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SVG_ATTRIBUTE(x),
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SVG_LITERAL_ATTRIBUTE(xlink:href, f_xlink_href),
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SVG_ATTRIBUTE(y)
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDEFINE_SVG_INFO(Image)
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SkSVGImage::translate(SkSVGParser& parser, bool defState) {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    parser._startElement("image");
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    INHERITED::translate(parser, defState);
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SVG_ADD_ATTRIBUTE(x);
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SVG_ADD_ATTRIBUTE(y);
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch//  SVG_ADD_ATTRIBUTE(width);
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch//  SVG_ADD_ATTRIBUTE(height);
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    translateImage(parser);
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    parser._endElement();
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SkSVGImage::translateImage(SkSVGParser& parser) {
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SkASSERT(f_xlink_href.size() > 0);
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const char* data = f_xlink_href.c_str();
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SkASSERT(strncmp(data, "data:image/", 11) == 0);
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    data += 11;
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SkASSERT(strncmp(data, "png;", 4) == 0 || strncmp(data, "jpeg;", 5) == 0);
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    data = strchr(data, ';');
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SkASSERT(strncmp(data, ";base64,", 8) == 0);
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    data += 8;
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    parser._addAttribute("base64", data);
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch