aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrStrokeInfo.h
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2016-05-10 09:14:17 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-05-10 09:14:17 -0700
commit6663acff010ce752e4bf778da81fa97448c9db31 (patch)
treeba48f7716f7ef948d9faac90599b8a555c0f51d3 /src/gpu/GrStrokeInfo.h
parent44d427e048b2e290e086dc2c9f9227818388ef17 (diff)
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
Diffstat (limited to 'src/gpu/GrStrokeInfo.h')
-rw-r--r--src/gpu/GrStrokeInfo.h191
1 files changed, 0 insertions, 191 deletions
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