arkui text adapter

Signed-off-by: ustc-tianyu <dutianyu4@huawei.com>
This commit is contained in:
d00613262 2023-09-16 11:04:22 +08:00
parent cb87b280b2
commit 2d65fafe41
19 changed files with 70 additions and 24 deletions

View File

@ -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

View File

@ -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

View File

@ -445,8 +445,13 @@ void ConvertTxtStyle(const TextStyle& textStyle, const WeakPtr<PipelineBase>& co
for (auto& spanShadow : textStyle.GetTextShadows()) {
txt::TextShadow txtShadow;
txtShadow.color = spanShadow.GetColor().GetValue();
#ifndef USE_ROSEN_DRAWING
txtShadow.offset.fX = static_cast<SkScalar>(spanShadow.GetOffset().GetX());
txtShadow.offset.fY = static_cast<SkScalar>(spanShadow.GetOffset().GetY());
#else
txtShadow.offset.SetX(static_cast<SkScalar>(spanShadow.GetOffset().GetX()));
txtShadow.offset.SetY(static_cast<SkScalar>(spanShadow.GetOffset().GetY()));
#endif
#if defined (FLUTTER_2_5) || defined (NEW_SKIA)
txtShadow.blur_sigma = spanShadow.GetBlurRadius();
#else

View File

@ -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<txt::FontCollection> RosenFontCollection::GetFontCollection()
return fontCollection_;
}
#ifndef USE_ROSEN_DRAWING
sk_sp<txt::DynamicFontManager> RosenFontCollection::GetDynamicFontManager()
#else
std::shared_ptr<RSFontMgr> 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<SkStreamAsset> font_stream = std::make_unique<SkMemoryStream>(fontData, length, true);
sk_sp<SkTypeface> 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

View File

@ -48,13 +48,21 @@ public:
void SetIsZawgyiMyanmar(bool isZawgyiMyanmar);
#ifndef USE_GRAPHIC_TEXT_GINE
#ifndef USE_ROSEN_DRAWING
sk_sp<txt::DynamicFontManager> GetDynamicFontManager();
#else
std::shared_ptr<RSFontMgr> GetDynamicFontManager();
#endif
#endif
private:
#ifndef USE_GRAPHIC_TEXT_GINE
std::shared_ptr<txt::FontCollection> fontCollection_;
#ifndef USE_ROSEN_DRAWING
sk_sp<txt::DynamicFontManager> dynamicFontManager_;
#else
std::shared_ptr<RSFontMgr> dynamicFontManager_;
#endif
#else
std::shared_ptr<Rosen::FontCollection> fontCollection_;
#endif

View File

@ -1127,7 +1127,11 @@ void RosenRenderTextField::SetShaderIfNeeded(std::unique_ptr<Rosen::TypographySt
#ifndef USE_GRAPHIC_TEXT_GINE
std::unique_ptr<txt::ParagraphBuilder> 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<Rosen::TypographyCreate> builder =
Rosen::TypographyCreate::Create(*paragraphStyle, GetFontCollection());

View File

@ -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

View File

@ -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

View File

@ -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<float> 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);

View File

@ -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<RSPoint> radiusXY(POINT_COUNT);
Dimension borderRadius = Dimension(2.0, DimensionUnit::VP);

View File

@ -36,27 +36,18 @@ void TextDragOverlayModifier::onDraw(DrawingContext& context)
{
auto pattern = DynamicCast<TextDragPattern>(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<RefPtr<Paragraph>>(paragraph)) {
auto paragraphPtr = std::get<RefPtr<Paragraph>>(paragraph);

View File

@ -60,7 +60,7 @@ TextFieldContentModifier::TextFieldContentModifier(const WeakPtr<OHOS::Ace::NG::
void TextFieldContentModifier::onDraw(DrawingContext& context)
{
auto canvas = context.canvas;
auto& canvas = context.canvas;
auto textFieldPattern = DynamicCast<TextFieldPattern>(pattern_.Upgrade());
CHECK_NULL_VOID(textFieldPattern);
auto offset = contentOffset_->Get();

View File

@ -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<TextFieldPattern>(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<TextFieldPattern>(pattern_.Upgrade());
CHECK_NULL_VOID(textFieldPattern);
if (!cursorVisible_->Get() || textFieldPattern->GetSelectMode() == SelectionMode::SELECT_ALL) {

View File

@ -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<RSSkCanvas>()->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<PixelMapImage>(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)

View File

@ -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

View File

@ -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;
};

View File

@ -184,7 +184,7 @@ void SliderPatternTestNg::MockTipsCanvasFunction(Testing::MockCanvas& canvas)
void SliderPatternTestNg::MockParagraphFunction(RefPtr<MockParagraph>& paragraph, Testing::MockCanvas& canvas)
{
EXPECT_CALL(*paragraph, Paint(An<const RSCanvas&>(), _, _)).WillRepeatedly(Return());
EXPECT_CALL(*paragraph, Paint(An<RSCanvas&>(), _, _)).WillRepeatedly(Return());
EXPECT_CALL(*paragraph, Layout(_)).WillRepeatedly(Return());
EXPECT_CALL(*paragraph, PushStyle(_)).WillRepeatedly(Return());
EXPECT_CALL(*paragraph, AddText(_)).WillRepeatedly(Return());

View File

@ -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) {}

View File

@ -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<Rect>& 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));