mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2024-10-07 08:24:11 +00:00
arkui text adapter
Signed-off-by: ustc-tianyu <dutianyu4@huawei.com>
This commit is contained in:
parent
cb87b280b2
commit
2d65fafe41
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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());
|
||||
|
@ -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) {}
|
||||
|
||||
|
@ -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));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user