• 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/common/properties/color.h"
23 #include "core/components_ng/layout/layout_property.h"
24 #include "core/components_ng/pattern/symbol/symbol_effect_options.h"
25 #include "core/components_ng/pattern/symbol/symbol_source_info.h"
26 #include "core/components_ng/pattern/text/text_styles.h"
27 #include "core/components_ng/property/property.h"
28 #include "core/components_v2/inspector/utils.h"
29 
30 namespace OHOS::Ace::NG {
31 class InspectorFilter;
32 
33 class ACE_EXPORT TextLayoutProperty : public LayoutProperty {
34     DECLARE_ACE_TYPE(TextLayoutProperty, LayoutProperty);
35 
36 public:
37     TextLayoutProperty() = default;
38 
39     ~TextLayoutProperty() override = default;
40 
Clone()41     RefPtr<LayoutProperty> Clone() const override
42     {
43         auto value = MakeRefPtr<TextLayoutProperty>();
44         Clone(value);
45         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
46         value->propSymbolSourceInfo_ = CloneSymbolSourceInfo();
47         return value;
48     }
49 
Reset()50     void Reset() override
51     {
52         LayoutProperty::Reset();
53         ResetFontStyle();
54         ResetTextLineStyle();
55         ResetContent();
56         ResetForegroundColor();
57         ResetSymbolSourceInfo();
58         ResetAdaptFontSizeStep();
59         ResetSelectedBackgroundColor();
60     }
61 
62     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override;
63 
64     void FromJson(const std::unique_ptr<JsonValue>& json) override;
65 
66     ACE_DEFINE_PROPERTY_GROUP(FontStyle, FontStyle);
67     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontSize, Dimension, PROPERTY_UPDATE_MEASURE);
68     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
69     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextShadow, std::vector<Shadow>, PROPERTY_UPDATE_MEASURE);
70     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, ItalicFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE);
71     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontWeight, FontWeight, PROPERTY_UPDATE_MEASURE);
72     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, VariableFontWeight, int32_t, PROPERTY_UPDATE_MEASURE);
73     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE);
74     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontFeature, FONT_FEATURES_LIST, PROPERTY_UPDATE_MEASURE);
75     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecoration, TextDecoration, PROPERTY_UPDATE_MEASURE);
76     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecorationColor, Color, PROPERTY_UPDATE_MEASURE);
77     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecorationStyle, TextDecorationStyle, PROPERTY_UPDATE_MEASURE);
78     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextCase, TextCase, PROPERTY_UPDATE_MEASURE);
79     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, AdaptMinFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
80     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, AdaptMaxFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
81     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, LetterSpacing, Dimension, PROPERTY_UPDATE_MEASURE);
82     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, EnableVariableFontWeight, bool, PROPERTY_UPDATE_MEASURE);
83     ACE_DEFINE_PROPERTY_GROUP(TextLineStyle, TextLineStyle);
84     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineHeight, Dimension, PROPERTY_UPDATE_MEASURE);
85     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineSpacing, Dimension, PROPERTY_UPDATE_MEASURE);
86     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextBaseline, TextBaseline, PROPERTY_UPDATE_MEASURE);
87     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, BaselineOffset, Dimension, PROPERTY_UPDATE_MEASURE);
88     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextAlign, TextAlign, PROPERTY_UPDATE_MEASURE);
89     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextOverflow, TextOverflow, PROPERTY_UPDATE_MEASURE);
90     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, EllipsisMode, EllipsisMode, PROPERTY_UPDATE_MEASURE);
91     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, MaxLines, uint32_t, PROPERTY_UPDATE_MEASURE);
92     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, AllowScale, bool, PROPERTY_UPDATE_MEASURE);
93     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
94         TextLineStyle, HeightAdaptivePolicy, TextHeightAdaptivePolicy, PROPERTY_UPDATE_MEASURE);
95     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextIndent, Dimension, PROPERTY_UPDATE_MEASURE);
96     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, WordBreak, WordBreak, PROPERTY_UPDATE_MEASURE);
97     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineBreakStrategy, LineBreakStrategy, PROPERTY_UPDATE_MEASURE);
98     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, HalfLeading, bool, PROPERTY_UPDATE_MEASURE_SELF);
99     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Content, std::string, PROPERTY_UPDATE_MEASURE);
100     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CopyOption, CopyOptions, PROPERTY_UPDATE_MEASURE);
101     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ForegroundColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
102 
103     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(AdaptFontSizeStep, Dimension, PROPERTY_UPDATE_MEASURE_SELF);
104     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedBackgroundColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
105     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextSelectableMode, TextSelectableMode, PROPERTY_UPDATE_MEASURE_SELF);
106     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsAnimationNeeded, bool, PROPERTY_UPDATE_NORMAL);
107 
108     // placeholder
109     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Placeholder, std::string, PROPERTY_UPDATE_MEASURE);
110     ACE_DEFINE_PROPERTY_GROUP(PlaceholderFontStyle, FontStyle);
111     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM(
112         PlaceholderFontStyle, FontSize, PlaceholderFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
113     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM(
114         PlaceholderFontStyle, TextColor, PlaceholderTextColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
115     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM(
116         PlaceholderFontStyle, ItalicFontStyle, PlaceholderItalicFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE);
117     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM(
118         PlaceholderFontStyle, FontWeight, PlaceholderFontWeight, FontWeight, PROPERTY_UPDATE_MEASURE);
119     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM(
120         PlaceholderFontStyle, FontFamily, PlaceholderFontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE);
121 
122     // symbol
123     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SymbolSourceInfo, SymbolSourceInfo, PROPERTY_UPDATE_MEASURE);
124     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, SymbolColorList, std::vector<Color>, PROPERTY_UPDATE_MEASURE_SELF);
125     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, SymbolRenderingStrategy, uint32_t, PROPERTY_UPDATE_MEASURE_SELF);
126     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, SymbolEffectStrategy, uint32_t, PROPERTY_UPDATE_MEASURE_SELF);
127     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
128         FontStyle, SymbolEffectOptions, SymbolEffectOptions, PROPERTY_UPDATE_MEASURE_SELF);
129     // fontscale
130     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, MinFontScale, float, PROPERTY_UPDATE_MEASURE);
131     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, MaxFontScale, float, PROPERTY_UPDATE_MEASURE);
132 
133     // for XTS inspector
InspectorGetTextFont()134     std::string InspectorGetTextFont() const
135     {
136         TextStyle font;
137         if (GetFontFamily().has_value()) {
138             font.SetFontFamilies(GetFontFamily().value());
139         }
140         if (GetFontSize().has_value()) {
141             font.SetFontSize(GetFontSize().value());
142         }
143         if (GetItalicFontStyle().has_value()) {
144             font.SetFontStyle(GetItalicFontStyle().value());
145         }
146         if (GetFontWeight().has_value()) {
147             font.SetFontWeight(GetFontWeight().value());
148         }
149         return V2::GetTextStyleInJson(font);
150     }
151     std::string GetCopyOptionString() const;
152 
UpdateTextColorByRender(const Color & value)153     void UpdateTextColorByRender(const Color &value)
154     {
155         auto& groupProperty = GetOrCreateFontStyle();
156         if (groupProperty->CheckTextColor(value)) {
157             return;
158         }
159         groupProperty->UpdateTextColor(value);
160         UpdatePropertyChangeFlag(PROPERTY_UPDATE_RENDER);
161     }
162 
163 protected:
Clone(RefPtr<LayoutProperty> property)164     void Clone(RefPtr<LayoutProperty> property) const override
165     {
166         auto value = DynamicCast<TextLayoutProperty>(property);
167         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
168         value->propFontStyle_ = CloneFontStyle();
169         value->propTextLineStyle_ = CloneTextLineStyle();
170         value->propContent_ = CloneContent();
171         value->propForegroundColor_ = CloneForegroundColor();
172         value->propAdaptFontSizeStep_ = CloneAdaptFontSizeStep();
173         value->propSelectedBackgroundColor_ = CloneSelectedBackgroundColor();
174     }
175 
176 private:
177     ACE_DISALLOW_COPY_AND_MOVE(TextLayoutProperty);
178 };
179 } // namespace OHOS::Ace::NG
180 
181 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_TEXT_LAYOUT_PROPERTY_H
182