blob: 1dd8c5cb6b7491aed1b57dc054c047e43471ce68 [file] [log] [blame]
Florin Malita9867f612018-12-12 10:54:49 -05001/*
2 * Copyright 2018 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkShaper.h"
Ben Wagner454e5fb2019-02-08 17:46:38 -05009#include "SkSpan.h"
Florin Malita9867f612018-12-12 10:54:49 -050010#include "SkTextBlobPriv.h"
11
Florin Malita950243d2019-01-11 11:08:35 -050012SkShaper::RunHandler::Buffer SkTextBlobBuilderRunHandler::newRunBuffer(const RunInfo&,
13 const SkFont& font,
14 int glyphCount,
Ben Wagner454e5fb2019-02-08 17:46:38 -050015 SkSpan<const char> utf8) {
Florin Malita9867f612018-12-12 10:54:49 -050016 const auto& runBuffer = SkTextBlobBuilderPriv::AllocRunTextPos(&fBuilder, font, glyphCount,
Ben Wagner454e5fb2019-02-08 17:46:38 -050017 utf8.size(), SkString());
18 if (runBuffer.utf8text && fUtf8Text) {
19 memcpy(runBuffer.utf8text, utf8.data(), utf8.size());
20 }
21 fClusters = runBuffer.clusters;
22 fGlyphCount = glyphCount;
23 fClusterOffset = utf8.data() - fUtf8Text;
24
Florin Malita9867f612018-12-12 10:54:49 -050025 return { runBuffer.glyphs,
Mike Reed22451cc2019-01-01 15:40:28 -050026 runBuffer.points(),
Florin Malita9867f612018-12-12 10:54:49 -050027 runBuffer.clusters };
28}
29
Ben Wagner454e5fb2019-02-08 17:46:38 -050030void SkTextBlobBuilderRunHandler::commitRun() {
31 for (int i = 0; i < fGlyphCount; ++i) {
32 fClusters[i] -= fClusterOffset;
33 }
34}
35
Florin Malita950243d2019-01-11 11:08:35 -050036sk_sp<SkTextBlob> SkTextBlobBuilderRunHandler::makeBlob() {
Florin Malita9867f612018-12-12 10:54:49 -050037 return fBuilder.make();
38}