From 2d65fafe4116e6454374e59371fd88a012b9bb62 Mon Sep 17 00:00:00 2001 From: d00613262 Date: Sat, 16 Sep 2023 11:04:22 +0800 Subject: [PATCH] arkui text adapter Signed-off-by: ustc-tianyu --- .../custom_paint/rosen_render_custom_paint.cpp | 5 +++++ .../custom_paint/rosen_render_offscreen_canvas.cpp | 5 +++++ .../core/components/font/constants_converter.cpp | 5 +++++ .../core/components/font/rosen_font_collection.cpp | 10 ++++++++++ .../core/components/font/rosen_font_collection.h | 8 ++++++++ .../components/text_field/rosen_render_text_field.cpp | 4 ++++ .../pattern/custom_paint/canvas_paint_method.cpp | 5 +++++ .../custom_paint/offscreen_canvas_paint_method.cpp | 5 +++++ .../dot_indicator/dot_indicator_modifier.cpp | 6 +++--- .../pattern/text/text_content_modifier.cpp | 4 ++-- .../pattern/text_drag/text_drag_overlay_modifier.cpp | 11 +---------- .../text_field/text_field_content_modifier.cpp | 2 +- .../text_field/text_field_overlay_modifier.cpp | 4 ++-- .../components_ng/render/adapter/txt_paragraph.cpp | 10 +++++++++- .../core/components_ng/render/adapter/txt_paragraph.h | 2 +- frameworks/core/components_ng/render/paragraph.h | 2 +- .../test/pattern/slider/slider_pattern_test_ng.cpp | 2 +- .../test/pattern/text/mock/mock_txt_paragraph.cpp | 2 +- test/mock/core/render/mock_paragraph.h | 2 +- 19 files changed, 70 insertions(+), 24 deletions(-) diff --git a/frameworks/core/components/custom_paint/rosen_render_custom_paint.cpp b/frameworks/core/components/custom_paint/rosen_render_custom_paint.cpp index 74e5cb01f9b..edac11501a5 100755 --- a/frameworks/core/components/custom_paint/rosen_render_custom_paint.cpp +++ b/frameworks/core/components/custom_paint/rosen_render_custom_paint.cpp @@ -2060,8 +2060,13 @@ bool RosenRenderCustomPaint::UpdateParagraph( #ifndef USE_GRAPHIC_TEXT_GINE txt::TextShadow txtShadow; txtShadow.color = shadow_.GetColor().GetValue(); +#ifndef USE_ROSEN_DRAWING txtShadow.offset.fX = shadow_.GetOffset().GetX(); txtShadow.offset.fY = shadow_.GetOffset().GetY(); +#else + txtShadow.offset.SetX(shadow_.GetOffset().GetX()); + txtShadow.offset.SetY(shadow_.GetOffset().GetY()); +#endif #ifndef NEW_SKIA txtShadow.blur_radius = shadow_.GetBlurRadius(); #else diff --git a/frameworks/core/components/custom_paint/rosen_render_offscreen_canvas.cpp b/frameworks/core/components/custom_paint/rosen_render_offscreen_canvas.cpp index eb215854f3e..c6837857eef 100644 --- a/frameworks/core/components/custom_paint/rosen_render_offscreen_canvas.cpp +++ b/frameworks/core/components/custom_paint/rosen_render_offscreen_canvas.cpp @@ -2446,8 +2446,13 @@ bool RosenRenderOffscreenCanvas::UpdateOffParagraph(const std::string& text, boo #endif txtShadow.color = shadow_.GetColor().GetValue(); #ifndef USE_GRAPHIC_TEXT_GINE +#ifndef USE_ROSEN_DRAWING txtShadow.offset.fX = shadow_.GetOffset().GetX(); txtShadow.offset.fY = shadow_.GetOffset().GetY(); +#else + txtShadow.offset.SetX(shadow_.GetOffset().GetX()); + txtShadow.offset.SetY(shadow_.GetOffset().GetY()); +#endif txtShadow.blur_sigma = shadow_.GetBlurRadius(); txtStyle.text_shadows.emplace_back(txtShadow); #else diff --git a/frameworks/core/components/font/constants_converter.cpp b/frameworks/core/components/font/constants_converter.cpp index d9c878b9cc7..3d7e916fbea 100644 --- a/frameworks/core/components/font/constants_converter.cpp +++ b/frameworks/core/components/font/constants_converter.cpp @@ -445,8 +445,13 @@ void ConvertTxtStyle(const TextStyle& textStyle, const WeakPtr& co for (auto& spanShadow : textStyle.GetTextShadows()) { txt::TextShadow txtShadow; txtShadow.color = spanShadow.GetColor().GetValue(); +#ifndef USE_ROSEN_DRAWING txtShadow.offset.fX = static_cast(spanShadow.GetOffset().GetX()); txtShadow.offset.fY = static_cast(spanShadow.GetOffset().GetY()); +#else + txtShadow.offset.SetX(static_cast(spanShadow.GetOffset().GetX())); + txtShadow.offset.SetY(static_cast(spanShadow.GetOffset().GetY())); +#endif #if defined (FLUTTER_2_5) || defined (NEW_SKIA) txtShadow.blur_sigma = spanShadow.GetBlurRadius(); #else diff --git a/frameworks/core/components/font/rosen_font_collection.cpp b/frameworks/core/components/font/rosen_font_collection.cpp index d2df6c25271..c8c5fa91c18 100644 --- a/frameworks/core/components/font/rosen_font_collection.cpp +++ b/frameworks/core/components/font/rosen_font_collection.cpp @@ -22,7 +22,9 @@ #include "core/components_ng/render/adapter/txt_font_collection.h" #include "rosen_text/font_collection.h" #endif +#ifndef USE_ROSEN_DRAWING #include "include/core/SkTypeface.h" +#endif #include "base/i18n/localization.h" #include "base/log/ace_trace.h" #include "base/log/log.h" @@ -53,7 +55,11 @@ std::shared_ptr RosenFontCollection::GetFontCollection() return fontCollection_; } +#ifndef USE_ROSEN_DRAWING sk_sp RosenFontCollection::GetDynamicFontManager() +#else +std::shared_ptr RosenFontCollection::GetDynamicFontManager() +#endif { return dynamicFontManager_; } @@ -94,6 +100,7 @@ void RosenFontCollection::LoadFontFromList(const uint8_t* fontData, size_t lengt if (fontCollection_) { #ifndef USE_GRAPHIC_TEXT_GINE +#ifndef USE_ROSEN_DRAWING std::unique_ptr font_stream = std::make_unique(fontData, length, true); sk_sp typeface = SkTypeface::MakeFromStream(std::move(font_stream)); txt::TypefaceFontAssetProvider& font_provider = dynamicFontManager_->font_provider(); @@ -103,6 +110,9 @@ void RosenFontCollection::LoadFontFromList(const uint8_t* fontData, size_t lengt font_provider.RegisterTypeface(typeface, familyName); } fontCollection_->ClearFontFamilyCache(); +#else + LOGE("Drawing is not supported"); +#endif #else fontCollection_->LoadFont(familyName, fontData, length); #endif diff --git a/frameworks/core/components/font/rosen_font_collection.h b/frameworks/core/components/font/rosen_font_collection.h index 331ced1d654..9893abc8c93 100644 --- a/frameworks/core/components/font/rosen_font_collection.h +++ b/frameworks/core/components/font/rosen_font_collection.h @@ -48,13 +48,21 @@ public: void SetIsZawgyiMyanmar(bool isZawgyiMyanmar); #ifndef USE_GRAPHIC_TEXT_GINE +#ifndef USE_ROSEN_DRAWING sk_sp GetDynamicFontManager(); +#else + std::shared_ptr GetDynamicFontManager(); +#endif #endif private: #ifndef USE_GRAPHIC_TEXT_GINE std::shared_ptr fontCollection_; +#ifndef USE_ROSEN_DRAWING sk_sp dynamicFontManager_; +#else + std::shared_ptr dynamicFontManager_; +#endif #else std::shared_ptr fontCollection_; #endif diff --git a/frameworks/core/components/text_field/rosen_render_text_field.cpp b/frameworks/core/components/text_field/rosen_render_text_field.cpp index 020de948d0a..f68f7258a58 100644 --- a/frameworks/core/components/text_field/rosen_render_text_field.cpp +++ b/frameworks/core/components/text_field/rosen_render_text_field.cpp @@ -1127,7 +1127,11 @@ void RosenRenderTextField::SetShaderIfNeeded(std::unique_ptr builder = txt::ParagraphBuilder::CreateTxtBuilder(*paragraphStyle, GetFontCollection()); +#ifndef USE_ROSEN_DRAWING txtStyle->has_foreground = true; +#else + txtStyle->has_foreground_brush = true; +#endif #else std::unique_ptr builder = Rosen::TypographyCreate::Create(*paragraphStyle, GetFontCollection()); diff --git a/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_method.cpp b/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_method.cpp index 025bfe1c27c..00a918394db 100755 --- a/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_method.cpp +++ b/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_method.cpp @@ -746,8 +746,13 @@ bool CanvasPaintMethod::UpdateParagraph(const OffsetF& offset, const std::string #ifndef USE_GRAPHIC_TEXT_GINE txt::TextShadow txtShadow; txtShadow.color = shadow_.GetColor().GetValue(); +#ifndef USE_ROSEN_DRAWING txtShadow.offset.fX = shadow_.GetOffset().GetX(); txtShadow.offset.fY = shadow_.GetOffset().GetY(); +#else + txtShadow.offset.SetX(shadow_.GetOffset().GetX()); + txtShadow.offset.SetY(shadow_.GetOffset().GetY()); +#endif txtShadow.blur_sigma = shadow_.GetBlurRadius(); txtStyle.text_shadows.emplace_back(txtShadow); #else diff --git a/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.cpp b/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.cpp index 49a8541326f..17d0b3b697f 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.cpp +++ b/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.cpp @@ -766,8 +766,13 @@ bool OffscreenCanvasPaintMethod::UpdateOffParagraph(const std::string& text, boo #ifndef USE_GRAPHIC_TEXT_GINE txt::TextShadow txtShadow; txtShadow.color = shadow_.GetColor().GetValue(); +#ifndef USE_ROSEN_DRAWING txtShadow.offset.fX = shadow_.GetOffset().GetX(); txtShadow.offset.fY = shadow_.GetOffset().GetY(); +#else + txtShadow.offset.SetX(shadow_.GetOffset().GetX()); + txtShadow.offset.SetY(shadow_.GetOffset().GetY()); +#endif txtShadow.blur_sigma = shadow_.GetBlurRadius(); txtStyle.text_shadows.emplace_back(txtShadow); #else diff --git a/frameworks/core/components_ng/pattern/swiper_indicator/dot_indicator/dot_indicator_modifier.cpp b/frameworks/core/components_ng/pattern/swiper_indicator/dot_indicator/dot_indicator_modifier.cpp index 869584cacf1..576fd6cd836 100644 --- a/frameworks/core/components_ng/pattern/swiper_indicator/dot_indicator/dot_indicator_modifier.cpp +++ b/frameworks/core/components_ng/pattern/swiper_indicator/dot_indicator/dot_indicator_modifier.cpp @@ -126,7 +126,7 @@ void DotIndicatorModifier::PaintBackground(DrawingContext& context, const Conten rectWidth -= widthChangeValue; } // Paint background - RSCanvas canvas = context.canvas; + RSCanvas& canvas = context.canvas; RSBrush brush; brush.SetAntiAlias(true); brush.SetColor(ToRSColor(contentProperty.backgroundColor)); @@ -137,7 +137,7 @@ void DotIndicatorModifier::PaintBackground(DrawingContext& context, const Conten void DotIndicatorModifier::PaintContent(DrawingContext& context, ContentProperty& contentProperty) { - RSCanvas canvas = context.canvas; + RSCanvas& canvas = context.canvas; OffsetF selectedCenter = {}; for (size_t i = 0; i < contentProperty.vectorBlackPointCenterX.size(); ++i) { LinearVector itemHalfSizes = GetItemHalfSizes(i, contentProperty); @@ -243,7 +243,7 @@ void DotIndicatorModifier::PaintSelectedIndicator(RSCanvas& canvas, const Offset void DotIndicatorModifier::PaintMask(DrawingContext& context) { - RSCanvas canvas = context.canvas; + RSCanvas& canvas = context.canvas; RSBrush brush; brush.SetAntiAlias(true); diff --git a/frameworks/core/components_ng/pattern/text/text_content_modifier.cpp b/frameworks/core/components_ng/pattern/text/text_content_modifier.cpp index e6dbb6146fd..847e49bd9ac 100644 --- a/frameworks/core/components_ng/pattern/text/text_content_modifier.cpp +++ b/frameworks/core/components_ng/pattern/text/text_content_modifier.cpp @@ -187,7 +187,7 @@ void TextContentModifier::onDraw(DrawingContext& drawingContext) [](const auto& reason) { return reason == ObscuredReasons::PLACEHOLDER; }); if (!ifPaintObscuration || ifHaveSpanItemChildren_) { CHECK_NULL_VOID(paragraph_); - auto canvas = drawingContext.canvas; + auto& canvas = drawingContext.canvas; canvas.Save(); if (!textRacing_) { auto contentSize = contentSize_->Get(); @@ -225,7 +225,7 @@ void TextContentModifier::onDraw(DrawingContext& drawingContext) void TextContentModifier::DrawObscuration(DrawingContext& drawingContext) { - RSCanvas canvas = drawingContext.canvas; + RSCanvas& canvas = drawingContext.canvas; RSBrush brush; std::vector radiusXY(POINT_COUNT); Dimension borderRadius = Dimension(2.0, DimensionUnit::VP); diff --git a/frameworks/core/components_ng/pattern/text_drag/text_drag_overlay_modifier.cpp b/frameworks/core/components_ng/pattern/text_drag/text_drag_overlay_modifier.cpp index ac75e3a94bb..c1cfef10cdc 100644 --- a/frameworks/core/components_ng/pattern/text_drag/text_drag_overlay_modifier.cpp +++ b/frameworks/core/components_ng/pattern/text_drag/text_drag_overlay_modifier.cpp @@ -36,27 +36,18 @@ void TextDragOverlayModifier::onDraw(DrawingContext& context) { auto pattern = DynamicCast(pattern_.Upgrade()); CHECK_NULL_VOID(pattern); - auto canvas = context.canvas; + auto& canvas = context.canvas; Color color(TEXT_DRAG_COLOR_BG); RSBrush brush; brush.SetColor(ToRSColor(color)); brush.SetAntiAlias(true); canvas.AttachBrush(brush); -#ifdef NEW_SKIA if (!isAnimating_) { canvas.DrawPath(*pattern->GetBackgroundPath()); } else { canvas.DrawPath(*pattern->GenerateBackgroundPath(backgroundOffset_->Get())); } canvas.ClipPath(*pattern->GetClipPath(), RSClipOp::INTERSECT, true); -#else - if (!isAnimating_) { - canvas.DrawPath(*pattern->GetBackgroundPath()); - } else { - canvas.DrawPath(*pattern->GenerateBackgroundPath(backgroundOffset_->Get())); - } - canvas.ClipPath(*pattern->GetClipPath(), RSClipOp::INTERSECT, true); -#endif auto&& paragraph = pattern->GetParagraph(); if (std::holds_alternative>(paragraph)) { auto paragraphPtr = std::get>(paragraph); diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_content_modifier.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_content_modifier.cpp index e83c8393cc5..1632a910019 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_content_modifier.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_content_modifier.cpp @@ -60,7 +60,7 @@ TextFieldContentModifier::TextFieldContentModifier(const WeakPtr(pattern_.Upgrade()); CHECK_NULL_VOID(textFieldPattern); auto offset = contentOffset_->Get(); diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.cpp index b7c93d161bf..59e64cb3825 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.cpp @@ -97,7 +97,7 @@ void TextFieldOverlayModifier::PaintUnderline(RSCanvas& canvas) const void TextFieldOverlayModifier::PaintSelection(DrawingContext& context) const { - auto canvas = context.canvas; + auto& canvas = context.canvas; canvas.Save(); auto textFieldPattern = DynamicCast(pattern_.Upgrade()); CHECK_NULL_VOID(textFieldPattern); @@ -162,7 +162,7 @@ void TextFieldOverlayModifier::PaintSelection(DrawingContext& context) const void TextFieldOverlayModifier::PaintCursor(DrawingContext& context) const { - auto canvas = context.canvas; + auto& canvas = context.canvas; auto textFieldPattern = DynamicCast(pattern_.Upgrade()); CHECK_NULL_VOID(textFieldPattern); if (!cursorVisible_->Get() || textFieldPattern->GetSelectMode() == SelectionMode::SELECT_ALL) { diff --git a/frameworks/core/components_ng/render/adapter/txt_paragraph.cpp b/frameworks/core/components_ng/render/adapter/txt_paragraph.cpp index d222a6cdc07..1ccf99d075d 100644 --- a/frameworks/core/components_ng/render/adapter/txt_paragraph.cpp +++ b/frameworks/core/components_ng/render/adapter/txt_paragraph.cpp @@ -228,12 +228,16 @@ size_t TxtParagraph::GetLineCount() #endif } -void TxtParagraph::Paint(const RSCanvas& canvas, float x, float y) +void TxtParagraph::Paint(RSCanvas& canvas, float x, float y) { CHECK_NULL_VOID(paragraph_); +#ifndef USE_ROSEN_DRAWING SkCanvas* skCanvas = canvas.GetImpl()->ExportSkCanvas(); CHECK_NULL_VOID(skCanvas); paragraph_->Paint(skCanvas, x, y); +#else + paragraph_->Paint(&canvas, x, y); +#endif if (paraStyle_.leadingMargin && paraStyle_.leadingMargin->pixmap) { auto canvasImage = PixelMapImage::Create(paraStyle_.leadingMargin->pixmap); auto pixelMapImage = DynamicCast(canvasImage); @@ -249,7 +253,11 @@ void TxtParagraph::Paint(const RSCanvas& canvas, float x, float y) void TxtParagraph::Paint(SkCanvas* skCanvas, float x, float y) { CHECK_NULL_VOID(skCanvas); +#ifndef USE_ROSEN_DRAWING paragraph_->Paint(skCanvas, x, y); +#else + LOGE("Drawing is not supported"); +#endif } int32_t TxtParagraph::GetHandlePositionForClick(const Offset& offset) diff --git a/frameworks/core/components_ng/render/adapter/txt_paragraph.h b/frameworks/core/components_ng/render/adapter/txt_paragraph.h index a3aa1ca618f..2e465deed75 100644 --- a/frameworks/core/components_ng/render/adapter/txt_paragraph.h +++ b/frameworks/core/components_ng/render/adapter/txt_paragraph.h @@ -69,7 +69,7 @@ public: float GetAlphabeticBaseline() override; // interfaces for painting - void Paint(const RSCanvas& canvas, float x, float y) override; + void Paint(RSCanvas& canvas, float x, float y) override; void Paint(SkCanvas* skCanvas, float x, float y) override; // interfaces for calculate the the specified paragraph position diff --git a/frameworks/core/components_ng/render/paragraph.h b/frameworks/core/components_ng/render/paragraph.h index f3f1618d1a3..df82e7e8abf 100644 --- a/frameworks/core/components_ng/render/paragraph.h +++ b/frameworks/core/components_ng/render/paragraph.h @@ -89,7 +89,7 @@ public: virtual bool GetWordBoundary(int32_t offset, int32_t& start, int32_t& end) = 0; // interfaces for painting - virtual void Paint(const RSCanvas& canvas, float x, float y) = 0; + virtual void Paint(RSCanvas& canvas, float x, float y) = 0; virtual void Paint(SkCanvas* skCanvas, float x, float y) = 0; }; diff --git a/frameworks/core/components_ng/test/pattern/slider/slider_pattern_test_ng.cpp b/frameworks/core/components_ng/test/pattern/slider/slider_pattern_test_ng.cpp index 4af88fca6ff..4e6cef50b7e 100644 --- a/frameworks/core/components_ng/test/pattern/slider/slider_pattern_test_ng.cpp +++ b/frameworks/core/components_ng/test/pattern/slider/slider_pattern_test_ng.cpp @@ -184,7 +184,7 @@ void SliderPatternTestNg::MockTipsCanvasFunction(Testing::MockCanvas& canvas) void SliderPatternTestNg::MockParagraphFunction(RefPtr& paragraph, Testing::MockCanvas& canvas) { - EXPECT_CALL(*paragraph, Paint(An(), _, _)).WillRepeatedly(Return()); + EXPECT_CALL(*paragraph, Paint(An(), _, _)).WillRepeatedly(Return()); EXPECT_CALL(*paragraph, Layout(_)).WillRepeatedly(Return()); EXPECT_CALL(*paragraph, PushStyle(_)).WillRepeatedly(Return()); EXPECT_CALL(*paragraph, AddText(_)).WillRepeatedly(Return()); diff --git a/frameworks/core/components_ng/test/pattern/text/mock/mock_txt_paragraph.cpp b/frameworks/core/components_ng/test/pattern/text/mock/mock_txt_paragraph.cpp index 0c233fbd908..fcd4af8059b 100644 --- a/frameworks/core/components_ng/test/pattern/text/mock/mock_txt_paragraph.cpp +++ b/frameworks/core/components_ng/test/pattern/text/mock/mock_txt_paragraph.cpp @@ -115,7 +115,7 @@ size_t TxtParagraph::GetLineCount() return 1; } -void TxtParagraph::Paint(const RSCanvas& canvas, float x, float y) {} +void TxtParagraph::Paint(RSCanvas& canvas, float x, float y) {} void TxtParagraph::Paint(SkCanvas* skCanvas, float x, float y) {} diff --git a/test/mock/core/render/mock_paragraph.h b/test/mock/core/render/mock_paragraph.h index 5f984e74c0a..e6404d10ff2 100644 --- a/test/mock/core/render/mock_paragraph.h +++ b/test/mock/core/render/mock_paragraph.h @@ -50,7 +50,7 @@ public: MOCK_METHOD2(ComputeOffsetForCaretDownstream, bool(int32_t extent, CaretMetrics& result)); MOCK_METHOD2(ComputeOffsetForCaretUpstream, bool(int32_t extent, CaretMetrics& result)); MOCK_METHOD3(GetRectsForRange, void(int32_t start, int32_t end, std::vector& selectedRects)); - MOCK_METHOD3(Paint, void(const RSCanvas& canvas, float x, float y)); + MOCK_METHOD3(Paint, void(RSCanvas& canvas, float x, float y)); MOCK_METHOD3(Paint, void(SkCanvas* skCanvas, float x, float y)); MOCK_METHOD3(GetWordBoundary, bool(int32_t offset, int32_t& start, int32_t& end));