1 /* 2 * Copyright (c) 2022 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 16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MARQUEE_LAYOUT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MARQUEE_LAYOUT_PROPERTY_H 18 19 #include <string> 20 21 #include "base/geometry/dimension.h" 22 #include "core/components_ng/base/frame_node.h" 23 #include "core/components_ng/base/inspector_filter.h" 24 #include "core/components_ng/layout/layout_property.h" 25 #include "core/components_ng/pattern/text/text_layout_property.h" 26 #include "core/components_ng/property/property.h" 27 28 namespace OHOS::Ace::NG { 29 class ACE_EXPORT MarqueeLayoutProperty final : public LayoutProperty { 30 DECLARE_ACE_TYPE(MarqueeLayoutProperty, LayoutProperty); 31 32 public: 33 MarqueeLayoutProperty() = default; 34 35 ~MarqueeLayoutProperty() override = default; 36 Clone()37 RefPtr<LayoutProperty> Clone() const override 38 { 39 auto value = MakeRefPtr<MarqueeLayoutProperty>(); 40 value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this)); 41 value->propPlayerStatus_ = ClonePlayerStatus(); 42 value->propScrollAmount_ = CloneScrollAmount(); 43 value->propDirection_ = CloneDirection(); 44 value->propLoop_ = CloneLoop(); 45 value->propAllowScale_ = CloneAllowScale(); 46 value->propSrc_ = CloneSrc(); 47 value->propFontSize_ = CloneFontSize(); 48 value->propFontWeight_ = CloneFontWeight(); 49 value->propFontColor_ = CloneFontColor(); 50 value->propFontFamily_ = CloneFontFamily(); 51 value->propMarqueeUpdateStrategy_ = CloneMarqueeUpdateStrategy(); 52 return value; 53 } 54 Reset()55 void Reset() override 56 { 57 LayoutProperty::Reset(); 58 ResetPlayerStatus(); 59 ResetScrollAmount(); 60 ResetDirection(); 61 ResetLoop(); 62 ResetAllowScale(); 63 ResetSrc(); 64 ResetFontSize(); 65 ResetFontWeight(); 66 ResetFontColor(); 67 ResetFontFamily(); 68 ResetMarqueeUpdateStrategy(); 69 } 70 ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter)71 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override 72 { 73 LayoutProperty::ToJsonValue(json, filter); 74 auto host = GetHost(); 75 CHECK_NULL_VOID(host); 76 auto textChild = AceType::DynamicCast<FrameNode>(host->GetChildren().front()); 77 CHECK_NULL_VOID(textChild); 78 auto textLayoutProperty = textChild->GetLayoutProperty<TextLayoutProperty>(); 79 CHECK_NULL_VOID(textLayoutProperty); 80 json->PutFixedAttr("src", textLayoutProperty->GetContent().value_or("").c_str(), filter, FIXED_ATTR_SRC); 81 /* no fixed attr below, just return */ 82 if (filter.IsFastFilter()) { 83 return; 84 } 85 json->PutExtAttr("allowScale", propAllowScale_.value_or(false) ? "true" : "false", filter); 86 json->PutExtAttr("fontSize", propFontSize_.value_or(10.0_vp).ToString().c_str(), filter); 87 json->PutExtAttr("fontColor", propFontColor_.value_or(textLayoutProperty->GetTextColor(). 88 value_or(Color::BLACK)).ColorToString().c_str(), filter); 89 json->PutExtAttr("fontWeight", 90 V2::ConvertWrapFontWeightToStirng(propFontWeight_.value_or(FontWeight::NORMAL)).c_str(), filter); 91 std::vector<std::string> fontFamilyVector = 92 propFontFamily_.value_or<std::vector<std::string>>({ "HarmonyOS Sans" }); 93 if (fontFamilyVector.empty()) { 94 fontFamilyVector = std::vector<std::string>({ "HarmonyOS Sans" }); 95 } 96 std::string fontFamily = fontFamilyVector.at(0); 97 for (uint32_t i = 1; i < fontFamilyVector.size(); ++i) { 98 fontFamily += ',' + fontFamilyVector.at(i); 99 } 100 json->PutExtAttr("fontFamily", fontFamily.c_str(), filter); 101 json->PutExtAttr("marqueeUpdateStrategy", V2::ConvertWrapMarqueeUpdateStrategyToStirng( 102 propMarqueeUpdateStrategy_.value_or(MarqueeUpdateStrategy::DEFAULT)).c_str(), filter); 103 } 104 105 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PlayerStatus, bool, PROPERTY_UPDATE_MEASURE); 106 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ScrollAmount, double, PROPERTY_UPDATE_MEASURE); 107 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Loop, int32_t, PROPERTY_UPDATE_MEASURE); 108 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Direction, MarqueeDirection, PROPERTY_UPDATE_MEASURE); 109 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(AllowScale, bool, PROPERTY_UPDATE_MEASURE); 110 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Src, std::string, PROPERTY_UPDATE_MEASURE); 111 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FontSize, Dimension, PROPERTY_UPDATE_MEASURE); 112 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FontWeight, FontWeight, PROPERTY_UPDATE_MEASURE); 113 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FontColor, Color, PROPERTY_UPDATE_MEASURE); 114 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE); 115 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MarqueeUpdateStrategy, MarqueeUpdateStrategy, PROPERTY_UPDATE_MEASURE); 116 117 private: 118 ACE_DISALLOW_COPY_AND_MOVE(MarqueeLayoutProperty); 119 }; 120 } // namespace OHOS::Ace::NG 121 122 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MARQUEE_LAYOUT_PROPERTY_H 123