summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/src/gpu/GrStrokeInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/src/gpu/GrStrokeInfo.h')
-rw-r--r--chromium/third_party/skia/src/gpu/GrStrokeInfo.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/chromium/third_party/skia/src/gpu/GrStrokeInfo.h b/chromium/third_party/skia/src/gpu/GrStrokeInfo.h
new file mode 100644
index 00000000000..b9ba5eada1a
--- /dev/null
+++ b/chromium/third_party/skia/src/gpu/GrStrokeInfo.h
@@ -0,0 +1,99 @@
+/*
+ * 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 "SkStrokeRec.h"
+#include "SkPathEffect.h"
+
+/*
+ * GrStrokeInfo encapsulates the data objects that hold all the pertinent infomation
+ * regarding the stroke. The two objects are SkStrokeRec which holds information on fill style,
+ * width, miter, cap, and join. The second object is DashInfo. This holds information about the
+ * dash like intervals, count, and phase.
+ */
+class GrStrokeInfo {
+public:
+ GrStrokeInfo(SkStrokeRec::InitStyle style) :
+ fStroke(style), fDashType(SkPathEffect::kNone_DashType) {}
+
+ GrStrokeInfo(const GrStrokeInfo& src, bool includeDash = true) : fStroke(src.fStroke) {
+ if (includeDash) {
+ fDashInfo = src.fDashInfo;
+ fDashType = src.fDashType;
+ fIntervals.reset(src.dashCount());
+ memcpy(fIntervals.get(), src.fIntervals.get(), src.dashCount() * sizeof(SkScalar));
+ } else {
+ fDashType = SkPathEffect::kNone_DashType;
+ }
+ }
+
+ GrStrokeInfo(const SkPaint& paint, SkPaint::Style styleOverride) :
+ fStroke(paint, styleOverride), fDashType(SkPathEffect::kNone_DashType) {
+ this->init(paint);
+ }
+
+
+ explicit GrStrokeInfo(const SkPaint& paint) :
+ fStroke(paint), fDashType(SkPathEffect::kNone_DashType) {
+ this->init(paint);
+ }
+
+ const SkStrokeRec& getStrokeRec() const { return fStroke; }
+
+ SkStrokeRec* getStrokeRecPtr() { return &fStroke; }
+
+ void setFillStyle() { fStroke.setFillStyle(); }
+
+ /*
+ * This functions takes in a patheffect and fills in fDashInfo with the various 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 retruns false.
+ */
+ bool setDashInfo(const SkPathEffect* pe) {
+ if (NULL != pe && !fStroke.isFillStyle()) {
+ fDashInfo.fIntervals = NULL;
+ fDashType = pe->asADash(&fDashInfo);
+ if (SkPathEffect::kDash_DashType == fDashType) {
+ fIntervals.reset(fDashInfo.fCount);
+ fDashInfo.fIntervals = fIntervals.get();
+ pe->asADash(&fDashInfo);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool isDashed() const {
+ return (!fStroke.isFillStyle() && SkPathEffect::kDash_DashType == fDashType);
+ }
+
+ int32_t dashCount() const {
+ return fDashInfo.fCount;
+ }
+
+ void removeDash() {
+ fDashType = SkPathEffect::kNone_DashType;
+ }
+
+ const SkPathEffect::DashInfo& getDashInfo() const { return fDashInfo; }
+
+private:
+
+ void init(const SkPaint& paint) {
+ const SkPathEffect* pe = paint.getPathEffect();
+ this->setDashInfo(pe);
+ }
+
+ SkStrokeRec fStroke;
+ SkPathEffect::DashType fDashType;
+ SkPathEffect::DashInfo fDashInfo;
+ SkAutoSTArray<2, SkScalar> fIntervals;
+};
+
+#endif