mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2025-02-25 15:24:58 +00:00
!37631 Search支持SymbolGlyphModifier
Merge pull request !37631 from tangye/temp_20240521_searchsymbol_feature
This commit is contained in:
commit
c5098abdd7
@ -317,43 +317,125 @@ void JSSearch::SetSearchButton(const JSCallbackInfo& info)
|
||||
|
||||
void JSSearch::SetSearchIcon(const JSCallbackInfo& info)
|
||||
{
|
||||
if (info[0]->IsUndefined() || info[0]->IsNull()) {
|
||||
SetSearchDefaultIcon();
|
||||
return;
|
||||
}
|
||||
if (info[0]->IsObject()) {
|
||||
auto param = JSRef<JSObject>::Cast(info[0]);
|
||||
auto theme = GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(theme);
|
||||
|
||||
// set icon size
|
||||
CalcDimension size;
|
||||
auto sizeProp = param->GetProperty("size");
|
||||
if (!sizeProp->IsUndefined() && !sizeProp->IsNull() && ParseJsDimensionVpNG(sizeProp, size)) {
|
||||
if (LessNotEqual(size.Value(), 0.0) || size.Unit() == DimensionUnit::PERCENT) {
|
||||
size = theme->GetIconHeight();
|
||||
}
|
||||
bool isSymbolIcon = param->HasProperty("fontColor"); // only SymbolGlyph has fontColor property
|
||||
if (isSymbolIcon) {
|
||||
SetSearchSymbolIcon(info);
|
||||
} else {
|
||||
size = theme->GetIconHeight();
|
||||
}
|
||||
SearchModel::GetInstance()->SetSearchIconSize(size);
|
||||
|
||||
// set icon src
|
||||
std::string src;
|
||||
auto srcPathProp = param->GetProperty("src");
|
||||
if (srcPathProp->IsUndefined() || srcPathProp->IsNull() || !ParseJsMedia(srcPathProp, src)) {
|
||||
src = "";
|
||||
}
|
||||
std::string bundleName;
|
||||
std::string moduleName;
|
||||
GetJsMediaBundleInfo(srcPathProp, bundleName, moduleName);
|
||||
SearchModel::GetInstance()->SetSearchSrcPath(src, bundleName, moduleName);
|
||||
|
||||
// set icon color
|
||||
Color colorVal;
|
||||
auto colorProp = param->GetProperty("color");
|
||||
if (!colorProp->IsUndefined() && !colorProp->IsNull() && ParseJsColor(colorProp, colorVal)) {
|
||||
SearchModel::GetInstance()->SetSearchIconColor(colorVal);
|
||||
SetSearchImageIcon(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JSSearch::SetCancelDefaultIcon()
|
||||
{
|
||||
SearchModel::GetInstance()->SetCancelDefaultIcon();
|
||||
}
|
||||
|
||||
void JSSearch::SetCancelSymbolIcon(const JSCallbackInfo& info)
|
||||
{
|
||||
std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol = nullptr;
|
||||
auto param = JSRef<JSObject>::Cast(info[0]);
|
||||
auto iconProp = param->GetProperty("icon");
|
||||
SetSymbolOptionApply(info, iconSymbol, iconProp);
|
||||
SearchModel::GetInstance()->SetCancelSymbolIcon(iconSymbol);
|
||||
}
|
||||
|
||||
void JSSearch::SetCancelImageIcon(const JSCallbackInfo& info)
|
||||
{
|
||||
auto param = JSRef<JSObject>::Cast(info[0]);
|
||||
auto theme = GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(theme);
|
||||
auto iconJsVal = param->GetProperty("icon");
|
||||
if (!iconJsVal->IsObject()) {
|
||||
return;
|
||||
}
|
||||
auto iconParam = JSRef<JSObject>::Cast(iconJsVal);
|
||||
|
||||
// set icon size
|
||||
CalcDimension iconSize;
|
||||
auto iconSizeProp = iconParam->GetProperty("size");
|
||||
if (!iconSizeProp->IsUndefined() && !iconSizeProp->IsNull() && ParseJsDimensionVpNG(iconSizeProp, iconSize)) {
|
||||
if (LessNotEqual(iconSize.Value(), 0.0) || iconSize.Unit() == DimensionUnit::PERCENT) {
|
||||
iconSize = theme->GetIconHeight();
|
||||
}
|
||||
} else {
|
||||
iconSize = theme->GetIconHeight();
|
||||
}
|
||||
|
||||
// set icon src
|
||||
std::string iconSrc;
|
||||
auto iconSrcProp = iconParam->GetProperty("src");
|
||||
if (iconSrcProp->IsUndefined() || iconSrcProp->IsNull() || !ParseJsMedia(iconSrcProp, iconSrc)) {
|
||||
iconSrc = "";
|
||||
}
|
||||
|
||||
// set icon color
|
||||
Color iconColor = theme->GetSearchIconColor();
|
||||
auto iconColorProp = iconParam->GetProperty("color");
|
||||
if (!iconColorProp->IsUndefined() && !iconColorProp->IsNull() && ParseJsColor(iconColorProp, iconColor)) {
|
||||
NG::IconOptions cancelIconOptions = NG::IconOptions(iconColor, iconSize, iconSrc, "", "");
|
||||
SearchModel::GetInstance()->SetCancelImageIcon(cancelIconOptions);
|
||||
} else {
|
||||
NG::IconOptions cancelIconOptions = NG::IconOptions(iconSize, iconSrc, "", "");
|
||||
SearchModel::GetInstance()->SetCancelImageIcon(cancelIconOptions);
|
||||
}
|
||||
}
|
||||
|
||||
void JSSearch::SetSearchDefaultIcon()
|
||||
{
|
||||
SearchModel::GetInstance()->SetSearchDefaultIcon();
|
||||
}
|
||||
|
||||
void JSSearch::SetSearchSymbolIcon(const JSCallbackInfo& info)
|
||||
{
|
||||
std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol = nullptr;
|
||||
SetSymbolOptionApply(info, iconSymbol, info[0]);
|
||||
SearchModel::GetInstance()->SetSearchSymbolIcon(iconSymbol);
|
||||
}
|
||||
|
||||
void JSSearch::SetSearchImageIcon(const JSCallbackInfo& info)
|
||||
{
|
||||
auto param = JSRef<JSObject>::Cast(info[0]);
|
||||
auto theme = GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(theme);
|
||||
|
||||
// set icon size
|
||||
CalcDimension size;
|
||||
auto sizeProp = param->GetProperty("size");
|
||||
if (!sizeProp->IsUndefined() && !sizeProp->IsNull() && ParseJsDimensionVpNG(sizeProp, size)) {
|
||||
if (LessNotEqual(size.Value(), 0.0) || size.Unit() == DimensionUnit::PERCENT) {
|
||||
size = theme->GetIconHeight();
|
||||
}
|
||||
} else {
|
||||
size = theme->GetIconHeight();
|
||||
}
|
||||
|
||||
// set icon src
|
||||
std::string src;
|
||||
auto srcPathProp = param->GetProperty("src");
|
||||
if (srcPathProp->IsUndefined() || srcPathProp->IsNull() || !ParseJsMedia(srcPathProp, src)) {
|
||||
src = "";
|
||||
}
|
||||
// set icon color
|
||||
Color colorVal = theme->GetSearchIconColor();
|
||||
auto colorProp = param->GetProperty("color");
|
||||
if (!colorProp->IsUndefined() && !colorProp->IsNull() && ParseJsColor(colorProp, colorVal)) {
|
||||
ParseJsColor(colorProp, colorVal);
|
||||
}
|
||||
|
||||
std::string bundleName;
|
||||
std::string moduleName;
|
||||
GetJsMediaBundleInfo(srcPathProp, bundleName, moduleName);
|
||||
NG::IconOptions searchIconOptions = NG::IconOptions(colorVal, size, src, bundleName, moduleName);
|
||||
SearchModel::GetInstance()->SetSearchImageIcon(searchIconOptions);
|
||||
}
|
||||
|
||||
static CancelButtonStyle ConvertStrToCancelButtonStyle(const std::string& value)
|
||||
{
|
||||
if (value == "CONSTANT") {
|
||||
@ -386,13 +468,8 @@ void JSSearch::SetCancelButton(const JSCallbackInfo& info)
|
||||
SearchModel::GetInstance()->SetCancelButtonStyle(cancelButtonStyle);
|
||||
|
||||
auto iconProp = param->GetProperty("icon");
|
||||
Color iconColor = theme->GetSearchIconColor();
|
||||
if (iconProp->IsUndefined() || iconProp->IsNull()) {
|
||||
SearchModel::GetInstance()->SetCancelIconSize(theme->GetIconHeight());
|
||||
if (!JSSeacrhTheme::ObtainCancelIconColor(iconColor)) {
|
||||
SearchModel::GetInstance()->SetCancelIconColor(iconColor);
|
||||
}
|
||||
SearchModel::GetInstance()->SetRightIconSrcPath("");
|
||||
SetCancelDefaultIcon();
|
||||
} else {
|
||||
SetIconStyle(info);
|
||||
}
|
||||
@ -403,39 +480,20 @@ void JSSearch::SetIconStyle(const JSCallbackInfo& info)
|
||||
if (!info[0]->IsObject()) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto param = JSRef<JSObject>::Cast(info[0]);
|
||||
auto iconJsVal = param->GetProperty("icon");
|
||||
if (!iconJsVal->IsObject()) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto iconParam = JSRef<JSObject>::Cast(iconJsVal);
|
||||
// set icon size
|
||||
CalcDimension iconSize;
|
||||
auto iconSizeProp = iconParam->GetProperty("size");
|
||||
auto theme = GetTheme<SearchTheme>();
|
||||
if (!iconSizeProp->IsUndefined() && !iconSizeProp->IsNull() && ParseJsDimensionVpNG(iconSizeProp, iconSize)) {
|
||||
if (LessNotEqual(iconSize.Value(), 0.0) || iconSize.Unit() == DimensionUnit::PERCENT) {
|
||||
iconSize = theme->GetIconHeight();
|
||||
}
|
||||
bool isSymbolIcon = iconParam->HasProperty("fontColor"); // only SymbolGlyph has fontColor property
|
||||
if (isSymbolIcon) {
|
||||
SetCancelSymbolIcon(info);
|
||||
} else {
|
||||
iconSize = theme->GetIconHeight();
|
||||
SetCancelImageIcon(info);
|
||||
}
|
||||
SearchModel::GetInstance()->SetCancelIconSize(iconSize);
|
||||
|
||||
// set icon color
|
||||
Color iconColor;
|
||||
auto iconColorProp = iconParam->GetProperty("color");
|
||||
if (!iconColorProp->IsUndefined() && !iconColorProp->IsNull() && ParseJsColor(iconColorProp, iconColor)) {
|
||||
SearchModel::GetInstance()->SetCancelIconColor(iconColor);
|
||||
}
|
||||
|
||||
// set icon src
|
||||
std::string iconSrc;
|
||||
auto iconSrcProp = iconParam->GetProperty("src");
|
||||
if (iconSrcProp->IsUndefined() || iconSrcProp->IsNull() || !ParseJsMedia(iconSrcProp, iconSrc)) {
|
||||
iconSrc = "";
|
||||
}
|
||||
SearchModel::GetInstance()->SetRightIconSrcPath(iconSrc);
|
||||
}
|
||||
|
||||
void JSSearch::SetTextColor(const JSCallbackInfo& info)
|
||||
|
@ -82,6 +82,12 @@ public:
|
||||
static void SetDragPreviewOptions(const JSCallbackInfo& info);
|
||||
static void EditMenuOptions(const JSCallbackInfo& info);
|
||||
static void SetEnablePreviewText(const JSCallbackInfo& info);
|
||||
static void SetSearchDefaultIcon();
|
||||
static void SetSearchSymbolIcon(const JSCallbackInfo& info);
|
||||
static void SetSearchImageIcon(const JSCallbackInfo& info);
|
||||
static void SetCancelDefaultIcon();
|
||||
static void SetCancelSymbolIcon(const JSCallbackInfo& info);
|
||||
static void SetCancelImageIcon(const JSCallbackInfo& info);
|
||||
};
|
||||
|
||||
class JSSearchController final : public Referenced {
|
||||
|
@ -37,6 +37,12 @@ public:
|
||||
void SetSearchSrcPath(
|
||||
const std::string& src, const std::string& bundleName, const std::string& moduleName) override {}
|
||||
void SetRightIconSrcPath(const std::string& src) override {}
|
||||
void SetSearchSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol) override{}
|
||||
void SetSearchDefaultIcon() override{}
|
||||
void SetSearchImageIcon(NG::IconOptions& iconOptions) override{}
|
||||
void SetCancelSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol) override{}
|
||||
void SetCancelDefaultIcon() override{}
|
||||
void SetCancelImageIcon(NG::IconOptions& iconOptions) override{}
|
||||
void SetCancelButtonStyle(OHOS::Ace::CancelButtonStyle cancelButtonStyle) override {}
|
||||
void SetCancelIconSize(const Dimension& value) override {}
|
||||
void SetCancelIconColor(const Color& color) override {}
|
||||
|
@ -67,6 +67,26 @@ public:
|
||||
json->PutExtAttr("searchButton", GetSearchButton().value_or("")->c_str(), filter);
|
||||
}
|
||||
|
||||
const std::function<void(WeakPtr<NG::FrameNode>)>& GetSearchIconSymbol() const
|
||||
{
|
||||
return searchIconSymbol_;
|
||||
}
|
||||
|
||||
void SetSearchIconSymbol(const std::function<void(WeakPtr<NG::FrameNode>)>& searchIconSymbol)
|
||||
{
|
||||
searchIconSymbol_ = searchIconSymbol;
|
||||
}
|
||||
|
||||
const std::function<void(WeakPtr<NG::FrameNode>)>& GetCancelIconSymbol() const
|
||||
{
|
||||
return cancelIconSymbol_;
|
||||
}
|
||||
|
||||
void SetCancelIconSymbol(const std::function<void(WeakPtr<NG::FrameNode>)>& cancelIconSymbol)
|
||||
{
|
||||
cancelIconSymbol_ = cancelIconSymbol;
|
||||
}
|
||||
|
||||
ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SearchButton, std::optional<std::string>, PROPERTY_UPDATE_MEASURE);
|
||||
ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CancelButtonStyle, CancelButtonStyle, PROPERTY_UPDATE_MEASURE);
|
||||
ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CancelButtonUDSize, Dimension, PROPERTY_UPDATE_MEASURE);
|
||||
@ -74,6 +94,10 @@ public:
|
||||
ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CaretUDWidth, Dimension, PROPERTY_UPDATE_MEASURE);
|
||||
ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SearchButtonFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
|
||||
ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FontFeature, FONT_FEATURES_LIST, PROPERTY_UPDATE_MEASURE);
|
||||
|
||||
private:
|
||||
std::function<void(WeakPtr<NG::FrameNode>)> searchIconSymbol_;
|
||||
std::function<void(WeakPtr<NG::FrameNode>)> cancelIconSymbol_;
|
||||
};
|
||||
|
||||
} // namespace OHOS::Ace::NG
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <mutex>
|
||||
|
||||
#include "core/components_ng/pattern/search/search_event_hub.h"
|
||||
#include "core/components_ng/pattern/search/search_node.h"
|
||||
#include "core/components_ng/pattern/text_field/text_field_controller.h"
|
||||
|
||||
namespace OHOS::Ace {
|
||||
@ -37,6 +38,12 @@ public:
|
||||
virtual void SetSearchIconSize(const Dimension& value);
|
||||
virtual void SetSearchIconColor(const Color& color);
|
||||
virtual void SetSearchSrcPath(const std::string& src, const std::string& bundleName, const std::string& moduleName);
|
||||
virtual void SetSearchSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol);
|
||||
virtual void SetSearchDefaultIcon();
|
||||
virtual void SetSearchImageIcon(NG::IconOptions& iconOptions);
|
||||
virtual void SetCancelSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol);
|
||||
virtual void SetCancelDefaultIcon();
|
||||
virtual void SetCancelImageIcon(NG::IconOptions &iconOptions);
|
||||
virtual void SetRightIconSrcPath(const std::string& src);
|
||||
virtual void SetCancelButtonStyle(CancelButtonStyle cancelButtonStyle);
|
||||
virtual void SetCancelIconSize(const Dimension& value);
|
||||
|
@ -44,6 +44,7 @@ const std::string INSPECTOR_PREFIX = "__SearchField__";
|
||||
const std::vector<std::string> SPECICALIZED_INSPECTOR_INDEXS = { "", "Image__", "CancelImage__", "CancelButton__",
|
||||
"Button__" };
|
||||
const std::string DROP_TYPE_STYLED_STRING = "ApplicationDefinedType";
|
||||
constexpr Dimension ICON_HEIGHT = 16.0_vp;
|
||||
|
||||
void UpdateInnerInspector(FrameNode* frameNode, const std::string& key)
|
||||
{
|
||||
@ -195,6 +196,33 @@ void SearchModelNG::SetSearchSrcPath(
|
||||
pattern->SetSearchSrcPath(src, bundleName, moduleName);
|
||||
}
|
||||
|
||||
void SearchModelNG::SetSearchDefaultIcon()
|
||||
{
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>();
|
||||
CHECK_NULL_VOID(pattern);
|
||||
pattern->InitSearchIconColorSize();
|
||||
pattern->CreateSearchIcon("");
|
||||
}
|
||||
|
||||
void SearchModelNG::SetSearchImageIcon(IconOptions &iconOptions)
|
||||
{
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>();
|
||||
CHECK_NULL_VOID(pattern);
|
||||
pattern->SetSearchImageIcon(iconOptions);
|
||||
ACE_UPDATE_LAYOUT_PROPERTY(SearchLayoutProperty, SearchIconUDSize, iconOptions.GetSize().value());
|
||||
}
|
||||
|
||||
void SearchModelNG::SetSearchSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol)
|
||||
{
|
||||
auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
|
||||
auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>();
|
||||
CHECK_NULL_VOID(layoutProperty);
|
||||
layoutProperty->SetSearchIconSymbol(iconSymbol);
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>();
|
||||
CHECK_NULL_VOID(pattern);
|
||||
pattern->SetSearchSymbolIcon();
|
||||
}
|
||||
|
||||
void SearchModelNG::SetRightIconSrcPath(const std::string& src)
|
||||
{
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>();
|
||||
@ -225,6 +253,33 @@ void SearchModelNG::SetCancelIconColor(const Color& color)
|
||||
pattern->SetCancelIconColor(color);
|
||||
}
|
||||
|
||||
void SearchModelNG::SetCancelDefaultIcon()
|
||||
{
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>();
|
||||
CHECK_NULL_VOID(pattern);
|
||||
pattern->InitCancelIconColorSize();
|
||||
pattern->CreateCancelIcon();
|
||||
}
|
||||
|
||||
void SearchModelNG::SetCancelImageIcon(IconOptions &iconOptions)
|
||||
{
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>();
|
||||
CHECK_NULL_VOID(pattern);
|
||||
pattern->SetCancelImageIcon(iconOptions);
|
||||
ACE_UPDATE_LAYOUT_PROPERTY(SearchLayoutProperty, CancelButtonUDSize, iconOptions.GetSize().value());
|
||||
}
|
||||
|
||||
void SearchModelNG::SetCancelSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol)
|
||||
{
|
||||
auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
|
||||
auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>();
|
||||
CHECK_NULL_VOID(layoutProperty);
|
||||
layoutProperty->SetCancelIconSymbol(iconSymbol);
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>();
|
||||
CHECK_NULL_VOID(pattern);
|
||||
pattern->SetCancelSymbolIcon();
|
||||
}
|
||||
|
||||
void SearchModelNG::SetSearchButtonFontSize(const Dimension& value)
|
||||
{
|
||||
auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
|
||||
@ -1016,6 +1071,16 @@ void SearchModelNG::SetSearchIconColor(FrameNode* frameNode, const Color& color)
|
||||
pattern->SetSearchIconColor(color);
|
||||
}
|
||||
|
||||
void SearchModelNG::SetSearchImageIcon(FrameNode *frameNode, IconOptions &iconOptions)
|
||||
{
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>(frameNode);
|
||||
CHECK_NULL_VOID(pattern);
|
||||
pattern->SetSearchImageIcon(iconOptions);
|
||||
ACE_UPDATE_NODE_LAYOUT_PROPERTY(
|
||||
SearchLayoutProperty, SearchIconUDSize, iconOptions.GetSize().value_or(ICON_HEIGHT), frameNode);
|
||||
}
|
||||
|
||||
void SearchModelNG::SetSearchButton(FrameNode* frameNode, const std::string& text)
|
||||
{
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
@ -1207,6 +1272,17 @@ void SearchModelNG::SetRightIconSrcPath(FrameNode* frameNode, const std::string&
|
||||
pattern->SetRightIconSrcPath(src);
|
||||
}
|
||||
|
||||
void SearchModelNG::SetCancelImageIcon(FrameNode *frameNode, IconOptions &iconOptions)
|
||||
{
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<SearchPattern>(frameNode);
|
||||
CHECK_NULL_VOID(pattern);
|
||||
pattern->SetCancelImageIcon(iconOptions);
|
||||
auto pipeline = PipelineContext::GetCurrentContext();
|
||||
ACE_UPDATE_NODE_LAYOUT_PROPERTY(
|
||||
SearchLayoutProperty, CancelButtonUDSize, iconOptions.GetSize().value_or(ICON_HEIGHT), frameNode);
|
||||
}
|
||||
|
||||
void SearchModelNG::SetSearchEnterKeyType(FrameNode* frameNode, TextInputAction value)
|
||||
{
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
|
@ -35,6 +35,12 @@ public:
|
||||
void SetSearchIconColor(const Color& color) override;
|
||||
void SetSearchSrcPath(
|
||||
const std::string& src, const std::string& bundleName, const std::string& moduleName) override;
|
||||
void SetSearchSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol) override;
|
||||
void SetSearchDefaultIcon() override;
|
||||
void SetSearchImageIcon(NG::IconOptions& iconOptions) override;
|
||||
void SetCancelSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol) override;
|
||||
void SetCancelDefaultIcon() override;
|
||||
void SetCancelImageIcon(NG::IconOptions& iconOptions) override;
|
||||
void SetRightIconSrcPath(const std::string& src) override;
|
||||
void SetCancelButtonStyle(CancelButtonStyle cancelButtonStyle) override;
|
||||
void SetCancelIconSize(const Dimension& value) override;
|
||||
@ -99,6 +105,7 @@ public:
|
||||
static void SetSearchIconSize(FrameNode* frameNode, const Dimension& value);
|
||||
static void SetSearchSrcPath(FrameNode* frameNode, const std::string& src);
|
||||
static void SetSearchIconColor(FrameNode* frameNode, const Color& color);
|
||||
static void SetSearchImageIcon(FrameNode* frameNode, IconOptions& iconOptions);
|
||||
static void SetSearchButton(FrameNode* frameNode, const std::string& text);
|
||||
static void SetSearchButtonFontSize(FrameNode* frameNode, const Dimension& value);
|
||||
static void SetSearchButtonFontColor(FrameNode* frameNode, const Color& color);
|
||||
@ -114,6 +121,7 @@ public:
|
||||
static void SetCancelIconColor(FrameNode* frameNode, const Color& color);
|
||||
static void SetCancelIconSize(FrameNode* frameNode, const Dimension& value);
|
||||
static void SetCancelButtonStyle(FrameNode* frameNode, CancelButtonStyle style);
|
||||
static void SetCancelImageIcon(FrameNode* frameNode, IconOptions& iconOptions);
|
||||
static void SetHeight(FrameNode* frameNode, const Dimension& height);
|
||||
static void SetSearchEnterKeyType(FrameNode* frameNode, TextInputAction value);
|
||||
static void SetId(FrameNode* frameNode, const std::string& key);
|
||||
|
@ -21,6 +21,110 @@
|
||||
#include "core/components_ng/base/group_node.h"
|
||||
|
||||
namespace OHOS::Ace::NG {
|
||||
class IconOptions {
|
||||
public:
|
||||
IconOptions(CalcDimension size) : size_(size)
|
||||
{}
|
||||
|
||||
IconOptions(Color color, CalcDimension size) : color_(color), size_(size)
|
||||
{}
|
||||
|
||||
IconOptions(std::string src, std::string bundleName = "", std::string moduleName = "")
|
||||
: src_(src), bundleName_(bundleName), moduleName_(moduleName)
|
||||
{}
|
||||
|
||||
IconOptions(CalcDimension size, std::string src, std::string bundleName, std::string moduleName)
|
||||
: size_(size), src_(src), bundleName_(bundleName), moduleName_(moduleName)
|
||||
{}
|
||||
|
||||
IconOptions(Color color, CalcDimension size, std::string src, std::string bundleName, std::string moduleName)
|
||||
: color_(color), size_(size), src_(src), bundleName_(bundleName), moduleName_(moduleName)
|
||||
{}
|
||||
|
||||
IconOptions() = default;
|
||||
~IconOptions() = default;
|
||||
|
||||
std::optional<Color>& GetColor()
|
||||
{
|
||||
return color_;
|
||||
}
|
||||
|
||||
std::optional<Dimension>& GetSize()
|
||||
{
|
||||
return size_;
|
||||
}
|
||||
|
||||
std::optional<std::string>& GetSrc()
|
||||
{
|
||||
return src_;
|
||||
}
|
||||
|
||||
std::optional<std::string>& GetBundleName()
|
||||
{
|
||||
return bundleName_;
|
||||
}
|
||||
|
||||
std::optional<std::string>& GetModuleName()
|
||||
{
|
||||
return moduleName_;
|
||||
}
|
||||
|
||||
void UpdateSrc(std::string src, std::string bundleName, std::string moduleName)
|
||||
{
|
||||
src_ = src;
|
||||
moduleName_ = moduleName;
|
||||
bundleName_ = bundleName;
|
||||
}
|
||||
|
||||
void UpdateSize(Dimension size)
|
||||
{
|
||||
size_ = size;
|
||||
}
|
||||
|
||||
void UpdateColor(Color color)
|
||||
{
|
||||
color_ = color;
|
||||
}
|
||||
|
||||
bool operator==(const IconOptions& info) const
|
||||
{
|
||||
return color_ == info.color_ && size_ == info.size_ && src_ == info.src_ && bundleName_ == info.bundleName_ &&
|
||||
moduleName_ == info.moduleName_;
|
||||
}
|
||||
|
||||
bool operator!=(const IconOptions& info) const
|
||||
{
|
||||
return !(operator==(info));
|
||||
}
|
||||
|
||||
std::string ToString() const
|
||||
{
|
||||
auto json = JsonUtil::Create(true);
|
||||
if (src_.has_value()) {
|
||||
json->Put("src", src_.value().c_str());
|
||||
}
|
||||
if (bundleName_.has_value()) {
|
||||
json->Put("bundleName", bundleName_.value().c_str());
|
||||
}
|
||||
if (moduleName_.has_value()) {
|
||||
json->Put("moduleName", moduleName_.value().c_str());
|
||||
}
|
||||
if (size_.has_value()) {
|
||||
json->Put("size", size_.value().ToString().c_str());
|
||||
}
|
||||
if (color_.has_value()) {
|
||||
json->Put("color", color_.value().ToString().c_str());
|
||||
}
|
||||
return json->ToString();
|
||||
}
|
||||
|
||||
private:
|
||||
std::optional<Color> color_;
|
||||
std::optional<Dimension> size_;
|
||||
std::optional<std::string> src_;
|
||||
std::optional<std::string> bundleName_;
|
||||
std::optional<std::string> moduleName_;
|
||||
};
|
||||
|
||||
class ACE_EXPORT SearchNode : public GroupNode {
|
||||
DECLARE_ACE_TYPE(SearchNode, GroupNode);
|
||||
@ -81,44 +185,104 @@ public:
|
||||
return cancelButtonId_.value();
|
||||
}
|
||||
|
||||
const Dimension& GetSearchIconSize() const
|
||||
Dimension& GetSearchImageIconSize()
|
||||
{
|
||||
return searchIconSize_;
|
||||
return searchImageIconOptions_.GetSize().value();
|
||||
}
|
||||
|
||||
const Dimension& GetCancelIconSize() const
|
||||
Dimension& GetCancelImageIconSize()
|
||||
{
|
||||
return cancelIconSize_;
|
||||
return cancelImageIconOptions_.GetSize().value();
|
||||
}
|
||||
|
||||
const Color& GetSearchIconColor() const
|
||||
const Dimension& GetSearchSymbolIconSize() const
|
||||
{
|
||||
return searchIconColor_;
|
||||
return searchSymbolIconSize_;
|
||||
}
|
||||
|
||||
const Color& GetCancelIconColor() const
|
||||
const Dimension& GetCancelSymbolIconSize() const
|
||||
{
|
||||
return cancelIconColor_;
|
||||
return cancelSymbolIconSize_;
|
||||
}
|
||||
|
||||
void SetSearchIconSize(const Dimension searchIconSize)
|
||||
const Color& GetSearchSymbolIconColor() const
|
||||
{
|
||||
searchIconSize_ = searchIconSize;
|
||||
return searchSymbolIconColor_;
|
||||
}
|
||||
|
||||
void SetCancelIconSize(const Dimension cancelIconSize)
|
||||
const Color& GetCancelSymbolIconColor() const
|
||||
{
|
||||
cancelIconSize_ = cancelIconSize;
|
||||
return cancelSymbolIconColor_;
|
||||
}
|
||||
|
||||
void SetSearchIconColor(const Color searchIconColor)
|
||||
Color& GetSearchImageIconColor()
|
||||
{
|
||||
searchIconColor_ = searchIconColor;
|
||||
return searchImageIconOptions_.GetColor().value();
|
||||
}
|
||||
|
||||
void SetCancelIconColor(const Color cancelIconColor)
|
||||
Color& GetCancelImageIconColor()
|
||||
{
|
||||
cancelIconColor_ = cancelIconColor;
|
||||
return cancelImageIconOptions_.GetColor().value();
|
||||
}
|
||||
|
||||
IconOptions& GetSearchImageIconOptions()
|
||||
{
|
||||
return searchImageIconOptions_;
|
||||
}
|
||||
|
||||
IconOptions& GetCancelImageIconOptions()
|
||||
{
|
||||
return cancelImageIconOptions_;
|
||||
}
|
||||
|
||||
void SetSearchImageIconSize(Dimension searchIconSize)
|
||||
{
|
||||
searchImageIconOptions_.UpdateSize(searchIconSize);
|
||||
}
|
||||
|
||||
void SetCancelImageIconSize(Dimension cancelIconSize)
|
||||
{
|
||||
cancelImageIconOptions_.UpdateSize(cancelIconSize);
|
||||
}
|
||||
|
||||
void SetSearchSymbolIconSize(Dimension searchIconSize)
|
||||
{
|
||||
searchSymbolIconSize_ = searchIconSize;
|
||||
}
|
||||
|
||||
void SetCancelSymbolIconSize(Dimension cancelIconSize)
|
||||
{
|
||||
cancelSymbolIconSize_ = cancelIconSize;
|
||||
}
|
||||
|
||||
void SetSearchSymbolIconColor(Color searchIconColor)
|
||||
{
|
||||
searchSymbolIconColor_ = searchIconColor;
|
||||
}
|
||||
|
||||
void SetCancelSymbolIconColor(Color cancelIconColor)
|
||||
{
|
||||
cancelSymbolIconColor_ = cancelIconColor;
|
||||
}
|
||||
|
||||
void SetSearchImageIconColor(Color searchIconColor)
|
||||
{
|
||||
searchImageIconOptions_.UpdateColor(searchIconColor);
|
||||
}
|
||||
|
||||
void SetCancelImageIconColor(Color cancelIconColor)
|
||||
{
|
||||
cancelImageIconOptions_.UpdateColor(cancelIconColor);
|
||||
}
|
||||
|
||||
void SetSearchImageIconOptions(IconOptions options)
|
||||
{
|
||||
searchImageIconOptions_ = options;
|
||||
}
|
||||
|
||||
void SetCancelImageIconOptions(IconOptions options)
|
||||
{
|
||||
cancelImageIconOptions_ = options;
|
||||
}
|
||||
|
||||
void UpdateHasSearchIconNodeCreated(bool hasNodeCreated)
|
||||
@ -138,12 +302,15 @@ private:
|
||||
|
||||
std::set<int32_t> searchChildren_;
|
||||
|
||||
Dimension searchIconSize_ = 16.0_vp;
|
||||
Color searchIconColor_;
|
||||
Dimension cancelIconSize_ = 16.0_vp;
|
||||
Color cancelIconColor_;
|
||||
Dimension searchSymbolIconSize_ = 16.0_fp;
|
||||
Color searchSymbolIconColor_;
|
||||
Dimension cancelSymbolIconSize_ = 16.0_fp;
|
||||
Color cancelSymbolIconColor_;
|
||||
bool searchIconNodeCreated_ = false;
|
||||
bool cancelIconNodeCreated_ = false;
|
||||
|
||||
IconOptions searchImageIconOptions_ = IconOptions(16.0_vp);
|
||||
IconOptions cancelImageIconOptions_ = IconOptions(16.0_vp);
|
||||
};
|
||||
|
||||
} // namespace OHOS::Ace::NG
|
||||
|
@ -46,6 +46,7 @@ constexpr int32_t ERROR = -1;
|
||||
// The focus state requires an 2vp inner stroke, which should be indented by 1vp when drawn.
|
||||
constexpr Dimension FOCUS_OFFSET = 1.0_vp;
|
||||
constexpr Dimension UP_AND_DOWN_PADDING = 8.0_vp;
|
||||
constexpr Dimension SYMBOL_ICON_HEIGHT = 16.0_fp;
|
||||
constexpr float HOVER_OPACITY = 0.05f;
|
||||
constexpr float TOUCH_OPACITY = 0.1f;
|
||||
constexpr int32_t HOVER_TO_TOUCH_DURATION = 100;
|
||||
@ -1562,50 +1563,67 @@ std::string SearchPattern::SymbolColorToString(std::vector<Color>& colors) const
|
||||
}
|
||||
|
||||
void SearchPattern::InitIconColorSize()
|
||||
{
|
||||
InitSearchIconColorSize();
|
||||
InitCancelIconColorSize();
|
||||
}
|
||||
|
||||
void SearchPattern::InitSearchIconColorSize()
|
||||
{
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
CHECK_NULL_VOID(pipeline);
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(searchTheme);
|
||||
GetSearchNode()->SetSearchIconSize(searchTheme->GetIconHeight());
|
||||
GetSearchNode()->SetCancelIconSize(searchTheme->GetIconHeight());
|
||||
if (AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_TWELVE)) {
|
||||
GetSearchNode()->SetCancelIconColor(searchTheme->GetSymbolIconColor());
|
||||
GetSearchNode()->SetSearchIconColor(searchTheme->GetSymbolIconColor());
|
||||
} else {
|
||||
GetSearchNode()->SetCancelIconColor(searchTheme->GetSearchIconColor());
|
||||
GetSearchNode()->SetSearchIconColor(searchTheme->GetSearchIconColor());
|
||||
}
|
||||
GetSearchNode()->SetSearchSymbolIconColor(Color(searchTheme->GetSymbolIconColor()));
|
||||
GetSearchNode()->SetSearchSymbolIconSize(SYMBOL_ICON_HEIGHT);
|
||||
GetSearchNode()->SetSearchImageIconColor(Color(searchTheme->GetSearchIconColor()));
|
||||
GetSearchNode()->SetSearchImageIconSize(searchTheme->GetIconHeight());
|
||||
}
|
||||
|
||||
void SearchPattern::InitCancelIconColorSize()
|
||||
{
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
CHECK_NULL_VOID(pipeline);
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(searchTheme);
|
||||
GetSearchNode()->SetCancelSymbolIconColor(Color(searchTheme->GetSymbolIconColor()));
|
||||
GetSearchNode()->SetCancelSymbolIconSize(SYMBOL_ICON_HEIGHT);
|
||||
GetSearchNode()->SetCancelImageIconColor(Color(searchTheme->GetSearchIconColor()));
|
||||
GetSearchNode()->SetCancelImageIconSize(searchTheme->GetIconHeight());
|
||||
}
|
||||
|
||||
void SearchPattern::CreateSearchIcon(const std::string& src)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
if (AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_TWELVE) &&
|
||||
src.empty()) {
|
||||
CreateOrUpdateSymbol(IMAGE_INDEX, !GetSearchNode()->HasSearchIconNodeCreated());
|
||||
} else {
|
||||
CreateOrUpdateImage(IMAGE_INDEX, src, !GetSearchNode()->HasSearchIconNodeCreated(), "", "");
|
||||
}
|
||||
GetSearchNode()->UpdateHasSearchIconNodeCreated(true);
|
||||
if (src.empty()) {
|
||||
if (GetSearchNode()->HasSearchIconNodeCreated()) {
|
||||
return;
|
||||
}
|
||||
UpdateIconNode(IMAGE_INDEX, src, "", "");
|
||||
if (AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_TWELVE) &&
|
||||
src.empty()) {
|
||||
CreateOrUpdateSymbol(IMAGE_INDEX, !GetSearchNode()->HasSearchIconNodeCreated(), false);
|
||||
} else {
|
||||
GetSearchNode()->SetSearchImageIconOptions(IconOptions(src));
|
||||
CreateOrUpdateImage(IMAGE_INDEX, !GetSearchNode()->HasSearchIconNodeCreated());
|
||||
}
|
||||
GetSearchNode()->UpdateHasSearchIconNodeCreated(true);
|
||||
}
|
||||
|
||||
void SearchPattern::CreateCancelIcon()
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
if (GetSearchNode()->HasCancelIconNodeCreated()) {
|
||||
return;
|
||||
}
|
||||
if (AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_TWELVE)) {
|
||||
CreateOrUpdateSymbol(CANCEL_IMAGE_INDEX, !GetSearchNode()->HasCancelIconNodeCreated());
|
||||
CreateOrUpdateSymbol(CANCEL_IMAGE_INDEX, !GetSearchNode()->HasCancelIconNodeCreated(), false);
|
||||
} else {
|
||||
CreateOrUpdateImage(CANCEL_IMAGE_INDEX, "", !GetSearchNode()->HasCancelIconNodeCreated(), "", "");
|
||||
GetSearchNode()->SetCancelImageIconOptions(IconOptions());
|
||||
CreateOrUpdateImage(CANCEL_IMAGE_INDEX, !GetSearchNode()->HasCancelIconNodeCreated());
|
||||
}
|
||||
GetSearchNode()->UpdateHasCancelIconNodeCreated(true);
|
||||
}
|
||||
|
||||
void SearchPattern::CreateOrUpdateSymbol(int32_t index, bool isCreateNode)
|
||||
void SearchPattern::CreateOrUpdateSymbol(int32_t index, bool isCreateNode, bool isFromModifier)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
imageClickListener_ = nullptr;
|
||||
@ -1614,137 +1632,144 @@ void SearchPattern::CreateOrUpdateSymbol(int32_t index, bool isCreateNode)
|
||||
auto nodeId = ElementRegister::GetInstance()->MakeUniqueId();
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(searchTheme);
|
||||
auto frameNode = FrameNode::GetOrCreateFrameNode(
|
||||
auto iconFrameNode = FrameNode::GetOrCreateFrameNode(
|
||||
V2::SYMBOL_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<TextPattern>(); });
|
||||
auto layoutProperty = frameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
auto layoutProperty = iconFrameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
layoutProperty->UpdateSymbolSourceInfo(index == IMAGE_INDEX ? SymbolSourceInfo(searchTheme->GetSearchSymbolId())
|
||||
: SymbolSourceInfo(searchTheme->GetCancelSymbolId()));
|
||||
layoutProperty->UpdateFontSize(
|
||||
index == IMAGE_INDEX ? GetSearchNode()->GetSearchIconSize() : GetSearchNode()->GetCancelIconSize());
|
||||
layoutProperty->UpdateSymbolColorList(
|
||||
{ index == IMAGE_INDEX ? GetSearchNode()->GetSearchIconColor() : GetSearchNode()->GetCancelIconColor() });
|
||||
|
||||
index == IMAGE_INDEX ? GetSearchNode()->GetSearchSymbolIconSize() : GetSearchNode()->GetCancelSymbolIconSize());
|
||||
layoutProperty->UpdateSymbolColorList({index == IMAGE_INDEX ? GetSearchNode()->GetSearchSymbolIconColor()
|
||||
: GetSearchNode()->GetCancelSymbolIconColor()});
|
||||
auto parentInspector = GetSearchNode()->GetInspectorIdValue("");
|
||||
frameNode->UpdateInspectorId(INSPECTOR_PREFIX + SPECICALIZED_INSPECTOR_INDEXS[index] + parentInspector);
|
||||
iconFrameNode->UpdateInspectorId(INSPECTOR_PREFIX + SPECICALIZED_INSPECTOR_INDEXS[index] + parentInspector);
|
||||
|
||||
if (isFromModifier) {
|
||||
UpdateSymbolIconProperties(iconFrameNode, index);
|
||||
}
|
||||
|
||||
if (isCreateNode) {
|
||||
frameNode->MountToParent(GetSearchNode());
|
||||
iconFrameNode->MountToParent(GetSearchNode());
|
||||
if (index == CANCEL_IMAGE_INDEX) {
|
||||
auto cancelButtonEvent = frameNode->GetEventHub<ButtonEventHub>();
|
||||
auto cancelButtonEvent = iconFrameNode->GetEventHub<ButtonEventHub>();
|
||||
CHECK_NULL_VOID(cancelButtonEvent);
|
||||
cancelButtonEvent->SetEnabled(false);
|
||||
}
|
||||
frameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkModifyDone();
|
||||
} else {
|
||||
auto oldFrameNode = AceType::DynamicCast<FrameNode>(GetSearchNode()->GetChildAtIndex(index));
|
||||
CHECK_NULL_VOID(oldFrameNode);
|
||||
GetSearchNode()->ReplaceChild(oldFrameNode, frameNode);
|
||||
GetSearchNode()->ReplaceChild(oldFrameNode, iconFrameNode);
|
||||
if (index == CANCEL_IMAGE_INDEX) {
|
||||
UpdateIconChangeEvent();
|
||||
}
|
||||
frameNode->MarkModifyDone();
|
||||
frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
iconFrameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
}
|
||||
}
|
||||
|
||||
void SearchPattern::CreateOrUpdateImage(int32_t index, const std::string& src, bool isCreateNode,
|
||||
const std::string& bundleName, const std::string& moduleName)
|
||||
void SearchPattern::CreateOrUpdateImage(int32_t index, bool isCreateNode)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
imageClickListener_ = nullptr;
|
||||
auto frameNode = FrameNode::GetOrCreateFrameNode(V2::IMAGE_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
CHECK_NULL_VOID(pipeline);
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(searchTheme);
|
||||
auto iconFrameNode = FrameNode::GetOrCreateFrameNode(V2::IMAGE_ETS_TAG,
|
||||
ElementRegister::GetInstance()->MakeUniqueId(),
|
||||
[]() { return AceType::MakeRefPtr<ImagePattern>(); });
|
||||
HandleImageLayoutProperty(frameNode, index, src, bundleName, moduleName);
|
||||
auto imageRenderContext = frameNode->GetRenderContext();
|
||||
CHECK_NULL_VOID(imageRenderContext);
|
||||
auto parentInspector = GetSearchNode()->GetInspectorIdValue("");
|
||||
frameNode->UpdateInspectorId(INSPECTOR_PREFIX + SPECICALIZED_INSPECTOR_INDEXS[index] + parentInspector);
|
||||
auto imageRenderProperty = frameNode->GetPaintProperty<ImageRenderProperty>();
|
||||
CHECK_NULL_VOID(imageRenderProperty);
|
||||
imageRenderProperty->UpdateSvgFillColor(
|
||||
index == IMAGE_INDEX ? GetSearchNode()->GetSearchIconColor() : GetSearchNode()->GetCancelIconColor());
|
||||
UpdateImageIconProperties(iconFrameNode, index);
|
||||
if (isCreateNode) {
|
||||
frameNode->MountToParent(GetSearchNode());
|
||||
iconFrameNode->MountToParent(GetSearchNode());
|
||||
if (index == CANCEL_IMAGE_INDEX) {
|
||||
auto cancelButtonEvent = frameNode->GetEventHub<ButtonEventHub>();
|
||||
auto cancelButtonEvent = iconFrameNode->GetEventHub<ButtonEventHub>();
|
||||
CHECK_NULL_VOID(cancelButtonEvent);
|
||||
cancelButtonEvent->SetEnabled(false);
|
||||
}
|
||||
frameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkModifyDone();
|
||||
} else {
|
||||
auto oldFrameNode = AceType::DynamicCast<FrameNode>(GetSearchNode()->GetChildAtIndex(index));
|
||||
CHECK_NULL_VOID(oldFrameNode);
|
||||
GetSearchNode()->ReplaceChild(oldFrameNode, frameNode);
|
||||
GetSearchNode()->ReplaceChild(oldFrameNode, iconFrameNode);
|
||||
if (index == CANCEL_IMAGE_INDEX) {
|
||||
UpdateIconChangeEvent();
|
||||
}
|
||||
frameNode->MarkModifyDone();
|
||||
frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
iconFrameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
}
|
||||
}
|
||||
|
||||
void SearchPattern::HandleImageLayoutProperty(RefPtr<FrameNode>& frameNode, int32_t index, const std::string& src,
|
||||
const std::string& bundleName, const std::string& moduleName)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
CHECK_NULL_VOID(pipeline);
|
||||
ImageSourceInfo imageSourceInfo("");
|
||||
auto iconTheme = pipeline->GetTheme<IconTheme>();
|
||||
CHECK_NULL_VOID(iconTheme);
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(searchTheme);
|
||||
if (src.empty()) {
|
||||
imageSourceInfo.SetResourceId(
|
||||
index == IMAGE_INDEX ? InternalResource::ResourceId::SEARCH_SVG : InternalResource::ResourceId::CLOSE_SVG);
|
||||
auto iconPath = iconTheme->GetIconPath(
|
||||
index == IMAGE_INDEX ? InternalResource::ResourceId::SEARCH_SVG : InternalResource::ResourceId::CLOSE_SVG);
|
||||
imageSourceInfo.SetSrc(iconPath,
|
||||
index == IMAGE_INDEX ? GetSearchNode()->GetSearchIconColor() : GetSearchNode()->GetCancelIconColor());
|
||||
} else {
|
||||
imageSourceInfo.SetSrc(src);
|
||||
}
|
||||
if (index == IMAGE_INDEX) {
|
||||
imageSourceInfo.SetBundleName(bundleName);
|
||||
imageSourceInfo.SetModuleName(moduleName);
|
||||
}
|
||||
imageSourceInfo.SetFillColor(
|
||||
index == IMAGE_INDEX ? GetSearchNode()->GetSearchIconColor() : GetSearchNode()->GetCancelIconColor());
|
||||
auto imageLayoutProperty = frameNode->GetLayoutProperty<ImageLayoutProperty>();
|
||||
imageLayoutProperty->UpdateImageSourceInfo(imageSourceInfo);
|
||||
CalcSize imageCalcSize((CalcLength(searchTheme->GetIconHeight())), CalcLength(searchTheme->GetIconHeight()));
|
||||
imageLayoutProperty->UpdateUserDefinedIdealSize(imageCalcSize);
|
||||
}
|
||||
|
||||
void SearchPattern::SetSearchIconSize(const Dimension& value)
|
||||
{
|
||||
UpdateIconSize(IMAGE_INDEX, value);
|
||||
}
|
||||
|
||||
void SearchPattern::SetSearchSrcPath(
|
||||
const std::string& src, const std::string& bundleName, const std::string& moduleName)
|
||||
{
|
||||
UpdateIconNode(IMAGE_INDEX, src, bundleName, moduleName);
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto &imageIconOptions = GetSearchNode()->GetSearchImageIconOptions();
|
||||
imageIconOptions.UpdateSrc(std::string(src), std::string(bundleName), std::string(moduleName));
|
||||
UpdateImageIconNode(IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetSearchIconSize(const Dimension& value)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto& imageIconOptions = GetSearchNode()->GetSearchImageIconOptions();
|
||||
imageIconOptions.UpdateSize(Dimension(value));
|
||||
UpdateImageIconNode(IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetSearchIconColor(const Color& color)
|
||||
{
|
||||
UpdateIconColor(IMAGE_INDEX, color);
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto& imageIconOptions = GetSearchNode()->GetSearchImageIconOptions();
|
||||
imageIconOptions.UpdateColor(Color(color));
|
||||
UpdateImageIconNode(IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetSearchImageIcon(IconOptions& iconOptions)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto& imageIconOptions = GetSearchNode()->GetSearchImageIconOptions();
|
||||
if (iconOptions.GetColor().has_value()) {
|
||||
imageIconOptions.UpdateColor(iconOptions.GetColor().value());
|
||||
}
|
||||
if (iconOptions.GetSize().has_value()) {
|
||||
imageIconOptions.UpdateSize(iconOptions.GetSize().value());
|
||||
}
|
||||
if (iconOptions.GetSrc().has_value()) {
|
||||
imageIconOptions.UpdateSrc(iconOptions.GetSrc().value_or(""),
|
||||
iconOptions.GetBundleName().value_or(""),
|
||||
iconOptions.GetModuleName().value_or(""));
|
||||
}
|
||||
UpdateImageIconNode(IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetSearchSymbolIcon()
|
||||
{
|
||||
UpdateSymbolIconNode(IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetCancelIconSize(const Dimension& value)
|
||||
{
|
||||
UpdateIconSize(CANCEL_IMAGE_INDEX, value);
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto& imageIconOptions = GetSearchNode()->GetCancelImageIconOptions();
|
||||
imageIconOptions.UpdateSize(Dimension(value));
|
||||
UpdateImageIconNode(CANCEL_IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetCancelIconColor(const Color& color)
|
||||
{
|
||||
UpdateIconColor(CANCEL_IMAGE_INDEX, color);
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto &imageIconOptions = GetSearchNode()->GetCancelImageIconOptions();
|
||||
imageIconOptions.UpdateColor(Color(color));
|
||||
UpdateImageIconNode(CANCEL_IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetRightIconSrcPath(const std::string& src)
|
||||
{
|
||||
UpdateIconNode(CANCEL_IMAGE_INDEX, src, "", "");
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto &imageIconOptions = GetSearchNode()->GetCancelImageIconOptions();
|
||||
imageIconOptions.UpdateSrc(std::string(src), "", "");
|
||||
UpdateImageIconNode(CANCEL_IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetCancelButtonStyle(const CancelButtonStyle& style)
|
||||
@ -1754,115 +1779,128 @@ void SearchPattern::SetCancelButtonStyle(const CancelButtonStyle& style)
|
||||
UpdateChangeEvent(textFieldPattern->GetTextValue(), static_cast<int16_t>(style));
|
||||
}
|
||||
|
||||
void SearchPattern::UpdateIconNode(
|
||||
int32_t index, const std::string& src, const std::string& bundleName, const std::string& moduleName)
|
||||
void SearchPattern::SetCancelImageIcon(IconOptions& iconOptions)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto &imageIconOptions = GetSearchNode()->GetCancelImageIconOptions();
|
||||
if (iconOptions.GetColor().has_value()) {
|
||||
imageIconOptions.UpdateColor(iconOptions.GetColor().value());
|
||||
}
|
||||
if (iconOptions.GetSize().has_value()) {
|
||||
imageIconOptions.UpdateSize(iconOptions.GetSize().value());
|
||||
}
|
||||
if (iconOptions.GetSrc().has_value()) {
|
||||
imageIconOptions.UpdateSrc(iconOptions.GetSrc().value(),
|
||||
iconOptions.GetBundleName().value_or(""),
|
||||
iconOptions.GetModuleName().value_or(""));
|
||||
}
|
||||
UpdateImageIconNode(CANCEL_IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::SetCancelSymbolIcon()
|
||||
{
|
||||
UpdateSymbolIconNode(CANCEL_IMAGE_INDEX);
|
||||
}
|
||||
|
||||
void SearchPattern::UpdateImageIconNode(int32_t index)
|
||||
{
|
||||
bool isCurSymbolNode = IsSymbolIcon(index);
|
||||
bool isNeedSymbolNode =
|
||||
src.empty() && AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_TWELVE);
|
||||
if (isCurSymbolNode != isNeedSymbolNode) {
|
||||
if (isNeedSymbolNode) {
|
||||
CreateOrUpdateSymbol(index, false);
|
||||
} else {
|
||||
CreateOrUpdateImage(index, src, false, bundleName, moduleName);
|
||||
}
|
||||
if (isCurSymbolNode) {
|
||||
CreateOrUpdateImage(index, false);
|
||||
} else {
|
||||
UpdateIconSrc(index, src);
|
||||
auto frameNode = GetHost();
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
auto iconFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(index));
|
||||
UpdateImageIconProperties(iconFrameNode, index);
|
||||
iconFrameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
}
|
||||
}
|
||||
|
||||
void SearchPattern::UpdateIconSrc(int32_t index, const std::string& src)
|
||||
void SearchPattern::UpdateSymbolIconNode(int32_t index)
|
||||
{
|
||||
auto frameNode = GetHost();
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
auto iconFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(index));
|
||||
CHECK_NULL_VOID(iconFrameNode);
|
||||
if (iconFrameNode->GetTag() == V2::SYMBOL_ETS_TAG) {
|
||||
auto symbolLayoutProperty = iconFrameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
CHECK_NULL_VOID(symbolLayoutProperty);
|
||||
if (src.empty()) {
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
CHECK_NULL_VOID(pipeline);
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(searchTheme);
|
||||
|
||||
auto symbolLayoutProperty = iconFrameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
symbolLayoutProperty->UpdateSymbolSourceInfo(index == IMAGE_INDEX
|
||||
? SymbolSourceInfo(searchTheme->GetSearchSymbolId())
|
||||
: SymbolSourceInfo(searchTheme->GetCancelSymbolId()));
|
||||
}
|
||||
bool isCurSymbolNode = IsSymbolIcon(index);
|
||||
if (!isCurSymbolNode) {
|
||||
CreateOrUpdateSymbol(index, false, true);
|
||||
} else {
|
||||
auto frameNode = GetHost();
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
auto iconFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(index));
|
||||
UpdateSymbolIconProperties(iconFrameNode, index);
|
||||
iconFrameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
}
|
||||
}
|
||||
|
||||
void SearchPattern::UpdateImageIconProperties(RefPtr<FrameNode>& iconFrameNode, int32_t index)
|
||||
{
|
||||
CHECK_NULL_VOID(iconFrameNode);
|
||||
if (iconFrameNode->GetTag() == V2::IMAGE_ETS_TAG) {
|
||||
auto iconOptions = index == IMAGE_INDEX ? GetSearchNode()->GetSearchImageIconOptions()
|
||||
: GetSearchNode()->GetCancelImageIconOptions();
|
||||
auto imageLayoutProperty = iconFrameNode->GetLayoutProperty<ImageLayoutProperty>();
|
||||
CHECK_NULL_VOID(imageLayoutProperty);
|
||||
auto imageSourceInfo = imageLayoutProperty->GetImageSourceInfo().value();
|
||||
if (src.empty()) {
|
||||
ImageSourceInfo imageSourceInfo("");
|
||||
auto imageSourceInfoOp = imageLayoutProperty->GetImageSourceInfo();
|
||||
if (imageSourceInfoOp.has_value()) {
|
||||
imageSourceInfo = imageSourceInfoOp.value();
|
||||
}
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
CHECK_NULL_VOID(pipeline);
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
CHECK_NULL_VOID(searchTheme);
|
||||
auto iconTheme = pipeline->GetTheme<IconTheme>();
|
||||
CHECK_NULL_VOID(iconTheme);
|
||||
if (iconOptions.GetSrc().value_or("").empty()) {
|
||||
imageSourceInfo.SetResourceId(index == IMAGE_INDEX ? InternalResource::ResourceId::SEARCH_SVG
|
||||
: InternalResource::ResourceId::CLOSE_SVG);
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
CHECK_NULL_VOID(pipeline);
|
||||
auto iconPath = pipeline->GetTheme<IconTheme>()->GetIconPath(index == IMAGE_INDEX
|
||||
? InternalResource::ResourceId::SEARCH_SVG
|
||||
: InternalResource::ResourceId::CLOSE_SVG);
|
||||
auto color = pipeline->GetTheme<SearchTheme>()->GetSearchIconColor();
|
||||
imageSourceInfo.SetSrc(iconPath, color);
|
||||
auto iconPath = iconTheme->GetIconPath(index == IMAGE_INDEX ? InternalResource::ResourceId::SEARCH_SVG
|
||||
: InternalResource::ResourceId::CLOSE_SVG);
|
||||
imageSourceInfo.SetSrc(iconPath, iconOptions.GetColor().value_or(searchTheme->GetSearchIconColor()));
|
||||
} else {
|
||||
imageSourceInfo.SetSrc(src);
|
||||
imageSourceInfo.SetSrc(iconOptions.GetSrc().value());
|
||||
}
|
||||
imageSourceInfo.SetBundleName(iconOptions.GetBundleName().value_or(""));
|
||||
imageSourceInfo.SetModuleName(iconOptions.GetModuleName().value_or(""));
|
||||
imageSourceInfo.SetFillColor(iconOptions.GetColor().value_or(searchTheme->GetSearchIconColor()));
|
||||
imageLayoutProperty->UpdateImageSourceInfo(imageSourceInfo);
|
||||
CalcSize imageCalcSize(CalcLength(iconOptions.GetSize().value_or(searchTheme->GetIconHeight())),
|
||||
CalcLength(iconOptions.GetSize().value_or(searchTheme->GetIconHeight())));
|
||||
|
||||
imageLayoutProperty->UpdateUserDefinedIdealSize(imageCalcSize);
|
||||
auto parentInspector = GetSearchNode()->GetInspectorIdValue("");
|
||||
iconFrameNode->UpdateInspectorId(INSPECTOR_PREFIX + SPECICALIZED_INSPECTOR_INDEXS[index] + parentInspector);
|
||||
auto imageRenderProperty = iconFrameNode->GetPaintProperty<ImageRenderProperty>();
|
||||
CHECK_NULL_VOID(imageRenderProperty);
|
||||
imageSourceInfo.SetFillColor(iconOptions.GetColor().value_or(searchTheme->GetSearchIconColor()));
|
||||
imageLayoutProperty->UpdateImageSourceInfo(imageSourceInfo);
|
||||
imageRenderProperty->UpdateSvgFillColor(iconOptions.GetColor().value_or(searchTheme->GetSearchIconColor()));
|
||||
}
|
||||
iconFrameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
}
|
||||
|
||||
void SearchPattern::UpdateIconColor(int32_t index, const Color& color)
|
||||
void SearchPattern::UpdateSymbolIconProperties(RefPtr<FrameNode>& iconFrameNode, int32_t index)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto iconFrameNode = AceType::DynamicCast<FrameNode>(GetSearchNode()->GetChildAtIndex(index));
|
||||
auto host = GetHost();
|
||||
CHECK_NULL_VOID(host);
|
||||
CHECK_NULL_VOID(iconFrameNode);
|
||||
auto layoutProperty = host->GetLayoutProperty<SearchLayoutProperty>();
|
||||
CHECK_NULL_VOID(layoutProperty);
|
||||
if (index == IMAGE_INDEX) {
|
||||
GetSearchNode()->SetSearchIconColor(color);
|
||||
auto iconSymbol = layoutProperty->GetSearchIconSymbol();
|
||||
if (iconSymbol != nullptr) {
|
||||
iconSymbol(AccessibilityManager::WeakClaim(AccessibilityManager::RawPtr(iconFrameNode)));
|
||||
}
|
||||
} else {
|
||||
GetSearchNode()->SetCancelIconColor(color);
|
||||
}
|
||||
|
||||
if (iconFrameNode->GetTag() == V2::SYMBOL_ETS_TAG) {
|
||||
auto symbolLayoutProperty = iconFrameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
CHECK_NULL_VOID(symbolLayoutProperty);
|
||||
symbolLayoutProperty->UpdateSymbolColorList({ color });
|
||||
} else {
|
||||
auto imageLayoutProperty = iconFrameNode->GetLayoutProperty<ImageLayoutProperty>();
|
||||
CHECK_NULL_VOID(imageLayoutProperty);
|
||||
auto imageSourceInfo = imageLayoutProperty->GetImageSourceInfo().value();
|
||||
if (imageSourceInfo.IsSvg()) {
|
||||
imageSourceInfo.SetFillColor(color);
|
||||
imageLayoutProperty->UpdateImageSourceInfo(imageSourceInfo);
|
||||
|
||||
auto imageRenderProperty = iconFrameNode->GetPaintProperty<ImageRenderProperty>();
|
||||
CHECK_NULL_VOID(imageRenderProperty);
|
||||
imageRenderProperty->UpdateSvgFillColor(color);
|
||||
auto iconSymbol = layoutProperty->GetCancelIconSymbol();
|
||||
if (iconSymbol != nullptr) {
|
||||
iconSymbol(AccessibilityManager::WeakClaim(AccessibilityManager::RawPtr(iconFrameNode)));
|
||||
}
|
||||
}
|
||||
iconFrameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
}
|
||||
|
||||
void SearchPattern::UpdateIconSize(int32_t index, const Dimension& value)
|
||||
{
|
||||
CHECK_NULL_VOID(GetSearchNode());
|
||||
auto iconFrameNode = AceType::DynamicCast<FrameNode>(GetSearchNode()->GetChildAtIndex(index));
|
||||
CHECK_NULL_VOID(iconFrameNode);
|
||||
if (iconFrameNode->GetTag() == V2::SYMBOL_ETS_TAG) {
|
||||
auto symbolLayoutProperty = iconFrameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
CHECK_NULL_VOID(symbolLayoutProperty);
|
||||
symbolLayoutProperty->UpdateFontSize(value);
|
||||
}
|
||||
iconFrameNode->MarkModifyDone();
|
||||
iconFrameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
|
||||
if (index == IMAGE_INDEX) {
|
||||
GetSearchNode()->SetSearchIconSize(value);
|
||||
} else {
|
||||
GetSearchNode()->SetCancelIconSize(value);
|
||||
}
|
||||
// reset symbol effect
|
||||
auto symbolLayoutProperty = iconFrameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
auto symbolEffectOptions = symbolLayoutProperty->GetSymbolEffectOptionsValue(SymbolEffectOptions());
|
||||
symbolEffectOptions.SetIsTxtActive(false);
|
||||
symbolLayoutProperty->UpdateSymbolEffectOptions(symbolEffectOptions);
|
||||
}
|
||||
|
||||
bool SearchPattern::IsSymbolIcon(int32_t index)
|
||||
|
@ -181,11 +181,17 @@ public:
|
||||
void SetSearchIconSize(const Dimension& value);
|
||||
void SetSearchIconColor(const Color& color);
|
||||
void SetSearchSrcPath(const std::string& src, const std::string& bundleName, const std::string& moduleName);
|
||||
void SetSearchSymbolIcon();
|
||||
void SetSearchImageIcon(IconOptions& iconOptions);
|
||||
void SetCancelSymbolIcon();
|
||||
void SetCancelImageIcon(IconOptions& iconOptions);
|
||||
void SetRightIconSrcPath(const std::string& src);
|
||||
void SetCancelButtonStyle(const CancelButtonStyle& cancelButtonStyle);
|
||||
void SetCancelIconSize(const Dimension& value);
|
||||
void SetCancelIconColor(const Color& color);
|
||||
void InitIconColorSize();
|
||||
void InitSearchIconColorSize();
|
||||
void InitCancelIconColorSize();
|
||||
void CreateSearchIcon(const std::string& src);
|
||||
void CreateCancelIcon();
|
||||
|
||||
@ -249,6 +255,13 @@ private:
|
||||
void UpdateIconChangeEvent();
|
||||
bool IsEventEnabled(const std::string& textValue, int16_t style);
|
||||
|
||||
void CreateOrUpdateSymbol(int32_t index, bool isCreateNode, bool isFromModifier);
|
||||
void CreateOrUpdateImage(int32_t index, bool isCreateNode);
|
||||
void UpdateImageIconProperties(RefPtr<FrameNode>& frameNode, int32_t index);
|
||||
void UpdateImageIconNode(int32_t index);
|
||||
void UpdateSymbolIconNode(int32_t index);
|
||||
void UpdateSymbolIconProperties(RefPtr<FrameNode>& frameNode, int32_t index);
|
||||
|
||||
void CreateOrUpdateSymbol(int32_t index, bool isCreateNode);
|
||||
void CreateOrUpdateImage(int32_t index, const std::string& src, bool isCreateNode, const std::string& bundleName,
|
||||
const std::string& moduleName);
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "core/components/text_field/textfield_theme.h"
|
||||
#include "core/components_ng/base/frame_node.h"
|
||||
#include "core/components_ng/pattern/search/search_model_ng.h"
|
||||
#include "core/components_ng/pattern/search/search_node.h"
|
||||
#include "core/components/common/layout/constants.h"
|
||||
#include "core/pipeline/base/element_register.h"
|
||||
#include "core/components_ng/base/view_abstract.h"
|
||||
@ -139,11 +140,9 @@ void SetSearchCancelButton(ArkUINodeHandle node,
|
||||
auto* frameNode = reinterpret_cast<FrameNode*>(node);
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
SearchModelNG::SetCancelButtonStyle(frameNode, static_cast<CancelButtonStyle>(style));
|
||||
SearchModelNG::SetCancelIconSize(frameNode,
|
||||
Dimension(size->value, static_cast<DimensionUnit>(size->unit)));
|
||||
SearchModelNG::SetCancelIconColor(frameNode, Color(color));
|
||||
std::string srcStr = std::string(src);
|
||||
SearchModelNG::SetRightIconSrcPath(frameNode, srcStr);
|
||||
NG::IconOptions cancelIconOptions = NG::IconOptions(
|
||||
Color(color), Dimension(size->value, static_cast<DimensionUnit>(size->unit)), std::string(src), "", "");
|
||||
SearchModelNG::SetCancelImageIcon(frameNode, cancelIconOptions);
|
||||
}
|
||||
|
||||
void ResetSearchCancelButton(ArkUINodeHandle node)
|
||||
@ -195,11 +194,14 @@ void SetSearchSearchIcon(ArkUINodeHandle node, const struct ArkUIIconOptionsStru
|
||||
{
|
||||
auto* frameNode = reinterpret_cast<FrameNode*>(node);
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
SearchModelNG::SetSearchSrcPath(frameNode, value->src);
|
||||
SearchModelNG::SetSearchIconSize(frameNode, Dimension(value->value, static_cast<DimensionUnit>(value->unit)));
|
||||
Color iconColor;
|
||||
if (value->color != INVALID_COLOR_VALUE) {
|
||||
SearchModelNG::SetSearchIconColor(frameNode, Color(value->color));
|
||||
iconColor = Color(value->color);
|
||||
}
|
||||
|
||||
NG::IconOptions cancelInconOptions = NG::IconOptions(
|
||||
iconColor, Dimension(value->value, static_cast<DimensionUnit>(value->unit)), std::string(value->src), "", "");
|
||||
SearchModelNG::SetSearchImageIcon(frameNode, cancelInconOptions);
|
||||
}
|
||||
|
||||
void ResetSearchSearchIcon(ArkUINodeHandle node)
|
||||
|
@ -14,6 +14,8 @@
|
||||
*/
|
||||
|
||||
#include "search_base.h"
|
||||
#include "core/components_ng/pattern/search/search_node.h"
|
||||
|
||||
namespace OHOS::Ace::NG {
|
||||
|
||||
namespace {} // namespace
|
||||
@ -888,6 +890,68 @@ HWTEST_F(SearchTestNg, SetSearchSrcPath002, TestSize.Level1)
|
||||
ASSERT_STREQ(imageLayoutProperty->GetImageSourceInfo()->GetSrc().c_str(), "/common/icon.png");
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: SetSearchImageIcon001
|
||||
* @tc.desc: Set search image icon
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(SearchTestNg, SetSearchImageIcon001, TestSize.Level1)
|
||||
{
|
||||
SearchModelNG searchModelInstance;
|
||||
auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
|
||||
ASSERT_NE(frameNode, nullptr);
|
||||
auto searchLayoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>();
|
||||
ASSERT_NE(searchLayoutProperty, nullptr);
|
||||
auto imageFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(IMAGE_INDEX));
|
||||
auto imageRenderProperty = imageFrameNode->GetPaintProperty<ImageRenderProperty>();
|
||||
ASSERT_NE(imageRenderProperty, nullptr);
|
||||
|
||||
NG::IconOptions iconOptions = NG::IconOptions(Color::RED, 14.0_vp, "/common/icon.png", "", "");
|
||||
searchModelInstance.SetSearchImageIcon(iconOptions);
|
||||
auto imageLayoutProperty = imageFrameNode->GetLayoutProperty<ImageLayoutProperty>();
|
||||
ASSERT_STREQ(imageLayoutProperty->GetImageSourceInfo()->GetSrc().c_str(), "/common/icon.png");
|
||||
EXPECT_EQ(searchLayoutProperty->GetSearchIconUDSize(), 14.0_vp);
|
||||
EXPECT_EQ(imageRenderProperty->GetSvgFillColor(), Color::RED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: SetSearchIconSymbolGlyphModofier001
|
||||
* @tc.desc: Set search icon symbolGlyphModifier is not empty
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(SearchTestNg, SetSearchIconSymbolGlyphModofier001, TestSize.Level1)
|
||||
{
|
||||
int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
|
||||
AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_TWELVE));
|
||||
auto onApply = [](WeakPtr<NG::FrameNode> frameNode) {
|
||||
auto node = frameNode.Upgrade();
|
||||
EXPECT_NE(node, nullptr);
|
||||
};
|
||||
SearchModelNG searchModelInstance;
|
||||
searchModelInstance.SetSearchSymbolIcon(onApply);
|
||||
auto search = ViewStackProcessor::GetInstance()->GetMainFrameNode();
|
||||
ASSERT_NE(search, nullptr);
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
ASSERT_NE(pipeline, nullptr);
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
ASSERT_NE(searchTheme, nullptr);
|
||||
|
||||
auto searchLayoutProperty = search->GetLayoutProperty<SearchLayoutProperty>();
|
||||
ASSERT_NE(searchLayoutProperty, nullptr);
|
||||
ASSERT_NE(searchLayoutProperty->GetSearchIconSymbol(), nullptr);
|
||||
auto iconFrameNode = AceType::DynamicCast<FrameNode>(search->GetChildAtIndex(IMAGE_INDEX));
|
||||
EXPECT_TRUE(iconFrameNode->GetTag() == V2::SYMBOL_ETS_TAG);
|
||||
auto symbolLayoutProperty = iconFrameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
ASSERT_NE(symbolLayoutProperty, nullptr);
|
||||
|
||||
const std::unique_ptr<FontStyle>& symbolStyle = symbolLayoutProperty->GetFontStyle();
|
||||
ASSERT_NE(symbolStyle, nullptr);
|
||||
EXPECT_EQ(symbolStyle->GetFontSize(), Dimension(16, DimensionUnit::FP));
|
||||
std::vector<Color> color = { searchTheme->GetSymbolIconColor() };
|
||||
EXPECT_EQ(symbolStyle->GetSymbolColorList(), color);
|
||||
AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(backupApiVersion));
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: SetRightIconSrcPath001
|
||||
* @tc.desc: Set search icon src path and src is empty
|
||||
@ -969,6 +1033,68 @@ HWTEST_F(SearchTestNg, SetCancelIconSize001, TestSize.Level1)
|
||||
EXPECT_EQ(imageRenderProperty->GetSvgFillColor(), Color::RED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: SetCancelImageIcon001
|
||||
* @tc.desc: Set cancel image icon
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(SearchTestNg, SetCancelImageIcon001, TestSize.Level1)
|
||||
{
|
||||
SearchModelNG searchModelInstance;
|
||||
auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
|
||||
ASSERT_NE(frameNode, nullptr);
|
||||
auto searchLayoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>();
|
||||
ASSERT_NE(searchLayoutProperty, nullptr);
|
||||
auto imageFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(CANCEL_IMAGE_INDEX));
|
||||
auto imageRenderProperty = imageFrameNode->GetPaintProperty<ImageRenderProperty>();
|
||||
ASSERT_NE(imageRenderProperty, nullptr);
|
||||
|
||||
NG::IconOptions iconOptions = NG::IconOptions(Color::RED, 14.0_vp, "/common/icon.png", "", "");
|
||||
searchModelInstance.SetCancelImageIcon(iconOptions);
|
||||
auto imageLayoutProperty = imageFrameNode->GetLayoutProperty<ImageLayoutProperty>();
|
||||
ASSERT_STREQ(imageLayoutProperty->GetImageSourceInfo()->GetSrc().c_str(), "/common/icon.png");
|
||||
EXPECT_EQ(searchLayoutProperty->GetCancelButtonUDSize(), 14.0_vp);
|
||||
EXPECT_EQ(imageRenderProperty->GetSvgFillColor(), Color::RED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: SetCancelIconSymbolGlyphModofier001
|
||||
* @tc.desc: Set cancel icon symbolGlyphModifier is not empty
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(SearchTestNg, SetCancelIconSymbolGlyphModofier001, TestSize.Level1)
|
||||
{
|
||||
int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
|
||||
AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_TWELVE));
|
||||
auto onApply = [](WeakPtr<NG::FrameNode> frameNode) {
|
||||
auto node = frameNode.Upgrade();
|
||||
EXPECT_NE(node, nullptr);
|
||||
};
|
||||
SearchModelNG searchModelInstance;
|
||||
searchModelInstance.SetCancelSymbolIcon(onApply);
|
||||
auto search = ViewStackProcessor::GetInstance()->GetMainFrameNode();
|
||||
ASSERT_NE(search, nullptr);
|
||||
auto pipeline = PipelineBase::GetCurrentContext();
|
||||
ASSERT_NE(pipeline, nullptr);
|
||||
auto searchTheme = pipeline->GetTheme<SearchTheme>();
|
||||
ASSERT_NE(searchTheme, nullptr);
|
||||
|
||||
auto searchLayoutProperty = search->GetLayoutProperty<SearchLayoutProperty>();
|
||||
ASSERT_NE(searchLayoutProperty, nullptr);
|
||||
ASSERT_NE(searchLayoutProperty->GetCancelIconSymbol(), nullptr);
|
||||
auto iconFrameNode = AceType::DynamicCast<FrameNode>(search->GetChildAtIndex(CANCEL_IMAGE_INDEX));
|
||||
EXPECT_TRUE(iconFrameNode->GetTag() == V2::SYMBOL_ETS_TAG);
|
||||
auto symbolLayoutProperty = iconFrameNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
ASSERT_NE(symbolLayoutProperty, nullptr);
|
||||
|
||||
const std::unique_ptr<FontStyle>& symbolStyle = symbolLayoutProperty->GetFontStyle();
|
||||
ASSERT_NE(symbolStyle, nullptr);
|
||||
EXPECT_EQ(symbolStyle->GetFontSize(), Dimension(16, DimensionUnit::FP));
|
||||
std::vector<Color> color = { searchTheme->GetSymbolIconColor() };
|
||||
EXPECT_EQ(symbolStyle->GetSymbolColorList(), color);
|
||||
AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(backupApiVersion));
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: SetSearchButtonFontSize001
|
||||
* @tc.desc: Set search button font size and color
|
||||
@ -1029,7 +1155,7 @@ HWTEST_F(SearchTestNg, Create001, TestSize.Level1)
|
||||
ASSERT_NE(textFrameNode, nullptr);
|
||||
auto searchIconFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(IMAGE_INDEX));
|
||||
ASSERT_NE(searchIconFrameNode, nullptr);
|
||||
EXPECT_EQ(searchIconFrameNode->GetTag(), V2::IMAGE_ETS_TAG);
|
||||
EXPECT_EQ(searchIconFrameNode->GetTag(), V2::SYMBOL_ETS_TAG);
|
||||
auto cancelIconFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(CANCEL_IMAGE_INDEX));
|
||||
ASSERT_NE(cancelIconFrameNode, nullptr);
|
||||
EXPECT_EQ(cancelIconFrameNode->GetTag(), V2::SYMBOL_ETS_TAG);
|
||||
|
Loading…
x
Reference in New Issue
Block a user