From c7c5611d420fa92ccbc57c22b36ac2e687856236 Mon Sep 17 00:00:00 2001 From: LongCat is Looong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Mon, 5 Feb 2024 21:21:30 -0800 Subject: [PATCH 1/3] Pass the missing strut half leading over to skia paragraph builder --- third_party/txt/src/skia/paragraph_builder_skia.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/third_party/txt/src/skia/paragraph_builder_skia.cc b/third_party/txt/src/skia/paragraph_builder_skia.cc index 443c2b9ca2b08..8c6381a6b8a5b 100644 --- a/third_party/txt/src/skia/paragraph_builder_skia.cc +++ b/third_party/txt/src/skia/paragraph_builder_skia.cc @@ -119,6 +119,7 @@ skt::ParagraphStyle ParagraphBuilderSkia::TxtToSkia(const ParagraphStyle& txt) { strut_style.setFontSize(SkDoubleToScalar(txt.strut_font_size)); strut_style.setHeight(SkDoubleToScalar(txt.strut_height)); strut_style.setHeightOverride(txt.strut_has_height_override); + strut_style.setHalfLeading(txt.strut_half_leading); std::vector strut_fonts; std::transform(txt.strut_font_families.begin(), txt.strut_font_families.end(), From d9bec4b02eed2759e8c9b33f71e2ecd818091e22 Mon Sep 17 00:00:00 2001 From: LongCat is Looong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Tue, 6 Feb 2024 11:15:54 -0800 Subject: [PATCH 2/3] Pass the missing strut half leading flag over to skia paragraph builder --- third_party/txt/BUILD.gn | 1 + .../txt/src/skia/paragraph_builder_skia.cc | 1 + .../txt/src/skia/paragraph_builder_skia.h | 2 + .../txt/tests/paragraph_builder_skia_tests.cc | 45 +++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 third_party/txt/tests/paragraph_builder_skia_tests.cc diff --git a/third_party/txt/BUILD.gn b/third_party/txt/BUILD.gn index e5d97d024b249..76163e19269a4 100644 --- a/third_party/txt/BUILD.gn +++ b/third_party/txt/BUILD.gn @@ -147,6 +147,7 @@ if (enable_unittests) { sources = [ "tests/font_collection_tests.cc", + "tests/paragraph_builder_skia_tests.cc", "tests/paragraph_unittests.cc", "tests/txt_run_all_unittests.cc", ] diff --git a/third_party/txt/src/skia/paragraph_builder_skia.cc b/third_party/txt/src/skia/paragraph_builder_skia.cc index 443c2b9ca2b08..8c6381a6b8a5b 100644 --- a/third_party/txt/src/skia/paragraph_builder_skia.cc +++ b/third_party/txt/src/skia/paragraph_builder_skia.cc @@ -119,6 +119,7 @@ skt::ParagraphStyle ParagraphBuilderSkia::TxtToSkia(const ParagraphStyle& txt) { strut_style.setFontSize(SkDoubleToScalar(txt.strut_font_size)); strut_style.setHeight(SkDoubleToScalar(txt.strut_height)); strut_style.setHeightOverride(txt.strut_has_height_override); + strut_style.setHalfLeading(txt.strut_half_leading); std::vector strut_fonts; std::transform(txt.strut_font_families.begin(), txt.strut_font_families.end(), diff --git a/third_party/txt/src/skia/paragraph_builder_skia.h b/third_party/txt/src/skia/paragraph_builder_skia.h index f14f7fe41f591..6269285899f58 100644 --- a/third_party/txt/src/skia/paragraph_builder_skia.h +++ b/third_party/txt/src/skia/paragraph_builder_skia.h @@ -45,6 +45,8 @@ class ParagraphBuilderSkia : public ParagraphBuilder { virtual std::unique_ptr Build() override; private: + friend class SkiaParagraphBuilderTests_ParagraphStrutStyle_Test; + skia::textlayout::ParagraphPainter::PaintID CreatePaintID( const flutter::DlPaint& dl_paint); skia::textlayout::ParagraphStyle TxtToSkia(const ParagraphStyle& txt); diff --git a/third_party/txt/tests/paragraph_builder_skia_tests.cc b/third_party/txt/tests/paragraph_builder_skia_tests.cc new file mode 100644 index 0000000000000..3131624be0a66 --- /dev/null +++ b/third_party/txt/tests/paragraph_builder_skia_tests.cc @@ -0,0 +1,45 @@ +/* + * Copyright 2017 Google, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include + +#include "skia/paragraph_builder_skia.h" +#include "txt/paragraph_style.h" + +namespace txt { + +class SkiaParagraphBuilderTests : public ::testing::Test { + public: + SkiaParagraphBuilderTests() {} + + void SetUp() override {} +}; + +TEST_F(SkiaParagraphBuilderTests, ParagraphStrutStyle) { + ParagraphStyle style = ParagraphStyle(); + auto collection = std::make_shared(); + auto builder = ParagraphBuilderSkia(style, collection, false); + + auto strut_style = builder.TxtToSkia(style).getStrutStyle(); + ASSERT_FALSE(strut_style.getHalfLeading()); + + style.strut_half_leading = true; + strut_style = builder.TxtToSkia(style).getStrutStyle(); + ASSERT_TRUE(strut_style.getHalfLeading()); +} +} // namespace txt From 8cafa8fc8f5ccc31e6527a285e372a57c771d43b Mon Sep 17 00:00:00 2001 From: LongCat is Looong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Thu, 15 Feb 2024 15:05:25 -0800 Subject: [PATCH 3/3] Turn Strut half leading back on in canvaskit kitchensink tests --- lib/web_ui/test/canvaskit/canvaskit_api_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/test/canvaskit/canvaskit_api_test.dart b/lib/web_ui/test/canvaskit/canvaskit_api_test.dart index 6a1fea063ef34..514ad95ded270 100644 --- a/lib/web_ui/test/canvaskit/canvaskit_api_test.dart +++ b/lib/web_ui/test/canvaskit/canvaskit_api_test.dart @@ -1596,7 +1596,7 @@ void _paragraphTests() { ..weight = canvasKit.FontWeight.Bold) ..fontSize = 72 ..heightMultiplier = 1.5 - ..halfLeading = false + ..halfLeading = true ..leading = 0 ..strutEnabled = true ..forceStrutHeight = false;