/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "GrStyle.h"

void GrStyle::initPathEffect(SkPathEffect* pe) {
    if (!pe) {
        fDashInfo.fType = SkPathEffect::kNone_DashType;
        return;
    }
    SkPathEffect::DashInfo info;
    if (SkPathEffect::kDash_DashType == pe->asADash(&info)) {
        if (fStrokeRec.getStyle() == SkStrokeRec::kFill_Style) {
            fPathEffect.reset(nullptr);
        } else {
            fPathEffect.reset(SkSafeRef(pe));
            fDashInfo.fType = SkPathEffect::kDash_DashType;
            fDashInfo.fIntervals.reset(info.fCount);
            fDashInfo.fPhase = info.fPhase;
            info.fIntervals = fDashInfo.fIntervals.get();
            pe->asADash(&info);
            return;
        }
    } else {
        fPathEffect.reset(SkSafeRef(pe));
    }
    fDashInfo.fType = SkPathEffect::kNone_DashType;
    fDashInfo.fIntervals.reset(0);
}
