aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkGlyphRun.h
diff options
context:
space:
mode:
authorGravatar Herb Derby <herb@google.com>2018-06-06 17:45:53 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-06-06 17:46:05 +0000
commit41f4f31cd7dadd1123600c38faa8fef6bd7fb29c (patch)
tree1e2d604cd95be419d363e9b56aa5beaf3eb8818e /src/core/SkGlyphRun.h
parent2d7678d61fb68a2c9060a9fad8ebabf4e0053576 (diff)
Reland "Have draw(Text|PosText|PosTextH) use a single entry on the device"
This reverts commit 74b390d6b136a60f1df15ac5ecd19bd8ad5a394b. Reason for revert: reverting to add patch for valgrind Original change's description: > Revert "Have draw(Text|PosText|PosTextH) use a single entry on the device" > > This reverts commit 4225b3220ef4bf50f0d9403f812ea94d50c4ee59. > > Reason for revert: made valgrind unhappy. > > Original change's description: > > Have draw(Text|PosText|PosTextH) use a single entry on the device > > > > Handle the positioning of drawText at the canvas layer. Simplify > > the code by removing similar implementations. > > > > Change-Id: I8b711783435072f560e29fca1dd934fa2e345ed2 > > Reviewed-on: https://skia-review.googlesource.com/127131 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Herb Derby <herb@google.com> > > TBR=jvanverth@google.com,bungeman@google.com,herb@google.com > > Change-Id: I65c9d30ae6ecb1f87e8660e56d8f8ce5daab7551 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://skia-review.googlesource.com/132403 > Reviewed-by: Hal Canary <halcanary@google.com> > Commit-Queue: Hal Canary <halcanary@google.com> TBR=jvanverth@google.com,halcanary@google.com,bungeman@google.com,herb@google.com Change-Id: I9bbb73aac447b51eb8215ac42331759fa4c9fa45 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://skia-review.googlesource.com/132580 Reviewed-by: Herb Derby <herb@google.com> Commit-Queue: Herb Derby <herb@google.com>
Diffstat (limited to 'src/core/SkGlyphRun.h')
-rw-r--r--src/core/SkGlyphRun.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/core/SkGlyphRun.h b/src/core/SkGlyphRun.h
new file mode 100644
index 0000000000..17b4297208
--- /dev/null
+++ b/src/core/SkGlyphRun.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2018 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.
+ */
+
+#ifndef SkGlyphRunInfo_DEFINED
+#define SkGlyphRunInfo_DEFINED
+
+#include <memory>
+#include <vector>
+
+#include "SkDescriptor.h"
+#include "SkMask.h"
+#include "SkPath.h"
+#include "SkPoint.h"
+#include "SkTypes.h"
+
+class SkGlyphRun {
+public:
+ SkGlyphRun() = default;
+ SkGlyphRun(SkGlyphRun&&) = default;
+ static SkGlyphRun MakeFromDrawText(
+ const SkPaint& paint, const void* bytes, size_t byteLength,
+ SkPoint origin);
+ static SkGlyphRun MakeFromDrawPosTextH(
+ const SkPaint& paint, const void* bytes, size_t byteLength,
+ const SkScalar xpos[], SkScalar constY);
+ static SkGlyphRun MakeFromDrawPosText(
+ const SkPaint& paint, const void* bytes, size_t byteLength,
+ const SkPoint pos[]);
+
+ size_t runSize() const { return fRunSize; }
+ uint16_t uniqueSize() const { return fUniqueSize; }
+
+ // copyGlyphIDs is temporary glue to work with the existing system. Don't use with new code.
+ std::unique_ptr<SkGlyphID[]> copyGlyphIDs() const;
+ const SkScalar* getPositions() const {
+ return reinterpret_cast<const SkScalar*>(fPositions.get());
+ }
+
+private:
+ SkGlyphRun(size_t runSize,
+ std::unique_ptr<uint16_t[]>&& denseIndex,
+ std::unique_ptr<SkPoint[]>&& positions,
+ uint16_t uniqueSize,
+ std::unique_ptr<SkGlyphID[]>&& uniqueGlyphIDs);
+
+ std::unique_ptr<uint16_t[]> fDenseIndex;
+ std::unique_ptr<SkPoint[]> fPositions;
+ std::unique_ptr<SkGlyphID[]> fUniqueGlyphs;
+ const size_t fRunSize{0};
+ const uint16_t fUniqueSize{0};
+};
+
+template <typename T>
+class SkSpan {
+public:
+ SkSpan(const T* ptr, size_t size) : fPtr{ptr}, fSize{size} {}
+ SkSpan(const std::vector<T>& v) : fPtr{v.data()}, fSize{v.size()} {}
+ const T& operator [] (ptrdiff_t i) const { return fPtr[i]; }
+ const T* begin() const { return fPtr; }
+ const T* end() const { return fPtr + fSize; }
+ ptrdiff_t size() const { return fSize; }
+
+private:
+ const T* fPtr;
+ size_t fSize;
+};
+
+#endif // SkGlyphRunInfo_DEFINED