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