From c3d1a576e62acd1aa32d3d1e439725ef98330def Mon Sep 17 00:00:00 2001 From: lancer Date: Sat, 20 Jul 2024 15:31:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=E7=9A=84=E6=8B=96?= =?UTF-8?q?=E6=8B=BD=E6=B5=AE=E6=9D=BF=E9=80=82=E9=85=8D=E6=B7=B1=E8=89=B2?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=20Signed-off-by:=20haoshuo=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks/core/components/text/text_theme.h | 13 ++++++++++++- .../text_drag/text_drag_overlay_modifier.cpp | 2 +- .../pattern/text_drag/text_drag_pattern.cpp | 10 ++++++++++ .../pattern/text_drag/text_drag_pattern.h | 1 + 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/frameworks/core/components/text/text_theme.h b/frameworks/core/components/text/text_theme.h index b69688f4939..5cf2b9bacd6 100644 --- a/frameworks/core/components/text/text_theme.h +++ b/frameworks/core/components/text/text_theme.h @@ -22,7 +22,7 @@ #include "core/components/theme/theme_constants_defines.h" namespace OHOS::Ace { - +constexpr float DRAG_BACKGROUND_OPACITY = 0.95f; /** * TextTheme defines color and styles of ThemeComponent. TextTheme should be built * using TextTheme::Builder. @@ -63,6 +63,11 @@ public: theme->selectedColor_ = pattern->GetAttr(PATTERN_BG_COLOR_SELECTED, Color(0x33007dff)); auto draggable = pattern->GetAttr("draggable", "0"); theme->draggable_ = StringUtils::StringToInt(draggable); + auto dragBackgroundColor = pattern->GetAttr("drag_background_color", Color::WHITE); + if (SystemProperties::GetColorMode() == ColorMode::DARK) { + dragBackgroundColor = dragBackgroundColor.ChangeOpacity(DRAG_BACKGROUND_OPACITY); + } + theme->dragBackgroundColor_ = dragBackgroundColor; constexpr double childMinSize = 20.0; theme->linearSplitChildMinSize_ = pattern->GetAttr(LINEAR_SPLIT_CHILD_MIN_SIZE, childMinSize); theme->isTextFadeout_ = pattern->GetAttr("text_fadeout_enable", "") == "true"; @@ -109,12 +114,18 @@ public: return isShowHandle_; } + const Color& GetDragBackgroundColor() const + { + return dragBackgroundColor_; + } + protected: TextTheme() = default; private: TextStyle textStyle_; Color selectedColor_; + Color dragBackgroundColor_ = Color::WHITE; bool draggable_ = false; double linearSplitChildMinSize_ = 20.0; bool isTextFadeout_ = false; 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 3fc55cc5662..7d2ad647b00 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 @@ -38,7 +38,7 @@ void TextDragOverlayModifier::onDraw(DrawingContext& context) auto pattern = DynamicCast(pattern_.Upgrade()); CHECK_NULL_VOID(pattern); auto& canvas = context.canvas; - Color color(TEXT_DRAG_COLOR_BG); + Color color = pattern->GetDragBackgroundColor(); RSBrush brush; brush.SetColor(ToRSColor(color)); brush.SetAntiAlias(true); diff --git a/frameworks/core/components_ng/pattern/text_drag/text_drag_pattern.cpp b/frameworks/core/components_ng/pattern/text_drag/text_drag_pattern.cpp index ef0f3d4f16a..fc32e31f399 100644 --- a/frameworks/core/components_ng/pattern/text_drag/text_drag_pattern.cpp +++ b/frameworks/core/components_ng/pattern/text_drag/text_drag_pattern.cpp @@ -18,6 +18,7 @@ #include #include "base/utils/utils.h" +#include "core/components/text/text_theme.h" #include "core/components_ng/pattern/text/text_pattern.h" #include "core/components_ng/pattern/text_drag/text_drag_base.h" #include "core/components_ng/render/drawing.h" @@ -316,4 +317,13 @@ void TextDragPattern::CalculateLine(std::vector& points, std::shared_ path->LineTo(crossPoint.x, crossPoint.y); } } + +Color TextDragPattern::GetDragBackgroundColor() +{ + auto pipeline = PipelineContext::GetCurrentContext(); + CHECK_NULL_RETURN(pipeline, Color(TEXT_DRAG_COLOR_BG)); + auto textTheme = pipeline->GetTheme(); + CHECK_NULL_RETURN(textTheme, Color(TEXT_DRAG_COLOR_BG)); + return textTheme->GetDragBackgroundColor(); +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/text_drag/text_drag_pattern.h b/frameworks/core/components_ng/pattern/text_drag/text_drag_pattern.h index 507069149b4..7e0a8d398e1 100644 --- a/frameworks/core/components_ng/pattern/text_drag/text_drag_pattern.h +++ b/frameworks/core/components_ng/pattern/text_drag/text_drag_pattern.h @@ -211,6 +211,7 @@ public: return TEXT_DRAG_RADIUS; } + Color GetDragBackgroundColor(); protected: static TextDragData CalculateTextDragData(RefPtr& pattern, RefPtr& dragNode); static RectF GetHandler(const bool isLeftHandler, const std::vector boxes, const RectF contentRect,