1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_PICKER_UTILS_PICKER_LAYOUT_PROPERTY_H 16 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_PICKER_UTILS_PICKER_LAYOUT_PROPERTY_H 17 18 #include "base/geometry/dimension.h" 19 #include "base/i18n/localization.h" 20 #include "base/json/json_util.h" 21 #include "core/components/common/layout/constants.h" 22 #include "core/components_ng/base/inspector_filter.h" 23 #include "core/components_ng/layout/layout_property.h" 24 #include "core/components_ng/pattern/linear_layout/linear_layout_property.h" 25 #include "core/components_ng/pattern/text/text_styles.h" 26 #include "core/components_ng/property/property.h" 27 #include "core/components_v2/inspector/utils.h" 28 #include "core/pipeline/pipeline_base.h" 29 30 namespace OHOS::Ace::NG { 31 class ACE_EXPORT PickerLayoutProperty : public LinearLayoutProperty { 32 DECLARE_ACE_TYPE(PickerLayoutProperty, LinearLayoutProperty); 33 34 public: PickerLayoutProperty()35 PickerLayoutProperty() : LinearLayoutProperty(false) {}; 36 ~PickerLayoutProperty() override = default; Clone()37 RefPtr<LayoutProperty> Clone() const override 38 { 39 auto value = MakeRefPtr<PickerLayoutProperty>(); 40 Clone(value); 41 value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this)); 42 value->propDisappearTextStyle_ = CloneDisappearTextStyle(); 43 value->propTextStyle_ = CloneTextStyle(); 44 value->propSelectedTextStyle_ = CloneSelectedTextStyle(); 45 value->propDigitalCrownSensitivity_ = CloneDigitalCrownSensitivity(); 46 return value; 47 } 48 Reset()49 void Reset() override 50 { 51 LinearLayoutProperty::Reset(); 52 ResetDisappearTextStyle(); 53 ResetTextStyle(); 54 ResetSelectedTextStyle(); 55 ResetDigitalCrownSensitivity(); 56 } 57 ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter)58 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override 59 { 60 LayoutProperty::ToJsonValue(json, filter); 61 /* no fixed attr below, just return */ 62 if (filter.IsFastFilter()) { 63 return; 64 } 65 Color defaultDisappearColor = Color::BLACK; 66 Color defaultNormalColor = Color::BLACK; 67 Color defaultSelectColor = Color::BLACK; 68 auto pipeline = PipelineBase::GetCurrentContext(); 69 auto frameNode = GetHost(); 70 if (pipeline && frameNode) { 71 auto pickerTheme = pipeline->GetTheme<PickerTheme>(frameNode->GetThemeScopeId()); 72 if (pickerTheme) { 73 defaultDisappearColor = pickerTheme->GetDisappearOptionStyle().GetTextColor(); 74 defaultNormalColor = pickerTheme->GetOptionStyle(false, false).GetTextColor(); 75 defaultSelectColor = pickerTheme->GetOptionStyle(true, false).GetTextColor(); 76 } 77 } 78 79 auto disappearFont = JsonUtil::Create(true); 80 disappearFont->Put("size", GetDisappearFontSizeValue(Dimension(0)).ToString().c_str()); 81 disappearFont->Put( 82 "weight", V2::ConvertWrapFontWeightToStirng(GetDisappearWeight().value_or(FontWeight::NORMAL)).c_str()); 83 84 auto disappearTextStyle = JsonUtil::Create(true); 85 disappearTextStyle->Put("color", GetDisappearColor().value_or(defaultDisappearColor).ColorToString().c_str()); 86 disappearTextStyle->Put("font", disappearFont); 87 json->PutExtAttr("disappearTextStyle", disappearTextStyle, filter); 88 89 auto normalFont = JsonUtil::Create(true); 90 normalFont->Put("size", GetFontSizeValue(Dimension(0)).ToString().c_str()); 91 normalFont->Put("weight", V2::ConvertWrapFontWeightToStirng(GetWeight().value_or(FontWeight::NORMAL)).c_str()); 92 auto normalTextStyle = JsonUtil::Create(true); 93 normalTextStyle->Put("color", GetColor().value_or(defaultNormalColor).ColorToString().c_str()); 94 normalTextStyle->Put("font", normalFont); 95 json->PutExtAttr("textStyle", normalTextStyle, filter); 96 97 auto selectedFont = JsonUtil::Create(true); 98 selectedFont->Put("size", GetSelectedFontSizeValue(Dimension(0)).ToString().c_str()); 99 selectedFont->Put( 100 "weight", V2::ConvertWrapFontWeightToStirng(GetSelectedWeight().value_or(FontWeight::NORMAL)).c_str()); 101 auto selectedTextStyle = JsonUtil::Create(true); 102 selectedTextStyle->Put("color", GetSelectedColor().value_or(defaultSelectColor).ColorToString().c_str()); 103 selectedTextStyle->Put("font", selectedFont); 104 json->PutExtAttr("selectedTextStyle", selectedTextStyle, filter); 105 auto crownSensitivity = GetDigitalCrownSensitivity(); 106 json->PutExtAttr("digitalCrownSensitivity", 107 std::to_string(crownSensitivity.value_or(DEFAULT_CROWNSENSITIVITY)).c_str(), filter); 108 } 109 110 protected: Clone(RefPtr<LayoutProperty> property)111 virtual void Clone(RefPtr<LayoutProperty> property) const override 112 { 113 auto value = DynamicCast<PickerLayoutProperty>(property); 114 CHECK_NULL_VOID(value); 115 FlexLayoutProperty::Clone(value); 116 }; 117 118 ACE_DEFINE_PROPERTY_GROUP(DisappearTextStyle, FontStyle); 119 120 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 121 DisappearTextStyle, FontSize, DisappearFontSize, Dimension, PROPERTY_UPDATE_MEASURE); 122 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 123 DisappearTextStyle, TextColor, DisappearColor, Color, PROPERTY_UPDATE_MEASURE_SELF); 124 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 125 DisappearTextStyle, FontWeight, DisappearWeight, FontWeight, PROPERTY_UPDATE_MEASURE); 126 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 127 DisappearTextStyle, FontFamily, DisappearFontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE); 128 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 129 DisappearTextStyle, ItalicFontStyle, DisappearFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE); 130 131 ACE_DEFINE_PROPERTY_GROUP(TextStyle, FontStyle); 132 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM(TextStyle, FontSize, FontSize, Dimension, PROPERTY_UPDATE_MEASURE); 133 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM(TextStyle, TextColor, Color, Color, PROPERTY_UPDATE_MEASURE_SELF); 134 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM(TextStyle, FontWeight, Weight, FontWeight, PROPERTY_UPDATE_MEASURE); 135 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 136 TextStyle, FontFamily, FontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE); 137 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 138 TextStyle, ItalicFontStyle, FontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE); 139 140 ACE_DEFINE_PROPERTY_GROUP(SelectedTextStyle, FontStyle); 141 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 142 SelectedTextStyle, FontSize, SelectedFontSize, Dimension, PROPERTY_UPDATE_MEASURE); 143 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 144 SelectedTextStyle, TextColor, SelectedColor, Color, PROPERTY_UPDATE_MEASURE_SELF); 145 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 146 SelectedTextStyle, FontWeight, SelectedWeight, FontWeight, PROPERTY_UPDATE_MEASURE); 147 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 148 SelectedTextStyle, FontFamily, SelectedFontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE); 149 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 150 SelectedTextStyle, ItalicFontStyle, SelectedFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE); 151 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(DigitalCrownSensitivity, int32_t, PROPERTY_UPDATE_MEASURE); 152 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(DisappearTextColorSetByUser, bool, PROPERTY_UPDATE_MEASURE_SELF); 153 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NormalTextColorSetByUser, bool, PROPERTY_UPDATE_MEASURE_SELF); 154 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedTextColorSetByUser, bool, PROPERTY_UPDATE_MEASURE_SELF); 155 156 private: 157 ACE_DISALLOW_COPY_AND_MOVE(PickerLayoutProperty); 158 }; 159 } // namespace OHOS::Ace::NG 160 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_PICKER_UTILS_PICKER_LAYOUT_PROPERTY_H