1/*
2 * Copyright 2016 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#ifndef SkShaper_DEFINED
9#define SkShaper_DEFINED
10
11#include <memory>
12
13#include "SkPoint.h"
14#include "SkTypeface.h"
15
16class SkPaint;
17class SkTextBlobBuilder;
18
19/**
20   Shapes text using HarfBuzz and places the shaped text into a
21   TextBlob.
22
23   If compiled without HarfBuzz, fall back on SkPaint::textToGlyphs.
24 */
25class SkShaper {
26public:
27    SkShaper(sk_sp<SkTypeface> face);
28    ~SkShaper();
29
30    bool good() const;
31    SkPoint shape(SkTextBlobBuilder* dest,
32                   const SkPaint& srcPaint,
33                   const char* utf8text,
34                   size_t textBytes,
35                   bool leftToRight,
36                   SkPoint point,
37                   SkScalar width) const;
38
39private:
40    SkShaper(const SkShaper&) = delete;
41    SkShaper& operator=(const SkShaper&) = delete;
42
43    struct Impl;
44    std::unique_ptr<Impl> fImpl;
45};
46
47#endif  // SkShaper_DEFINED
48