| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "../export.h" |
| #include "../wrappers.h" |
| #include "third_party/skia/modules/skparagraph/include/ParagraphBuilder.h" |
| |
| using namespace skia::textlayout; |
| using namespace Skwasm; |
| |
| SKWASM_EXPORT ParagraphBuilder* paragraphBuilder_create( |
| ParagraphStyle* style, |
| FlutterFontCollection* collection) { |
| return ParagraphBuilder::make(*style, collection->collection).release(); |
| } |
| |
| SKWASM_EXPORT void paragraphBuilder_dispose(ParagraphBuilder* builder) { |
| delete builder; |
| } |
| |
| SKWASM_EXPORT void paragraphBuilder_addPlaceholder( |
| ParagraphBuilder* builder, |
| SkScalar width, |
| SkScalar height, |
| PlaceholderAlignment alignment, |
| SkScalar baselineOffset, |
| TextBaseline baseline) { |
| builder->addPlaceholder( |
| PlaceholderStyle(width, height, alignment, baseline, baselineOffset)); |
| } |
| |
| SKWASM_EXPORT void paragraphBuilder_addText(ParagraphBuilder* builder, |
| std::u16string* text) { |
| builder->addText(*text); |
| } |
| |
| SKWASM_EXPORT char* paragraphBuilder_getUtf8Text(ParagraphBuilder* builder, |
| uint32_t* outLength) { |
| auto span = builder->getText(); |
| *outLength = span.size(); |
| return span.data(); |
| } |
| |
| SKWASM_EXPORT void paragraphBuilder_pushStyle(ParagraphBuilder* builder, |
| TextStyle* style) { |
| builder->pushStyle(*style); |
| } |
| |
| SKWASM_EXPORT void paragraphBuilder_pop(ParagraphBuilder* builder) { |
| builder->pop(); |
| } |
| |
| SKWASM_EXPORT Paragraph* paragraphBuilder_build(ParagraphBuilder* builder) { |
| return builder->Build().release(); |
| } |
| |
| SKWASM_EXPORT std::vector<SkUnicode::Position>* unicodePositionBuffer_create( |
| size_t length) { |
| return new std::vector<SkUnicode::Position>(length); |
| } |
| |
| SKWASM_EXPORT SkUnicode::Position* unicodePositionBuffer_getDataPointer( |
| std::vector<SkUnicode::Position>* buffer) { |
| return buffer->data(); |
| } |
| |
| SKWASM_EXPORT void unicodePositionBuffer_free( |
| std::vector<SkUnicode::Position>* buffer) { |
| delete buffer; |
| } |
| |
| SKWASM_EXPORT std::vector<SkUnicode::LineBreakBefore>* lineBreakBuffer_create( |
| size_t length) { |
| return new std::vector<SkUnicode::LineBreakBefore>( |
| length, {0, SkUnicode::LineBreakType::kSoftLineBreak}); |
| } |
| |
| SKWASM_EXPORT SkUnicode::LineBreakBefore* lineBreakBuffer_getDataPointer( |
| std::vector<SkUnicode::LineBreakBefore>* buffer) { |
| return buffer->data(); |
| } |
| |
| SKWASM_EXPORT void lineBreakBuffer_free( |
| std::vector<SkUnicode::LineBreakBefore>* buffer) { |
| delete buffer; |
| } |
| |
| SKWASM_EXPORT void paragraphBuilder_setGraphemeBreaksUtf16( |
| ParagraphBuilder* builder, |
| std::vector<SkUnicode::Position>* breaks) { |
| builder->setGraphemeBreaksUtf16(std::move(*breaks)); |
| } |
| |
| SKWASM_EXPORT void paragraphBuilder_setWordBreaksUtf16( |
| ParagraphBuilder* builder, |
| std::vector<SkUnicode::Position>* breaks) { |
| builder->setWordsUtf16(std::move(*breaks)); |
| } |
| |
| SKWASM_EXPORT void paragraphBuilder_setLineBreaksUtf16( |
| ParagraphBuilder* builder, |
| std::vector<SkUnicode::LineBreakBefore>* breaks) { |
| builder->setLineBreaksUtf16(std::move(*breaks)); |
| } |