1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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
|