• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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_TEXT_TEXT_LAYOUT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_TEXT_LAYOUT_PROPERTY_H
18 
19 #include <string>
20 
21 #include "core/components/common/layout/constants.h"
22 #include "core/components_ng/layout/layout_property.h"
23 #include "core/components_ng/pattern/symbol/symbol_source_info.h"
24 #include "core/components_ng/pattern/text/text_styles.h"
25 #include "core/components_ng/property/property.h"
26 #include "core/components_v2/inspector/utils.h"
27 
28 namespace OHOS::Ace::NG {
29 class ACE_EXPORT TextLayoutProperty : public LayoutProperty {
30     DECLARE_ACE_TYPE(TextLayoutProperty, LayoutProperty);
31 
32 public:
33     TextLayoutProperty() = default;
34 
35     ~TextLayoutProperty() override = default;
36 
Clone()37     RefPtr<LayoutProperty> Clone() const override
38     {
39         auto value = MakeRefPtr<TextLayoutProperty>();
40         Clone(value);
41         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
42         value->propSymbolSourceInfo_ = CloneSymbolSourceInfo();
43         return value;
44     }
45 
Reset()46     void Reset() override
47     {
48         LayoutProperty::Reset();
49         ResetFontStyle();
50         ResetTextLineStyle();
51         ResetContent();
52         ResetForegroundColor();
53         ResetSymbolSourceInfo();
54         ResetAdaptFontSizeStep();
55     }
56 
57     void ToJsonValue(std::unique_ptr<JsonValue>& json) const override;
58 
59     void FromJson(const std::unique_ptr<JsonValue>& json) override;
60 
61     ACE_DEFINE_PROPERTY_GROUP(FontStyle, FontStyle);
62     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontSize, Dimension, PROPERTY_UPDATE_MEASURE);
63     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
64     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextShadow, std::vector<Shadow>, PROPERTY_UPDATE_MEASURE);
65     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, ItalicFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE);
66     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontWeight, FontWeight, PROPERTY_UPDATE_MEASURE);
67     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE);
68     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontFeature, FONT_FEATURES_MAP, PROPERTY_UPDATE_MEASURE);
69     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecoration, TextDecoration, PROPERTY_UPDATE_MEASURE);
70     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecorationColor, Color, PROPERTY_UPDATE_MEASURE);
71     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecorationStyle, TextDecorationStyle, PROPERTY_UPDATE_MEASURE);
72     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextCase, TextCase, PROPERTY_UPDATE_MEASURE);
73     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, AdaptMinFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
74     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, AdaptMaxFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
75     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, LetterSpacing, Dimension, PROPERTY_UPDATE_MEASURE);
76     ACE_DEFINE_PROPERTY_GROUP(TextLineStyle, TextLineStyle);
77     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineHeight, Dimension, PROPERTY_UPDATE_MEASURE);
78     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextBaseline, TextBaseline, PROPERTY_UPDATE_MEASURE);
79     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, BaselineOffset, Dimension, PROPERTY_UPDATE_MEASURE);
80     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextAlign, TextAlign, PROPERTY_UPDATE_MEASURE);
81     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextOverflow, TextOverflow, PROPERTY_UPDATE_MEASURE);
82     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, EllipsisMode, EllipsisMode, PROPERTY_UPDATE_MEASURE);
83     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, MaxLines, uint32_t, PROPERTY_UPDATE_MEASURE);
84     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
85         TextLineStyle, HeightAdaptivePolicy, TextHeightAdaptivePolicy, PROPERTY_UPDATE_MEASURE);
86     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextIndent, Dimension, PROPERTY_UPDATE_MEASURE);
87     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, WordBreak, WordBreak, PROPERTY_UPDATE_MEASURE);
88     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Content, std::string, PROPERTY_UPDATE_MEASURE);
89     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CopyOption, CopyOptions, PROPERTY_UPDATE_MEASURE);
90     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ForegroundColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
91 
92     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(AdaptFontSizeStep, Dimension, PROPERTY_UPDATE_MEASURE_SELF);
93 
94     // symbol
95     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SymbolSourceInfo, SymbolSourceInfo, PROPERTY_UPDATE_RENDER);
96     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, SymbolColorList, std::vector<Color>, PROPERTY_UPDATE_MEASURE_SELF);
97     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, SymbolRenderingStrategy, uint32_t, PROPERTY_UPDATE_MEASURE_SELF);
98     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, SymbolEffectStrategy, uint32_t, PROPERTY_UPDATE_MEASURE_SELF);
99 
100     // for XTS inspector
InspectorGetTextFont()101     std::string InspectorGetTextFont() const
102     {
103         TextStyle font;
104         if (GetFontFamily().has_value()) {
105             font.SetFontFamilies(GetFontFamily().value());
106         }
107         if (GetFontSize().has_value()) {
108             font.SetFontSize(GetFontSize().value());
109         }
110         if (GetItalicFontStyle().has_value()) {
111             font.SetFontStyle(GetItalicFontStyle().value());
112         }
113         if (GetFontWeight().has_value()) {
114             font.SetFontWeight(GetFontWeight().value());
115         }
116         return V2::GetTextStyleInJson(font);
117     }
118     std::string GetCopyOptionString() const;
119     std::string GetFont() const;
120 
121 protected:
Clone(RefPtr<LayoutProperty> property)122     void Clone(RefPtr<LayoutProperty> property) const override
123     {
124         auto value = DynamicCast<TextLayoutProperty>(property);
125         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
126         value->propFontStyle_ = CloneFontStyle();
127         value->propTextLineStyle_ = CloneTextLineStyle();
128         value->propContent_ = CloneContent();
129         value->propForegroundColor_ = CloneForegroundColor();
130         value->propAdaptFontSizeStep_ = CloneAdaptFontSizeStep();
131     }
132 
133 private:
134     ACE_DISALLOW_COPY_AND_MOVE(TextLayoutProperty);
135 };
136 } // namespace OHOS::Ace::NG
137 
138 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_TEXT_LAYOUT_PROPERTY_H
139