
/*
 * Copyright 2006 The Android Open Source Project
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */


#include "SkSVGClipPath.h"
#include "SkSVGParser.h"
#include "SkSVGUse.h"

DEFINE_SVG_NO_INFO(ClipPath)

bool SkSVGClipPath::isDef() {
    return true;
}

bool SkSVGClipPath::isNotDef() {
    return false;
}

void SkSVGClipPath::translate(SkSVGParser& parser, bool defState) {
    parser._startElement("clip");
    INHERITED::translate(parser, defState);
    SkASSERT(fChildren.count() == 1);
    SkSVGElement* child = *fChildren.begin();
    SkASSERT(child->getType() == SkSVGType_Use);
    SkSVGUse* use = (SkSVGUse*) child;
    SkSVGElement* ref = NULL;
    const char* refStr = &use->f_xlink_href.c_str()[1];
    SkASSERT(parser.getIDs().find(refStr, &ref));
    SkASSERT(ref);
    if (ref->getType() == SkSVGType_Rect)
        parser._addAttribute("rectangle", refStr);
    else
        parser._addAttribute("path", refStr);
    parser._endElement();
}
