From 6663acff010ce752e4bf778da81fa97448c9db31 Mon Sep 17 00:00:00 2001 From: bsalomon Date: Tue, 10 May 2016 09:14:17 -0700 Subject: Replace GrStrokeInfo with GrStyle. A side effect is that arbitrary path effects can no be pushed deeper into the Ganesh flow for paths. They may be applied by path renderers. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1957363002 Committed: https://skia.googlesource.com/skia/+/33595bdf4b64a745f6340338d307e806e96c587f Review-Url: https://codereview.chromium.org/1957363002 --- src/gpu/GrStrokeInfo.h | 191 ------------------------------------------------- 1 file changed, 191 deletions(-) delete mode 100644 src/gpu/GrStrokeInfo.h (limited to 'src/gpu/GrStrokeInfo.h') diff --git a/src/gpu/GrStrokeInfo.h b/src/gpu/GrStrokeInfo.h deleted file mode 100644 index 9cf7d8302f..0000000000 --- a/src/gpu/GrStrokeInfo.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright 2014 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef GrStrokeInfo_DEFINED -#define GrStrokeInfo_DEFINED - -#include "SkPathEffect.h" -#include "SkStrokeRec.h" -#include "SkTemplates.h" - -class GrUniqueKey; - -/* - * GrStrokeInfo encapsulates all the pertinent infomation regarding the stroke. The SkStrokeRec - * which holds information on fill style, width, miter, cap, and join. It also holds information - * about the dash like intervals, count, and phase. - */ -class GrStrokeInfo : public SkStrokeRec { -public: - static const GrStrokeInfo& FillInfo() { - static const GrStrokeInfo gFill(kFill_InitStyle); - return gFill; - } - - GrStrokeInfo(SkStrokeRec::InitStyle style) - : INHERITED(style) - , fDashType(SkPathEffect::kNone_DashType) { - } - - GrStrokeInfo(const GrStrokeInfo& src, bool includeDash = true) - : INHERITED(src) { - if (includeDash && src.isDashed()) { - fDashType = src.fDashType; - fDashPhase = src.fDashPhase; - fIntervals.reset(src.getDashCount()); - memcpy(fIntervals.get(), src.fIntervals.get(), fIntervals.count() * sizeof(SkScalar)); - } else { - fDashType = SkPathEffect::kNone_DashType; - } - } - - GrStrokeInfo(const SkPaint& paint, SkPaint::Style styleOverride) - : INHERITED(paint, styleOverride) - , fDashType(SkPathEffect::kNone_DashType) { - this->init(paint); - } - - explicit GrStrokeInfo(const SkPaint& paint) - : INHERITED(paint) - , fDashType(SkPathEffect::kNone_DashType) { - this->init(paint); - } - - GrStrokeInfo& operator=(const GrStrokeInfo& other) { - if (other.isDashed()) { - fDashType = other.fDashType; - fDashPhase = other.fDashPhase; - fIntervals.reset(other.getDashCount()); - memcpy(fIntervals.get(), other.fIntervals.get(), fIntervals.count() * sizeof(SkScalar)); - } else { - this->removeDash(); - } - this->INHERITED::operator=(other); - return *this; - } - - bool hasEqualEffect(const GrStrokeInfo& other) const { - if (this->isDashed() != other.isDashed()) { - return false; - } - if (this->isDashed()) { - if (fDashPhase != other.fDashPhase || - fIntervals.count() != other.fIntervals.count() || - memcmp(fIntervals.get(), other.fIntervals.get(), - fIntervals.count() * sizeof(SkScalar)) != 0) { - return false; - } - } - return this->INHERITED::hasEqualEffect(other); - } - - /* - * This functions takes in a patheffect and updates the dashing information if the path effect - * is a Dash type. Returns true if the path effect is a dashed effect and we are stroking, - * otherwise it returns false. - */ - bool setDashInfo(const SkPathEffect* pe) { - if (pe && !this->isFillStyle()) { - SkPathEffect::DashInfo dashInfo; - fDashType = pe->asADash(&dashInfo); - if (SkPathEffect::kDash_DashType == fDashType) { - fIntervals.reset(dashInfo.fCount); - dashInfo.fIntervals = fIntervals.get(); - pe->asADash(&dashInfo); - fDashPhase = dashInfo.fPhase; - return true; - } - } - return false; - } - - /* - * Like the above, but sets with an explicit SkPathEffect::DashInfo - */ - bool setDashInfo(const SkPathEffect::DashInfo& info) { - if (!this->isFillStyle()) { - fDashType = SkPathEffect::kDash_DashType; - fDashPhase = info.fPhase; - fIntervals.reset(info.fCount); - for (int i = 0; i < fIntervals.count(); i++) { - fIntervals[i] = info.fIntervals[i]; - } - return true; - } - return false; - } - - bool isDashed() const { - return (!this->isFillStyle() && SkPathEffect::kDash_DashType == fDashType); - } - - int32_t getDashCount() const { - SkASSERT(this->isDashed()); - return fIntervals.count(); - } - - SkScalar getDashPhase() const { - SkASSERT(this->isDashed()); - return fDashPhase; - } - - const SkScalar* getDashIntervals() const { - SkASSERT(this->isDashed()); - return fIntervals.get(); - } - - void removeDash() { - fDashType = SkPathEffect::kNone_DashType; - } - - /** Applies the dash to a path, if the stroke info has dashing. - * @return true if the dashing was applied (dst and dstStrokeInfo will be modified). - * false if the stroke info did not have dashing. The dst and dstStrokeInfo - * will be unmodified. The stroking in the SkStrokeRec might still - * be applicable. - */ - bool applyDashToPath(SkPath* dst, GrStrokeInfo* dstStrokeInfo, const SkPath& src) const; - - /** - * Computes the length of the data that will be written by asUniqueKeyFragment() function. - */ - int computeUniqueKeyFragmentData32Cnt() const { - const int kSkScalarData32Cnt = sizeof(SkScalar) / sizeof(uint32_t); - // SkStrokeRec data: 32 bits for style+join+cap and 2 scalars for miter and width. - int strokeKeyData32Cnt = 1 + 2 * kSkScalarData32Cnt; - - if (this->isDashed()) { - // One scalar for dash phase and one for each dash value. - strokeKeyData32Cnt += (1 + this->getDashCount()) * kSkScalarData32Cnt; - } - return strokeKeyData32Cnt; - } - - /** - * Writes the object contents as uint32_t data, to be used with GrUniqueKey. - * Note: the data written does not encode the length, so care must be taken to ensure - * that the full unique key data is encoded properly. For example, GrStrokeInfo - * fragment can be placed last in the sequence, at fixed index. - */ - void asUniqueKeyFragment(uint32_t*) const; - -private: - // Prevent accidental usage, should use GrStrokeInfo::hasEqualEffect. - bool hasEqualEffect(const SkStrokeRec& other) const; - - void init(const SkPaint& paint) { - const SkPathEffect* pe = paint.getPathEffect(); - this->setDashInfo(pe); - } - - SkPathEffect::DashType fDashType; - SkScalar fDashPhase; - SkAutoSTArray<2, SkScalar> fIntervals; - typedef SkStrokeRec INHERITED; -}; - -#endif -- cgit v1.2.3