diff options
author | Herb Derby <herb@google.com> | 2018-06-06 17:45:53 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-06 17:46:05 +0000 |
commit | 41f4f31cd7dadd1123600c38faa8fef6bd7fb29c (patch) | |
tree | 1e2d604cd95be419d363e9b56aa5beaf3eb8818e /src/core/SkGlyphRun.h | |
parent | 2d7678d61fb68a2c9060a9fad8ebabf4e0053576 (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.h | 72 |
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 |