Home | History | Annotate | Download | only in shape
      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 
     16 class SkPaint;
     17 class 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  */
     25 class SkShaper {
     26 public:
     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 
     39 private:
     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