12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "include/core/SkPath.h"
- #include "include/core/SkTextBlob.h"
- #include "include/utils/SkTextUtils.h"
- #include "src/core/SkFontPriv.h"
- void SkTextUtils::Draw(SkCanvas* canvas, const void* text, size_t size, SkTextEncoding encoding,
- SkScalar x, SkScalar y, const SkFont& font, const SkPaint& paint,
- Align align) {
- if (align != kLeft_Align) {
- SkScalar width = font.measureText(text, size, encoding);
- if (align == kCenter_Align) {
- width *= 0.5f;
- }
- x -= width;
- }
- canvas->drawTextBlob(SkTextBlob::MakeFromText(text, size, font, encoding), x, y, paint);
- }
- void SkTextUtils::GetPath(const void* text, size_t length, SkTextEncoding encoding,
- SkScalar x, SkScalar y, const SkFont& font, SkPath* path) {
- SkAutoToGlyphs ag(font, text, length, encoding);
- SkAutoTArray<SkPoint> pos(ag.count());
- font.getPos(ag.glyphs(), ag.count(), pos.get(), {x, y});
- struct Rec {
- SkPath* fDst;
- const SkPoint* fPos;
- } rec = { path, pos.get() };
- path->reset();
- font.getPaths(ag.glyphs(), ag.count(), [](const SkPath* src, const SkMatrix& mx, void* ctx) {
- Rec* rec = (Rec*)ctx;
- if (src) {
- SkMatrix m(mx);
- m.postTranslate(rec->fPos->fX, rec->fPos->fY);
- rec->fDst->addPath(*src, m);
- }
- rec->fPos += 1;
- }, &rec);
- }
|