11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkSVGPath.h"
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkSVGParser.h"
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkSVGAttribute SkSVGPath::gAttributes[] = {
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SVG_ATTRIBUTE(d)
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_SVG_INFO(Path)
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkSVGPath::translate(SkSVGParser& parser, bool defState) {
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    parser._startElement("path");
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    INHERITED::translate(parser, defState);
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    bool hasMultiplePaths = false;
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const char* firstZ = strchr(f_d.c_str(), 'z');
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (firstZ != NULL) {
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        firstZ++; // skip over 'z'
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        while (*firstZ == ' ')
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            firstZ++;
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        hasMultiplePaths = *firstZ != '\0';
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (hasMultiplePaths) {
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkString& fillRule = parser.getPaintLast(SkSVGPaint::kFillRule);
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (fillRule.size() > 0)
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            parser._addAttribute("fillType", fillRule.equals("evenodd") ? "evenOdd" : "winding");
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SVG_ADD_ATTRIBUTE(d);
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    parser._endElement();
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
38