From 756341be6e634ec439cc35dca72d2dba157a01f0 Mon Sep 17 00:00:00 2001 From: Ian McKellar Date: Fri, 16 Jun 2017 15:15:48 -0700 Subject: [PATCH] Revert "Initial integration of libtxt with Flutter alongside Blink." (flutter/engine#3785) * Revert "Enable line join styles and miter limit. (#3777)" This reverts commit cafd4b93a06b6d327f1bc59e296bf2c618eb34e4. * Revert "Revert "Update switches to use StringView." (#3784)" This reverts commit 5ffa5ef3a6b2c8689c7d12cd67b6823ba25783a5. * Revert "Initial integration of libtxt with Flutter alongside Blink. (#3771)" This reverts commit b4a9f9c6d5008f677400826dfa3a0ab30de3db23. --- DEPS | 3 - engine/src/flutter/BUILD.gn | 3 - engine/src/flutter/common/settings.h | 1 - engine/src/flutter/lib/ui/BUILD.gn | 8 - engine/src/flutter/lib/ui/text/paragraph.cc | 132 ++++++-- engine/src/flutter/lib/ui/text/paragraph.h | 18 +- .../flutter/lib/ui/text/paragraph_builder.cc | 306 ++++++------------ .../flutter/lib/ui/text/paragraph_builder.h | 7 - .../src/flutter/lib/ui/text/paragraph_impl.cc | 7 - .../src/flutter/lib/ui/text/paragraph_impl.h | 45 --- .../lib/ui/text/paragraph_impl_blink.cc | 180 ----------- .../lib/ui/text/paragraph_impl_blink.h | 49 --- .../flutter/lib/ui/text/paragraph_impl_txt.cc | 75 ----- .../flutter/lib/ui/text/paragraph_impl_txt.h | 44 --- engine/src/flutter/shell/common/shell.cc | 3 - engine/src/flutter/shell/common/switches.h | 3 - .../flutter/app/FlutterActivityDelegate.java | 3 - .../flutter/sky/packages/sky_engine/LICENSE | 1 - 18 files changed, 210 insertions(+), 678 deletions(-) delete mode 100644 engine/src/flutter/lib/ui/text/paragraph_impl.cc delete mode 100644 engine/src/flutter/lib/ui/text/paragraph_impl.h delete mode 100644 engine/src/flutter/lib/ui/text/paragraph_impl_blink.cc delete mode 100644 engine/src/flutter/lib/ui/text/paragraph_impl_blink.h delete mode 100644 engine/src/flutter/lib/ui/text/paragraph_impl_txt.cc delete mode 100644 engine/src/flutter/lib/ui/text/paragraph_impl_txt.h diff --git a/DEPS b/DEPS index e76c0f0459..2e0a1ae93c 100644 --- a/DEPS +++ b/DEPS @@ -71,9 +71,6 @@ deps = { 'src/lib/zip': Var('fuchsia_git') + '/zip' + '@' + '92dc87ca645fe8e9f5151ef6dac86d8311a7222f', - 'src/lib/txt': - Var('fuchsia_git') + '/txt' + '@' + 'b44e28c2fd75d7d4b9dcc862bb2c01a090bb53e1', - 'src/third_party/gtest': Var('fuchsia_git') + '/third_party/gtest' + '@' + 'c00f82917331efbbd27124b537e4ccc915a02b72', diff --git a/engine/src/flutter/BUILD.gn b/engine/src/flutter/BUILD.gn index 9e997b05eb..936c8cb407 100644 --- a/engine/src/flutter/BUILD.gn +++ b/engine/src/flutter/BUILD.gn @@ -8,7 +8,6 @@ group("flutter") { deps = [ "//flutter/lib/snapshot:generate_snapshot_bin", "//flutter/sky", - "//lib/txt", ] if (is_fuchsia) { @@ -31,8 +30,6 @@ group("flutter") { "//flutter/sky/engine/wtf:wtf_unittests", "//flutter/synchronization:synchronization_unittests", "//lib/ftl:ftl_unittests", - "//lib/txt/examples:txt_example($host_toolchain)", - "//lib/txt/tests($host_toolchain)", # txt_unittests ] } } diff --git a/engine/src/flutter/common/settings.h b/engine/src/flutter/common/settings.h index 0846264f72..8fd9de59d9 100644 --- a/engine/src/flutter/common/settings.h +++ b/engine/src/flutter/common/settings.h @@ -27,7 +27,6 @@ struct Settings { bool use_test_fonts = false; bool dart_non_checked_mode = false; bool enable_software_rendering = false; - bool using_blink = true; std::string aot_snapshot_path; std::string aot_vm_snapshot_data_filename; std::string aot_vm_snapshot_instr_filename; diff --git a/engine/src/flutter/lib/ui/BUILD.gn b/engine/src/flutter/lib/ui/BUILD.gn index 517dd70cfd..fd02dab359 100644 --- a/engine/src/flutter/lib/ui/BUILD.gn +++ b/engine/src/flutter/lib/ui/BUILD.gn @@ -3,7 +3,6 @@ # found in the LICENSE file. source_set("ui") { - sources = [ "compositing/scene.cc", "compositing/scene.h", @@ -56,12 +55,6 @@ source_set("ui") { "text/paragraph.h", "text/paragraph_builder.cc", "text/paragraph_builder.h", - "text/paragraph_impl.cc", - "text/paragraph_impl.h", - "text/paragraph_impl_blink.cc", - "text/paragraph_impl_blink.h", - "text/paragraph_impl_txt.cc", - "text/paragraph_impl_txt.h", "text/text_box.cc", "text/text_box.h", "ui_dart_state.cc", @@ -90,6 +83,5 @@ source_set("ui") { "//lib/tonic", "//third_party/skia", "//third_party/skia:gpu", - "//lib/txt", ] } diff --git a/engine/src/flutter/lib/ui/text/paragraph.cc b/engine/src/flutter/lib/ui/text/paragraph.cc index c7fd4e4222..9f29d3d089 100644 --- a/engine/src/flutter/lib/ui/text/paragraph.cc +++ b/engine/src/flutter/lib/ui/text/paragraph.cc @@ -4,16 +4,14 @@ #include "flutter/lib/ui/text/paragraph.h" -#include "flutter/common/settings.h" #include "flutter/common/threads.h" #include "flutter/sky/engine/core/rendering/PaintInfo.h" -#include "flutter/sky/engine/core/rendering/RenderParagraph.h" #include "flutter/sky/engine/core/rendering/RenderText.h" +#include "flutter/sky/engine/core/rendering/RenderParagraph.h" #include "flutter/sky/engine/core/rendering/style/RenderStyle.h" #include "flutter/sky/engine/platform/fonts/FontCache.h" #include "flutter/sky/engine/platform/graphics/GraphicsContext.h" #include "flutter/sky/engine/platform/text/TextBoundaries.h" -#include "flutter/sky/engine/wtf/PassOwnPtr.h" #include "lib/ftl/tasks/task_runner.h" #include "lib/tonic/converter/dart_converter.h" #include "lib/tonic/dart_args.h" @@ -33,7 +31,7 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, Paragraph); V(Paragraph, maxIntrinsicWidth) \ V(Paragraph, alphabeticBaseline) \ V(Paragraph, ideographicBaseline) \ - V(Paragraph, didExceedMaxLines) \ + V(Paragraph, didExceedMaxLines) \ V(Paragraph, layout) \ V(Paragraph, paint) \ V(Paragraph, getWordBoundary) \ @@ -43,65 +41,155 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, Paragraph); DART_BIND_ALL(Paragraph, FOR_EACH_BINDING) Paragraph::Paragraph(PassOwnPtr renderView) - : m_paragraphImpl(std::make_unique(renderView)) {} - -Paragraph::Paragraph(std::unique_ptr paragraph) - : m_paragraphImpl( - std::make_unique(std::move(paragraph))) {} + : m_renderView(renderView) {} Paragraph::~Paragraph() { if (m_renderView) { RenderView* renderView = m_renderView.leakPtr(); - Threads::UI()->PostTask([renderView]() { renderView->destroy(); }); + Threads::UI()->PostTask( + [renderView]() { renderView->destroy(); }); } } double Paragraph::width() { - return m_paragraphImpl->width(); + return firstChildBox()->width(); } double Paragraph::height() { - return m_paragraphImpl->height(); + return firstChildBox()->height(); } double Paragraph::minIntrinsicWidth() { - return m_paragraphImpl->minIntrinsicWidth(); + return firstChildBox()->minPreferredLogicalWidth(); } double Paragraph::maxIntrinsicWidth() { - return m_paragraphImpl->maxIntrinsicWidth(); + return firstChildBox()->maxPreferredLogicalWidth(); } double Paragraph::alphabeticBaseline() { - return m_paragraphImpl->alphabeticBaseline(); + return firstChildBox()->firstLineBoxBaseline( + FontBaselineOrAuto(AlphabeticBaseline)); } double Paragraph::ideographicBaseline() { - return m_paragraphImpl->ideographicBaseline(); + return firstChildBox()->firstLineBoxBaseline( + FontBaselineOrAuto(IdeographicBaseline)); } bool Paragraph::didExceedMaxLines() { - return m_paragraphImpl->didExceedMaxLines(); + RenderBox* box = firstChildBox(); + ASSERT(box->isRenderParagraph()); + RenderParagraph* paragraph = static_cast(box); + return paragraph->didExceedMaxLines(); } void Paragraph::layout(double width) { - m_paragraphImpl->layout(width); + FontCachePurgePreventer fontCachePurgePreventer; + + int maxWidth = LayoutUnit(width); // Handles infinity properly. + m_renderView->setFrameViewSize(IntSize(maxWidth, intMaxForLayoutUnit)); + m_renderView->layout(); } void Paragraph::paint(Canvas* canvas, double x, double y) { - m_paragraphImpl->paint(canvas, x, y); + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) + return; + + FontCachePurgePreventer fontCachePurgePreventer; + + // Very simplified painting to allow painting an arbitrary (layer-less) + // subtree. + RenderBox* box = firstChildBox(); + skCanvas->translate(x, y); + + GraphicsContext context(skCanvas); + Vector layers; + LayoutRect bounds = box->absoluteBoundingBoxRect(); + FTL_DCHECK(bounds.x() == 0 && bounds.y() == 0); + PaintInfo paintInfo(&context, enclosingIntRect(bounds), box); + box->paint(paintInfo, LayoutPoint(), layers); + // Note we're ignoring any layers encountered. + // TODO(abarth): Remove the concept of RenderLayers. + + skCanvas->translate(-x, -y); } std::vector Paragraph::getRectsForRange(unsigned start, unsigned end) { - return m_paragraphImpl->getRectsForRange(start, end); + if (end <= start || start == end) + return std::vector(); + + unsigned offset = 0; + std::vector boxes; + for (RenderObject* object = m_renderView.get(); object; + object = object->nextInPreOrder()) { + if (!object->isText()) + continue; + RenderText* text = toRenderText(object); + unsigned length = text->textLength(); + if (offset + length > start) { + unsigned startOffset = offset > start ? 0 : start - offset; + unsigned endOffset = end - offset; + text->appendAbsoluteTextBoxesForRange(boxes, startOffset, endOffset); + } + offset += length; + if (offset >= end) + break; + } + + return boxes; +} + +int Paragraph::absoluteOffsetForPosition(const PositionWithAffinity& position) { + FTL_DCHECK(position.renderer()); + unsigned offset = 0; + for (RenderObject* object = m_renderView.get(); object; + object = object->nextInPreOrder()) { + if (object == position.renderer()) + return offset + position.offset(); + if (object->isText()) { + RenderText* text = toRenderText(object); + offset += text->textLength(); + } + } + FTL_DCHECK(false); + return 0; } Dart_Handle Paragraph::getPositionForOffset(double dx, double dy) { - return m_paragraphImpl->getPositionForOffset(dx, dy); + LayoutPoint point(dx, dy); + PositionWithAffinity position = m_renderView->positionForPoint(point); + Dart_Handle result = Dart_NewList(2); + Dart_ListSetAt(result, 0, ToDart(absoluteOffsetForPosition(position))); + Dart_ListSetAt(result, 1, ToDart(static_cast(position.affinity()))); + return result; } Dart_Handle Paragraph::getWordBoundary(unsigned offset) { - return m_paragraphImpl->getWordBoundary(offset); + String text; + int start = 0, end = 0; + + for (RenderObject* object = m_renderView.get(); object; + object = object->nextInPreOrder()) { + if (!object->isText()) + continue; + RenderText* renderText = toRenderText(object); + text.append(renderText->text()); + } + + TextBreakIterator* it = wordBreakIterator(text, 0, text.length()); + if (it) { + end = it->following(offset); + if (end < 0) + end = it->last(); + start = it->previous(); + } + + Dart_Handle result = Dart_NewList(2); + Dart_ListSetAt(result, 0, ToDart(start)); + Dart_ListSetAt(result, 1, ToDart(end)); + return result; } } // namespace blink diff --git a/engine/src/flutter/lib/ui/text/paragraph.h b/engine/src/flutter/lib/ui/text/paragraph.h index 0e8525b0ab..e75025b07a 100644 --- a/engine/src/flutter/lib/ui/text/paragraph.h +++ b/engine/src/flutter/lib/ui/text/paragraph.h @@ -6,14 +6,9 @@ #define FLUTTER_LIB_UI_TEXT_PARAGRAPH_H_ #include "flutter/lib/ui/painting/canvas.h" -#include "flutter/lib/ui/text/paragraph_impl.h" -#include "flutter/lib/ui/text/paragraph_impl_blink.h" -#include "flutter/lib/ui/text/paragraph_impl_txt.h" #include "flutter/lib/ui/text/text_box.h" #include "flutter/sky/engine/core/rendering/RenderView.h" -#include "flutter/sky/engine/wtf/PassOwnPtr.h" #include "lib/tonic/dart_wrappable.h" -#include "lib/txt/src/paragraph.h" namespace tonic { class DartLibraryNatives; @@ -27,15 +22,10 @@ class Paragraph : public ftl::RefCountedThreadSafe, FRIEND_MAKE_REF_COUNTED(Paragraph); public: - static ftl::RefPtr Create(PassOwnPtr renderView) { + static ftl::RefPtr create(PassOwnPtr renderView) { return ftl::MakeRefCounted(renderView); } - static ftl::RefPtr Create( - std::unique_ptr paragraph) { - return ftl::MakeRefCounted(std::move(paragraph)); - } - ~Paragraph() override; double width(); @@ -58,13 +48,11 @@ class Paragraph : public ftl::RefCountedThreadSafe, static void RegisterNatives(tonic::DartLibraryNatives* natives); private: - std::unique_ptr m_paragraphImpl; - RenderBox* firstChildBox() const { return m_renderView->firstChildBox(); } - explicit Paragraph(PassOwnPtr renderView); + int absoluteOffsetForPosition(const PositionWithAffinity& position); - explicit Paragraph(std::unique_ptr paragraph); + explicit Paragraph(PassOwnPtr renderView); OwnPtr m_renderView; }; diff --git a/engine/src/flutter/lib/ui/text/paragraph_builder.cc b/engine/src/flutter/lib/ui/text/paragraph_builder.cc index a65762e180..f25331869b 100644 --- a/engine/src/flutter/lib/ui/text/paragraph_builder.cc +++ b/engine/src/flutter/lib/ui/text/paragraph_builder.cc @@ -4,7 +4,6 @@ #include "flutter/lib/ui/text/paragraph_builder.h" -#include "flutter/common/settings.h" #include "flutter/common/threads.h" #include "flutter/lib/ui/ui_dart_state.h" #include "flutter/sky/engine/core/rendering/RenderInline.h" @@ -17,12 +16,6 @@ #include "lib/tonic/dart_args.h" #include "lib/tonic/dart_binding_macros.h" #include "lib/tonic/dart_library_natives.h" -#include "lib/txt/src/font_style.h" -#include "lib/txt/src/font_weight.h" -#include "lib/txt/src/paragraph_style.h" -#include "lib/txt/src/text_align.h" -#include "lib/txt/src/text_decoration.h" -#include "lib/txt/src/text_style.h" namespace blink { namespace { @@ -102,12 +95,13 @@ void createFontForDocument(RenderStyle* style) { style->font().update(UIDartState::Current()->font_selector()); } -PassRefPtr decodeParagraphStyle(RenderStyle* parentStyle, - tonic::Int32List& encoded, - const std::string& fontFamily, - double fontSize, - double lineHeight, - const std::string& ellipsis) { +PassRefPtr decodeParagraphStyle( + RenderStyle* parentStyle, + tonic::Int32List& encoded, + const std::string& fontFamily, + double fontSize, + double lineHeight, + const std::string& ellipsis) { FTL_DCHECK(encoded.num_elements() == 5); RefPtr style = RenderStyle::create(); @@ -193,8 +187,8 @@ ftl::RefPtr ParagraphBuilder::create( double fontSize, double lineHeight, const std::string& ellipsis) { - return ftl::MakeRefCounted(encoded, fontFamily, fontSize, - lineHeight, ellipsis); + return ftl::MakeRefCounted( + encoded, fontFamily, fontSize, lineHeight, ellipsis); } ParagraphBuilder::ParagraphBuilder(tonic::Int32List& encoded, @@ -202,61 +196,24 @@ ParagraphBuilder::ParagraphBuilder(tonic::Int32List& encoded, double fontSize, double lineHeight, const std::string& ellipsis) { - if (!Settings::Get().using_blink) { - int32_t mask = encoded[0]; - txt::ParagraphStyle style; - if (mask & psTextAlignMask) - style.text_align = txt::TextAlign(encoded[psTextAlignIndex]); + createRenderView(); - if (mask & (psFontWeightMask | psFontStyleMask | psFontFamilyMask | - psFontSizeMask)) { - if (mask & psFontWeightMask) - style.font_weight = - static_cast(encoded[psFontWeightIndex]); + RefPtr paragraphStyle = decodeParagraphStyle( + m_renderView->style(), encoded, fontFamily, fontSize, lineHeight, ellipsis); + encoded.Release(); - if (mask & psFontStyleMask) - style.font_style = - static_cast(encoded[psFontStyleIndex]); + m_renderParagraph = new RenderParagraph(); + m_renderParagraph->setStyle(paragraphStyle.release()); - if (mask & psFontFamilyMask) - style.font_family = fontFamily; - - if (mask & psFontSizeMask) - style.font_size = fontSize; - } - - if (mask & psLineHeightMask) - style.line_height = lineHeight; - - if (mask & psMaxLinesMask) - style.max_lines = encoded[psMaxLinesIndex]; - - if (mask & psEllipsisMask) - style.ellipsis = ellipsis; - - m_paragraphBuilder.SetParagraphStyle(style); - } else { - // Blink version. - createRenderView(); - - RefPtr paragraphStyle = - decodeParagraphStyle(m_renderView->style(), encoded, fontFamily, - fontSize, lineHeight, ellipsis); - encoded.Release(); - - m_renderParagraph = new RenderParagraph(); - m_renderParagraph->setStyle(paragraphStyle.release()); - - m_currentRenderObject = m_renderParagraph; - m_renderView->addChild(m_currentRenderObject); - } - -} // namespace blink + m_currentRenderObject = m_renderParagraph; + m_renderView->addChild(m_currentRenderObject); +} ParagraphBuilder::~ParagraphBuilder() { if (m_renderView) { RenderView* renderView = m_renderView.leakPtr(); - Threads::UI()->PostTask([renderView]() { renderView->destroy(); }); + Threads::UI()->PostTask( + [renderView]() { renderView->destroy(); }); } } @@ -267,167 +224,98 @@ void ParagraphBuilder::pushStyle(tonic::Int32List& encoded, double wordSpacing, double height) { FTL_DCHECK(encoded.num_elements() == 8); + RefPtr style = RenderStyle::create(); + style->inheritFrom(m_currentRenderObject->style()); int32_t mask = encoded[0]; - if (!Settings::Get().using_blink) { - txt::TextStyle tstyle; + if (mask & tsColorMask) + style->setColor(getColorFromARGB(encoded[tsColorIndex])); - if (mask & tsColorMask) - tstyle.color = encoded[tsColorIndex]; - - if (mask & tsTextDecorationMask) { - tstyle.decoration = - static_cast(encoded[tsTextDecorationIndex]); - } - - if (mask & tsTextDecorationColorMask) - tstyle.decoration_color = encoded[tsTextDecorationColorIndex]; - - if (mask & tsTextDecorationStyleMask) - tstyle.decoration_style = static_cast( - encoded[tsTextDecorationStyleIndex]); - - if (mask & tsTextBaselineMask) { - // TODO(abarth): Implement TextBaseline. The CSS version of this - // property wasn't wired up either. - } - - if (mask & (tsFontWeightMask | tsFontStyleMask | tsFontFamilyMask | - tsFontSizeMask | tsLetterSpacingMask | tsWordSpacingMask)) { - if (mask & tsFontWeightMask) - tstyle.font_weight = - static_cast(encoded[tsFontWeightIndex]); - - if (mask & tsFontStyleMask) - tstyle.font_style = - static_cast(encoded[tsFontStyleIndex]); - - if (mask & tsFontFamilyMask) - tstyle.font_family = fontFamily; - - if (mask & tsFontSizeMask) - tstyle.font_size = fontSize; - - if (mask & tsLetterSpacingMask) - tstyle.letter_spacing = letterSpacing; - - if (mask & tsWordSpacingMask) - tstyle.word_spacing = wordSpacing; - } - - if (mask & tsHeightMask) { - tstyle.height = height; - } - - m_paragraphBuilder.PushStyle(tstyle); - } else { - // Blink Version. - RefPtr style = RenderStyle::create(); - style->inheritFrom(m_currentRenderObject->style()); - - if (mask & tsColorMask) - style->setColor(getColorFromARGB(encoded[tsColorIndex])); - - if (mask & tsTextDecorationMask) { - style->setTextDecoration( - static_cast(encoded[tsTextDecorationIndex])); - style->applyTextDecorations(); - } - - if (mask & tsTextDecorationColorMask) - style->setTextDecorationColor( - StyleColor(getColorFromARGB(encoded[tsTextDecorationColorIndex]))); - - if (mask & tsTextDecorationStyleMask) - style->setTextDecorationStyle(static_cast( - encoded[tsTextDecorationStyleIndex])); - - if (mask & tsTextBaselineMask) { - // TODO(abarth): Implement TextBaseline. The CSS version of this - // property wasn't wired up either. - } - - if (mask & (tsFontWeightMask | tsFontStyleMask | tsFontFamilyMask | - tsFontSizeMask | tsLetterSpacingMask | tsWordSpacingMask)) { - FontDescription fontDescription = style->fontDescription(); - - if (mask & tsFontWeightMask) - fontDescription.setWeight( - static_cast(encoded[tsFontWeightIndex])); - - if (mask & tsFontStyleMask) - fontDescription.setStyle( - static_cast(encoded[tsFontStyleIndex])); - - if (mask & tsFontFamilyMask) { - FontFamily family; - family.setFamily(String::fromUTF8(fontFamily)); - fontDescription.setFamily(family); - } - - if (mask & tsFontSizeMask) { - fontDescription.setSpecifiedSize(fontSize); - fontDescription.setIsAbsoluteSize(true); - fontDescription.setComputedSize( - getComputedSizeFromSpecifiedSize(fontSize)); - } - - if (mask & tsLetterSpacingMask) - fontDescription.setLetterSpacing(letterSpacing); - - if (mask & tsWordSpacingMask) - fontDescription.setWordSpacing(wordSpacing); - - style->setFontDescription(fontDescription); - style->font().update(UIDartState::Current()->font_selector()); - } - - if (mask & tsHeightMask) { - style->setLineHeight(Length(height * 100.0, Percent)); - } - - encoded.Release(); - - RenderObject* span = new RenderInline(); - span->setStyle(style.release()); - m_currentRenderObject->addChild(span); - m_currentRenderObject = span; + if (mask & tsTextDecorationMask) { + style->setTextDecoration( + static_cast(encoded[tsTextDecorationIndex])); + style->applyTextDecorations(); } + + if (mask & tsTextDecorationColorMask) + style->setTextDecorationColor( + StyleColor(getColorFromARGB(encoded[tsTextDecorationColorIndex]))); + + if (mask & tsTextDecorationStyleMask) + style->setTextDecorationStyle( + static_cast(encoded[tsTextDecorationStyleIndex])); + + if (mask & tsTextBaselineMask) { + // TODO(abarth): Implement TextBaseline. The CSS version of this + // property wasn't wired up either. + } + + if (mask & (tsFontWeightMask | tsFontStyleMask | tsFontFamilyMask | + tsFontSizeMask | tsLetterSpacingMask | tsWordSpacingMask)) { + FontDescription fontDescription = style->fontDescription(); + + if (mask & tsFontWeightMask) + fontDescription.setWeight( + static_cast(encoded[tsFontWeightIndex])); + + if (mask & tsFontStyleMask) + fontDescription.setStyle( + static_cast(encoded[tsFontStyleIndex])); + + if (mask & tsFontFamilyMask) { + FontFamily family; + family.setFamily(String::fromUTF8(fontFamily)); + fontDescription.setFamily(family); + } + + if (mask & tsFontSizeMask) { + fontDescription.setSpecifiedSize(fontSize); + fontDescription.setIsAbsoluteSize(true); + fontDescription.setComputedSize( + getComputedSizeFromSpecifiedSize(fontSize)); + } + + if (mask & tsLetterSpacingMask) + fontDescription.setLetterSpacing(letterSpacing); + + if (mask & tsWordSpacingMask) + fontDescription.setWordSpacing(wordSpacing); + + style->setFontDescription(fontDescription); + style->font().update(UIDartState::Current()->font_selector()); + } + + if (mask & tsHeightMask) { + style->setLineHeight(Length(height * 100.0, Percent)); + } + + encoded.Release(); + + RenderObject* span = new RenderInline(); + span->setStyle(style.release()); + m_currentRenderObject->addChild(span); + m_currentRenderObject = span; } void ParagraphBuilder::pop() { - if (!Settings::Get().using_blink) { - m_paragraphBuilder.Pop(); - } else { - // Blink Version. - if (m_currentRenderObject) - m_currentRenderObject = m_currentRenderObject->parent(); - } + if (m_currentRenderObject) + m_currentRenderObject = m_currentRenderObject->parent(); } void ParagraphBuilder::addText(const std::string& text) { - if (!Settings::Get().using_blink) { - m_paragraphBuilder.AddText(text); - } else { - // Blink Version. - if (!m_currentRenderObject) - return; - RenderText* renderText = new RenderText(String::fromUTF8(text).impl()); - RefPtr style = RenderStyle::create(); - style->inheritFrom(m_currentRenderObject->style()); - renderText->setStyle(style.release()); - m_currentRenderObject->addChild(renderText); - } + if (!m_currentRenderObject) + return; + RenderText* renderText = new RenderText(String::fromUTF8(text).impl()); + RefPtr style = RenderStyle::create(); + style->inheritFrom(m_currentRenderObject->style()); + renderText->setStyle(style.release()); + m_currentRenderObject->addChild(renderText); } ftl::RefPtr ParagraphBuilder::build() { m_currentRenderObject = nullptr; - if (!Settings::Get().using_blink) { - return Paragraph::Create(m_paragraphBuilder.Build()); - } else { - return Paragraph::Create(m_renderView.release()); - } + return Paragraph::create(m_renderView.release()); } void ParagraphBuilder::createRenderView() { diff --git a/engine/src/flutter/lib/ui/text/paragraph_builder.h b/engine/src/flutter/lib/ui/text/paragraph_builder.h index 6d6cba0334..7a156f23c2 100644 --- a/engine/src/flutter/lib/ui/text/paragraph_builder.h +++ b/engine/src/flutter/lib/ui/text/paragraph_builder.h @@ -6,11 +6,8 @@ #define FLUTTER_LIB_UI_TEXT_PARAGRAPH_BUILDER_H_ #include "flutter/lib/ui/text/paragraph.h" -#include "flutter/sky/engine/core/rendering/RenderObject.h" -#include "flutter/sky/engine/wtf/OwnPtr.h" #include "lib/tonic/dart_wrappable.h" #include "lib/tonic/typed_data/int32_list.h" -#include "lib/txt/src/paragraph_builder.h" namespace tonic { class DartLibraryNatives; @@ -18,8 +15,6 @@ class DartLibraryNatives; namespace blink { -class Paragraph; - class ParagraphBuilder : public ftl::RefCountedThreadSafe, public tonic::DartWrappable { DEFINE_WRAPPERTYPEINFO(); @@ -40,7 +35,6 @@ class ParagraphBuilder : public ftl::RefCountedThreadSafe, double letterSpacing, double wordSpacing, double height); - void pop(); void addText(const std::string& text); @@ -61,7 +55,6 @@ class ParagraphBuilder : public ftl::RefCountedThreadSafe, OwnPtr m_renderView; RenderObject* m_renderParagraph; RenderObject* m_currentRenderObject; - txt::ParagraphBuilder m_paragraphBuilder; }; } // namespace blink diff --git a/engine/src/flutter/lib/ui/text/paragraph_impl.cc b/engine/src/flutter/lib/ui/text/paragraph_impl.cc deleted file mode 100644 index 65483a8b68..0000000000 --- a/engine/src/flutter/lib/ui/text/paragraph_impl.cc +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2015 The Chromium 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 "flutter/lib/ui/text/paragraph_impl.h" - -namespace blink {} // namespace blink diff --git a/engine/src/flutter/lib/ui/text/paragraph_impl.h b/engine/src/flutter/lib/ui/text/paragraph_impl.h deleted file mode 100644 index f8e1ef09d4..0000000000 --- a/engine/src/flutter/lib/ui/text/paragraph_impl.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_H_ -#define FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_H_ - -#include "flutter/lib/ui/painting/canvas.h" -#include "flutter/lib/ui/text/text_box.h" - -namespace blink { - -class ParagraphImpl { - public: - virtual ~ParagraphImpl(){}; - - virtual double width() = 0; - - virtual double height() = 0; - - virtual double minIntrinsicWidth() = 0; - - virtual double maxIntrinsicWidth() = 0; - - virtual double alphabeticBaseline() = 0; - - virtual double ideographicBaseline() = 0; - - virtual bool didExceedMaxLines() = 0; - - virtual void layout(double width) = 0; - - virtual void paint(Canvas* canvas, double x, double y) = 0; - - virtual std::vector getRectsForRange(unsigned start, - unsigned end) = 0; - - virtual Dart_Handle getPositionForOffset(double dx, double dy) = 0; - - virtual Dart_Handle getWordBoundary(unsigned offset) = 0; -}; - -} // namespace blink - -#endif // FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_H_ diff --git a/engine/src/flutter/lib/ui/text/paragraph_impl_blink.cc b/engine/src/flutter/lib/ui/text/paragraph_impl_blink.cc deleted file mode 100644 index 55b5f05b7f..0000000000 --- a/engine/src/flutter/lib/ui/text/paragraph_impl_blink.cc +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2015 The Chromium 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 "flutter/lib/ui/text/paragraph_impl_blink.h" - -#include "flutter/common/threads.h" -#include "flutter/lib/ui/text/paragraph.h" -#include "flutter/lib/ui/text/paragraph_impl.h" -#include "flutter/sky/engine/core/rendering/PaintInfo.h" -#include "flutter/sky/engine/core/rendering/RenderParagraph.h" -#include "flutter/sky/engine/core/rendering/RenderText.h" -#include "flutter/sky/engine/core/rendering/style/RenderStyle.h" -#include "flutter/sky/engine/platform/fonts/FontCache.h" -#include "flutter/sky/engine/platform/graphics/GraphicsContext.h" -#include "flutter/sky/engine/platform/text/TextBoundaries.h" -#include "lib/ftl/tasks/task_runner.h" -#include "lib/tonic/converter/dart_converter.h" -#include "lib/tonic/dart_args.h" -#include "lib/tonic/dart_binding_macros.h" -#include "lib/tonic/dart_library_natives.h" - -using tonic::ToDart; - -namespace blink { - -ParagraphImplBlink::ParagraphImplBlink(PassOwnPtr renderView) - : m_renderView(renderView) {} - -ParagraphImplBlink::~ParagraphImplBlink() { - if (m_renderView) { - RenderView* renderView = m_renderView.leakPtr(); - Threads::UI()->PostTask([renderView]() { renderView->destroy(); }); - } -} - -double ParagraphImplBlink::width() { - return firstChildBox()->width(); -} - -double ParagraphImplBlink::height() { - return firstChildBox()->height(); -} - -double ParagraphImplBlink::minIntrinsicWidth() { - return firstChildBox()->minPreferredLogicalWidth(); -} - -double ParagraphImplBlink::maxIntrinsicWidth() { - return firstChildBox()->maxPreferredLogicalWidth(); -} - -double ParagraphImplBlink::alphabeticBaseline() { - return firstChildBox()->firstLineBoxBaseline( - FontBaselineOrAuto(AlphabeticBaseline)); -} - -double ParagraphImplBlink::ideographicBaseline() { - return firstChildBox()->firstLineBoxBaseline( - FontBaselineOrAuto(IdeographicBaseline)); -} - -bool ParagraphImplBlink::didExceedMaxLines() { - RenderBox* box = firstChildBox(); - ASSERT(box->isRenderParagraph()); - RenderParagraph* paragraph = static_cast(box); - return paragraph->didExceedMaxLines(); -} - -void ParagraphImplBlink::layout(double width) { - FontCachePurgePreventer fontCachePurgePreventer; - - int maxWidth = LayoutUnit(width); // Handles infinity properly. - m_renderView->setFrameViewSize(IntSize(maxWidth, intMaxForLayoutUnit)); - m_renderView->layout(); -} - -void ParagraphImplBlink::paint(Canvas* canvas, double x, double y) { - SkCanvas* skCanvas = canvas->canvas(); - if (!skCanvas) - return; - - FontCachePurgePreventer fontCachePurgePreventer; - - // Very simplified painting to allow painting an arbitrary (layer-less) - // subtree. - RenderBox* box = firstChildBox(); - skCanvas->translate(x, y); - - GraphicsContext context(skCanvas); - Vector layers; - LayoutRect bounds = box->absoluteBoundingBoxRect(); - FTL_DCHECK(bounds.x() == 0 && bounds.y() == 0); - PaintInfo paintInfo(&context, enclosingIntRect(bounds), box); - box->paint(paintInfo, LayoutPoint(), layers); - // Note we're ignoring any layers encountered. - // TODO(abarth): Remove the concept of RenderLayers. - - skCanvas->translate(-x, -y); -} - -std::vector ParagraphImplBlink::getRectsForRange(unsigned start, - unsigned end) { - if (end <= start || start == end) - return std::vector(); - - unsigned offset = 0; - std::vector boxes; - for (RenderObject* object = m_renderView.get(); object; - object = object->nextInPreOrder()) { - if (!object->isText()) - continue; - RenderText* text = toRenderText(object); - unsigned length = text->textLength(); - if (offset + length > start) { - unsigned startOffset = offset > start ? 0 : start - offset; - unsigned endOffset = end - offset; - text->appendAbsoluteTextBoxesForRange(boxes, startOffset, endOffset); - } - offset += length; - if (offset >= end) - break; - } - - return boxes; -} - -int ParagraphImplBlink::absoluteOffsetForPosition( - const PositionWithAffinity& position) { - FTL_DCHECK(position.renderer()); - unsigned offset = 0; - for (RenderObject* object = m_renderView.get(); object; - object = object->nextInPreOrder()) { - if (object == position.renderer()) - return offset + position.offset(); - if (object->isText()) { - RenderText* text = toRenderText(object); - offset += text->textLength(); - } - } - FTL_DCHECK(false); - return 0; -} - -Dart_Handle ParagraphImplBlink::getPositionForOffset(double dx, double dy) { - LayoutPoint point(dx, dy); - PositionWithAffinity position = m_renderView->positionForPoint(point); - Dart_Handle result = Dart_NewList(2); - Dart_ListSetAt(result, 0, ToDart(absoluteOffsetForPosition(position))); - Dart_ListSetAt(result, 1, ToDart(static_cast(position.affinity()))); - return result; -} - -Dart_Handle ParagraphImplBlink::getWordBoundary(unsigned offset) { - String text; - int start = 0, end = 0; - - for (RenderObject* object = m_renderView.get(); object; - object = object->nextInPreOrder()) { - if (!object->isText()) - continue; - RenderText* renderText = toRenderText(object); - text.append(renderText->text()); - } - - TextBreakIterator* it = wordBreakIterator(text, 0, text.length()); - if (it) { - end = it->following(offset); - if (end < 0) - end = it->last(); - start = it->previous(); - } - - Dart_Handle result = Dart_NewList(2); - Dart_ListSetAt(result, 0, ToDart(start)); - Dart_ListSetAt(result, 1, ToDart(end)); - return result; -} - -} // namespace blink diff --git a/engine/src/flutter/lib/ui/text/paragraph_impl_blink.h b/engine/src/flutter/lib/ui/text/paragraph_impl_blink.h deleted file mode 100644 index 7557139d2d..0000000000 --- a/engine/src/flutter/lib/ui/text/paragraph_impl_blink.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_BLINK_H_ -#define FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_BLINK_H_ - -#include "flutter/lib/ui/painting/canvas.h" -#include "flutter/lib/ui/text/paragraph_impl.h" -#include "flutter/lib/ui/text/text_box.h" -#include "flutter/sky/engine/core/rendering/RenderView.h" -#include "lib/txt/src/paragraph.h" - -namespace blink { - -class ParagraphImplBlink : public ParagraphImpl { - public: - ~ParagraphImplBlink() override; - - explicit ParagraphImplBlink(PassOwnPtr renderView); - - double width() override; - double height() override; - double minIntrinsicWidth() override; - double maxIntrinsicWidth() override; - double alphabeticBaseline() override; - double ideographicBaseline() override; - bool didExceedMaxLines() override; - - void layout(double width) override; - void paint(Canvas* canvas, double x, double y) override; - - std::vector getRectsForRange(unsigned start, unsigned end) override; - Dart_Handle getPositionForOffset(double dx, double dy) override; - Dart_Handle getWordBoundary(unsigned offset) override; - - RenderView* renderView() const { return m_renderView.get(); } - - private: - RenderBox* firstChildBox() const { return m_renderView->firstChildBox(); } - - int absoluteOffsetForPosition(const PositionWithAffinity& position); - - OwnPtr m_renderView; -}; - -} // namespace blink - -#endif // FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_BLINK_H_ diff --git a/engine/src/flutter/lib/ui/text/paragraph_impl_txt.cc b/engine/src/flutter/lib/ui/text/paragraph_impl_txt.cc deleted file mode 100644 index 3ac12e6b3d..0000000000 --- a/engine/src/flutter/lib/ui/text/paragraph_impl_txt.cc +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2015 The Chromium 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 "flutter/lib/ui/text/paragraph_impl_txt.h" - -#include "flutter/common/threads.h" -#include "flutter/lib/ui/text/paragraph.h" -#include "flutter/lib/ui/text/paragraph_impl.h" -#include "lib/ftl/tasks/task_runner.h" -#include "lib/txt/src/paragraph_constraints.h" - -namespace blink { - -ParagraphImplTxt::ParagraphImplTxt(std::unique_ptr paragraph) - : m_paragraph(std::move(paragraph)) {} - -ParagraphImplTxt::~ParagraphImplTxt() {} - -double ParagraphImplTxt::width() { - return m_width; -} - -double ParagraphImplTxt::height() { - return m_paragraph->GetHeight(); -} - -double ParagraphImplTxt::minIntrinsicWidth() { - return m_paragraph->GetMinIntrinsicWidth(); -} - -double ParagraphImplTxt::maxIntrinsicWidth() { - return m_paragraph->GetMaxIntrinsicWidth(); -} - -double ParagraphImplTxt::alphabeticBaseline() { - return m_paragraph->GetAlphabeticBaseline(); -} - -double ParagraphImplTxt::ideographicBaseline() { - return m_paragraph->GetIdeographicBaseline(); -} - -bool ParagraphImplTxt::didExceedMaxLines() { - return m_paragraph->DidExceedMaxLines(); -} - -void ParagraphImplTxt::layout(double width) { - m_width = width; - m_paragraph->Layout(txt::ParagraphConstraints{width}); -} - -void ParagraphImplTxt::paint(Canvas* canvas, double x, double y) { - SkCanvas* sk_canvas = canvas->canvas(); - if (!sk_canvas) - return; - m_paragraph->Paint(sk_canvas, x, y); -} - -std::vector ParagraphImplTxt::getRectsForRange(unsigned start, - unsigned end) { - return std::vector{0ull}; -} - -Dart_Handle ParagraphImplTxt::getPositionForOffset(double dx, double dy) { - // TODO(garyq): Implement in the library. - return nullptr; -} - -Dart_Handle ParagraphImplTxt::getWordBoundary(unsigned offset) { - // TODO(garyq): Implement in the library. - return nullptr; -} - -} // namespace blink diff --git a/engine/src/flutter/lib/ui/text/paragraph_impl_txt.h b/engine/src/flutter/lib/ui/text/paragraph_impl_txt.h deleted file mode 100644 index 20f786a432..0000000000 --- a/engine/src/flutter/lib/ui/text/paragraph_impl_txt.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_TXT_H_ -#define FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_TXT_H_ - -#include "flutter/lib/ui/painting/canvas.h" -#include "flutter/lib/ui/text/paragraph_impl.h" -#include "flutter/lib/ui/text/paragraph_impl_blink.h" -#include "flutter/lib/ui/text/text_box.h" -#include "lib/txt/src/paragraph.h" - -namespace blink { - -class ParagraphImplTxt : public ParagraphImpl { - public: - ~ParagraphImplTxt() override; - - explicit ParagraphImplTxt(std::unique_ptr paragraph); - - double width() override; - double height() override; - double minIntrinsicWidth() override; - double maxIntrinsicWidth() override; - double alphabeticBaseline() override; - double ideographicBaseline() override; - bool didExceedMaxLines() override; - - void layout(double width) override; - void paint(Canvas* canvas, double x, double y) override; - - std::vector getRectsForRange(unsigned start, unsigned end) override; - Dart_Handle getPositionForOffset(double dx, double dy) override; - Dart_Handle getWordBoundary(unsigned offset) override; - - private: - std::unique_ptr m_paragraph; - double m_width = -1.0; -}; - -} // namespace blink - -#endif // FLUTTER_LIB_UI_TEXT_PARAGRAPH_IMPL_TXT_H_ diff --git a/engine/src/flutter/shell/common/shell.cc b/engine/src/flutter/shell/common/shell.cc index f2a679d700..21eb3c916f 100644 --- a/engine/src/flutter/shell/common/shell.cc +++ b/engine/src/flutter/shell/common/shell.cc @@ -147,9 +147,6 @@ void Shell::InitStandalone(ftl::CommandLine command_line, settings.enable_software_rendering = command_line.HasOption(FlagForSwitch(Switch::EnableSoftwareRendering)); - settings.using_blink = - !command_line.HasOption(FlagForSwitch(Switch::EnableTxt)); - settings.endless_trace_buffer = command_line.HasOption(FlagForSwitch(Switch::EndlessTraceBuffer)); diff --git a/engine/src/flutter/shell/common/switches.h b/engine/src/flutter/shell/common/switches.h index ac43b92126..fe68fe13d6 100644 --- a/engine/src/flutter/shell/common/switches.h +++ b/engine/src/flutter/shell/common/switches.h @@ -63,9 +63,6 @@ DEF_SWITCH(EnableSoftwareRendering, "Enable rendering using the Skia software backend. This is useful" "when testing Flutter on emulators. By default, Flutter will" "attempt to either use OpenGL or Vulkan.") -DEF_SWITCH(EnableTxt, - "enable-txt", - "Enable libtxt as the text shaping library instead of Blink.") DEF_SWITCH(FLX, "flx", "Specify the the FLX path.") DEF_SWITCH(Help, "help", "Display this help text.") DEF_SWITCH(LogTag, "log-tag", "Tag associated with log messages.") diff --git a/engine/src/flutter/shell/platform/android/io/flutter/app/FlutterActivityDelegate.java b/engine/src/flutter/shell/platform/android/io/flutter/app/FlutterActivityDelegate.java index e28523a759..f299a08708 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/app/FlutterActivityDelegate.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/app/FlutterActivityDelegate.java @@ -245,9 +245,6 @@ public final class FlutterActivityDelegate if (intent.getBooleanExtra("enable-software-rendering", false)) { args.add("--enable-software-rendering"); } - if (intent.getBooleanExtra("enable-txt", false)) { - args.add("--enable-txt"); - } if (!args.isEmpty()) { String[] argsArray = new String[args.size()]; return args.toArray(argsArray); diff --git a/engine/src/flutter/sky/packages/sky_engine/LICENSE b/engine/src/flutter/sky/packages/sky_engine/LICENSE index 5402bfb2fb..172952f261 100644 --- a/engine/src/flutter/sky/packages/sky_engine/LICENSE +++ b/engine/src/flutter/sky/packages/sky_engine/LICENSE @@ -9162,7 +9162,6 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- etc1 -lib observatory_pub_packages skia vulkan