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_CALENDAR_CALENDAR_PAINT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_CALENDAR_CALENDAR_PAINT_PROPERTY_H
18 
19 #include <cstdint>
20 #include <string>
21 #include <vector>
22 
23 #include "base/geometry/dimension.h"
24 #include "base/utils/macros.h"
25 #include "core/components/common/properties/color.h"
26 #include "core/components_ng/base/inspector_filter.h"
27 #include "core/components_ng/render/paint_property.h"
28 
29 namespace OHOS::Ace::NG {
30 
31 struct CurrentDayStyle {
32     ACE_DEFINE_PROPERTY_GROUP_ITEM(DayColor, Color);
33     ACE_DEFINE_PROPERTY_GROUP_ITEM(LunarColor, Color);
34     ACE_DEFINE_PROPERTY_GROUP_ITEM(MarkLunarColor, Color);
35     ACE_DEFINE_PROPERTY_GROUP_ITEM(DayFontSize, Dimension);
36     ACE_DEFINE_PROPERTY_GROUP_ITEM(LunarDayFontSize, Dimension);
37     ACE_DEFINE_PROPERTY_GROUP_ITEM(DayHeight, Dimension);
38     ACE_DEFINE_PROPERTY_GROUP_ITEM(DayWidth, Dimension);
39     ACE_DEFINE_PROPERTY_GROUP_ITEM(GregorianCalendarHeight, Dimension);
40     ACE_DEFINE_PROPERTY_GROUP_ITEM(DayYAxisOffset, Dimension);
41     ACE_DEFINE_PROPERTY_GROUP_ITEM(LunarDayYAxisOffset, Dimension);
42     ACE_DEFINE_PROPERTY_GROUP_ITEM(UnderscoreXAxisOffset, Dimension);
43     ACE_DEFINE_PROPERTY_GROUP_ITEM(UnderscoreYAxisOffset, Dimension);
44     ACE_DEFINE_PROPERTY_GROUP_ITEM(ScheduleMarkerXAxisOffset, Dimension);
45     ACE_DEFINE_PROPERTY_GROUP_ITEM(ScheduleMarkerYAxisOffset, Dimension);
46     ACE_DEFINE_PROPERTY_GROUP_ITEM(ColSpace, Dimension);
47     ACE_DEFINE_PROPERTY_GROUP_ITEM(DailyFourRowSpace, Dimension);
48     ACE_DEFINE_PROPERTY_GROUP_ITEM(DailyFiveRowSpace, Dimension);
49     ACE_DEFINE_PROPERTY_GROUP_ITEM(DailySixRowSpace, Dimension);
50     ACE_DEFINE_PROPERTY_GROUP_ITEM(LunarHeight, Dimension);
51     ACE_DEFINE_PROPERTY_GROUP_ITEM(UnderscoreWidth, Dimension);
52     ACE_DEFINE_PROPERTY_GROUP_ITEM(UnderscoreLength, Dimension);
53     ACE_DEFINE_PROPERTY_GROUP_ITEM(ScheduleMarkerRadius, Dimension);
54     ACE_DEFINE_PROPERTY_GROUP_ITEM(BoundaryRowOffset, Dimension);
55     ACE_DEFINE_PROPERTY_GROUP_ITEM(BoundaryColOffset, Dimension);
56 
ToJsonValueCurrentDayStyle57     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
58     {
59         /* no fixed attr below, just return */
60         if (filter.IsFastFilter()) {
61             return;
62         }
63         json->PutExtAttr("dayColor", propDayColor.value_or(Color()).ColorToString().c_str(), filter);
64         json->PutExtAttr("lunarColor", propLunarColor.value_or(Color()).ColorToString().c_str(), filter);
65         json->PutExtAttr("markLunarColor", propMarkLunarColor.value_or(Color()).ColorToString().c_str(), filter);
66         json->PutExtAttr("dayFontSize",
67             propDayFontSize.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
68         json->PutExtAttr("lunarDayFontSize",
69             propLunarDayFontSize.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
70         json->PutExtAttr("dayHeight",
71             propDayHeight.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
72         json->PutExtAttr("dayWidth",
73             propDayWidth.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
74         json->PutExtAttr("gregorianCalendarHeight",
75             propGregorianCalendarHeight.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
76         json->PutExtAttr("dayYAxisOffset",
77             propDayYAxisOffset.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
78         json->PutExtAttr("lunarDayYAxisOffset",
79             propLunarDayYAxisOffset.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
80         json->PutExtAttr("underscoreXAxisOffset",
81             propUnderscoreXAxisOffset.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
82         json->PutExtAttr("underscoreYAxisOffset",
83             propUnderscoreYAxisOffset.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
84         json->PutExtAttr("scheduleMarkerXAxisOffset",
85             propScheduleMarkerXAxisOffset.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
86         json->PutExtAttr("scheduleMarkerYAxisOffset",
87             propScheduleMarkerYAxisOffset.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
88         json->PutExtAttr("colSpace",
89             propColSpace.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
90         json->PutExtAttr("dailyFiveRowSpace",
91             propDailyFiveRowSpace.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
92         json->PutExtAttr("dailySixRowSpace",
93             propDailySixRowSpace.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
94         json->PutExtAttr("lunarHeight",
95             propLunarHeight.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
96         json->PutExtAttr("underscoreWidth",
97             propUnderscoreWidth.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
98         json->PutExtAttr("underscoreLength",
99             propUnderscoreLength.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
100         json->PutExtAttr("scheduleMarkerRadius",
101             propScheduleMarkerRadius.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
102         json->PutExtAttr("boundaryRowOffset",
103             propBoundaryRowOffset.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
104         json->PutExtAttr("boundaryColOffset",
105             propBoundaryColOffset.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
106     }
107 };
108 
109 struct NonCurrentDayStyle {
110     ACE_DEFINE_PROPERTY_GROUP_ITEM(NonCurrentMonthDayColor, Color);
111     ACE_DEFINE_PROPERTY_GROUP_ITEM(NonCurrentMonthLunarColor, Color);
112     ACE_DEFINE_PROPERTY_GROUP_ITEM(NonCurrentMonthWorkDayMarkColor, Color);
113     ACE_DEFINE_PROPERTY_GROUP_ITEM(NonCurrentMonthOffDayMarkColor, Color);
114 
ToJsonValueNonCurrentDayStyle115     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
116     {
117         /* no fixed attr below, just return */
118         if (filter.IsFastFilter()) {
119             return;
120         }
121         json->PutExtAttr("nonCurrentMonthDayColor",
122             propNonCurrentMonthDayColor.value_or(Color()).ColorToString().c_str(), filter);
123         json->PutExtAttr("nonCurrentMonthLunarColor",
124             propNonCurrentMonthLunarColor.value_or(Color()).ColorToString().c_str(), filter);
125         json->PutExtAttr("nonCurrentMonthWorkDayMarkColor",
126             propNonCurrentMonthWorkDayMarkColor.value_or(Color()).ColorToString().c_str(), filter);
127         json->PutExtAttr("nonCurrentMonthOffDayMarkColor",
128             propNonCurrentMonthOffDayMarkColor.value_or(Color()).ColorToString().c_str(), filter);
129     }
130 };
131 
132 struct TodayStyle {
133     ACE_DEFINE_PROPERTY_GROUP_ITEM(FocusedDayColor, Color);
134     ACE_DEFINE_PROPERTY_GROUP_ITEM(FocusedLunarColor, Color);
135     ACE_DEFINE_PROPERTY_GROUP_ITEM(FocusedAreaBackgroundColor, Color);
136     ACE_DEFINE_PROPERTY_GROUP_ITEM(FocusedAreaRadius, Dimension);
137 
ToJsonValueTodayStyle138     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
139     {
140         /* no fixed attr below, just return */
141         if (filter.IsFastFilter()) {
142             return;
143         }
144         json->PutExtAttr("focusedDayColor", propFocusedDayColor.value_or(Color()).ColorToString().c_str(), filter);
145         json->PutExtAttr("focusedLunarColor",
146             propFocusedLunarColor.value_or(Color()).ColorToString().c_str(), filter);
147         json->PutExtAttr("focusedAreaBackgroundColor",
148             propFocusedAreaBackgroundColor.value_or(Color()).ColorToString().c_str(), filter);
149         json->PutExtAttr("focusedAreaRadius",
150             propFocusedAreaRadius.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
151     }
152 };
153 
154 struct WeekStyle {
155     ACE_DEFINE_PROPERTY_GROUP_ITEM(WeekColor, Color);
156     ACE_DEFINE_PROPERTY_GROUP_ITEM(WeekendDayColor, Color);
157     ACE_DEFINE_PROPERTY_GROUP_ITEM(WeekendLunarColor, Color);
158     ACE_DEFINE_PROPERTY_GROUP_ITEM(WeekFontSize, Dimension);
159     ACE_DEFINE_PROPERTY_GROUP_ITEM(WeekHeight, Dimension);
160     ACE_DEFINE_PROPERTY_GROUP_ITEM(WeekWidth, Dimension);
161     ACE_DEFINE_PROPERTY_GROUP_ITEM(WeekAndDayRowSpace, Dimension);
162 
ToJsonValueWeekStyle163     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
164     {
165         /* no fixed attr below, just return */
166         if (filter.IsFastFilter()) {
167             return;
168         }
169         json->PutExtAttr("weekColor", propWeekColor.value_or(Color()).ColorToString().c_str(), filter);
170         json->PutExtAttr("weekendDayColor", propWeekendDayColor.value_or(Color()).ColorToString().c_str(), filter);
171         json->PutExtAttr("weekendLunarColor",
172             propWeekendLunarColor.value_or(Color()).ColorToString().c_str(), filter);
173         json->PutExtAttr("weekFontSize",
174             propWeekFontSize.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
175         json->PutExtAttr("weekHeight",
176             propWeekHeight.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
177         json->PutExtAttr("weekWidth",
178             propWeekWidth.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
179         json->PutExtAttr("weekAndDayRowSpace",
180             propWeekAndDayRowSpace.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
181     }
182 };
183 
184 struct WorkStateStyle {
185     ACE_DEFINE_PROPERTY_GROUP_ITEM(WorkDayMarkColor, Color);
186     ACE_DEFINE_PROPERTY_GROUP_ITEM(OffDayMarkColor, Color);
187     ACE_DEFINE_PROPERTY_GROUP_ITEM(WorkDayMarkSize, Dimension);
188     ACE_DEFINE_PROPERTY_GROUP_ITEM(OffDayMarkSize, Dimension);
189     ACE_DEFINE_PROPERTY_GROUP_ITEM(WorkStateWidth, Dimension);
190     ACE_DEFINE_PROPERTY_GROUP_ITEM(WorkStateHorizontalMovingDistance, Dimension);
191     ACE_DEFINE_PROPERTY_GROUP_ITEM(WorkStateVerticalMovingDistance, Dimension);
192 
ToJsonValueWorkStateStyle193     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
194     {
195         /* no fixed attr below, just return */
196         if (filter.IsFastFilter()) {
197             return;
198         }
199         json->PutExtAttr("workDayMarkColor",
200             propWorkDayMarkColor.value_or(Color()).ColorToString().c_str(), filter);
201         json->PutExtAttr("offDayMarkColor", propOffDayMarkColor.value_or(Color()).ColorToString().c_str(), filter);
202         json->PutExtAttr("workDayMarkSize",
203             propWorkDayMarkSize.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
204         json->PutExtAttr("offDayMarkSize",
205             propOffDayMarkSize.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
206         json->PutExtAttr("workStateWidth",
207             propWorkStateWidth.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
208         json->PutExtAttr("workStateHorizontalMovingDistance", propWorkStateHorizontalMovingDistance.value_or(
209             Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
210         json->PutExtAttr("workStateVerticalMovingDistance", propWorkStateVerticalMovingDistance.value_or(
211             Dimension(0, DimensionUnit::VP)).ToString().c_str(), filter);
212     }
213 };
214 
215 enum class Week {
216     Mon = 0,
217     Tue,
218     Wed,
219     Thur,
220     Fri,
221     Sat,
222     Sun,
223 };
224 
225 class ACE_EXPORT CalendarPaintProperty : public PaintProperty {
226     DECLARE_ACE_TYPE(CalendarPaintProperty, PaintProperty);
227 
228 public:
229     CalendarPaintProperty() = default;
230 
231     ~CalendarPaintProperty() override = default;
232 
Clone()233     RefPtr<PaintProperty> Clone() const override
234     {
235         auto value = MakeRefPtr<CalendarPaintProperty>();
236         value->PaintProperty::UpdatePaintProperty(DynamicCast<PaintProperty>(this));
237         value->propCurrentDayStyle_ = CloneCurrentDayStyle();
238         value->propNonCurrentDayStyle_ = CloneNonCurrentDayStyle();
239         value->propTodayStyle_ = CloneTodayStyle();
240         value->propWeekStyle_ = CloneWeekStyle();
241         value->propWorkStateStyle_ = CloneWorkStateStyle();
242         value->propShowLunar_ = CloneShowLunar();
243         value->propShowHoliday_ = CloneShowHoliday();
244         value->propStartOfWeek_ = CloneStartOfWeek();
245         value->propOffDays_ = CloneOffDays();
246         value->propDayRadius_ = CloneDayRadius();
247         return value;
248     }
249 
Reset()250     void Reset() override
251     {
252         PaintProperty::Reset();
253         ResetCurrentDayStyle();
254         ResetNonCurrentDayStyle();
255         ResetTodayStyle();
256         ResetWeekStyle();
257         ResetWorkStateStyle();
258         ResetShowLunar();
259         ResetShowHoliday();
260         ResetStartOfWeek();
261         ResetOffDays();
262         ResetDayRadius();
263     }
264 
ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter)265     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override
266     {
267         ACE_PROPERTY_TO_JSON_VALUE(propCurrentDayStyle_, CurrentDayStyle);
268         ACE_PROPERTY_TO_JSON_VALUE(propNonCurrentDayStyle_, NonCurrentDayStyle);
269         ACE_PROPERTY_TO_JSON_VALUE(propTodayStyle_, TodayStyle);
270         ACE_PROPERTY_TO_JSON_VALUE(propWeekStyle_, WeekStyle);
271         ACE_PROPERTY_TO_JSON_VALUE(propWorkStateStyle_, WorkStateStyle);
272         /* no fixed attr below, just return */
273         if (filter.IsFastFilter()) {
274             return;
275         }
276         json->PutExtAttr("showLunar", propShowLunar_.value_or(false) ? "true" : "false", filter);
277         json->PutExtAttr("showHoliday", propShowHoliday_.value_or(false) ? "true" : "false", filter);
278         static const char* WEEK[] = { "Week.Mon", "Week.Tue", "Week.Wed", "Week.Tur", "Week.Fri", "Week.Sat",
279             "Week.Sun" };
280         json->PutExtAttr("startOfWeek", WEEK[static_cast<int32_t>(GetStartOfWeek().value_or(Week::Mon))], filter);
281         const std::string DEFAULT_OFFDAYS = "5,6";
282         json->PutExtAttr("offDays", propOffDays_.value_or(DEFAULT_OFFDAYS).c_str(), filter);
283     }
284 
285     ACE_DEFINE_PROPERTY_GROUP(CurrentDayStyle, CurrentDayStyle);
286     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, DayColor, Color, PROPERTY_UPDATE_RENDER);
287     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, LunarColor, Color, PROPERTY_UPDATE_RENDER);
288     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, MarkLunarColor, Color, PROPERTY_UPDATE_RENDER);
289     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, DayFontSize, Dimension, PROPERTY_UPDATE_RENDER);
290     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, LunarDayFontSize, Dimension, PROPERTY_UPDATE_RENDER);
291     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, DayHeight, Dimension, PROPERTY_UPDATE_RENDER);
292     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, DayWidth, Dimension, PROPERTY_UPDATE_RENDER);
293     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, GregorianCalendarHeight, Dimension, PROPERTY_UPDATE_RENDER);
294     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, DayYAxisOffset, Dimension, PROPERTY_UPDATE_RENDER);
295     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, LunarDayYAxisOffset, Dimension, PROPERTY_UPDATE_RENDER);
296     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, UnderscoreXAxisOffset, Dimension, PROPERTY_UPDATE_RENDER);
297     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, UnderscoreYAxisOffset, Dimension, PROPERTY_UPDATE_RENDER);
298     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, ScheduleMarkerXAxisOffset, Dimension, PROPERTY_UPDATE_RENDER);
299     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, ScheduleMarkerYAxisOffset, Dimension, PROPERTY_UPDATE_RENDER);
300     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, ColSpace, Dimension, PROPERTY_UPDATE_RENDER);
301     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, DailyFourRowSpace, Dimension, PROPERTY_UPDATE_RENDER);
302     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, DailyFiveRowSpace, Dimension, PROPERTY_UPDATE_RENDER);
303     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, DailySixRowSpace, Dimension, PROPERTY_UPDATE_RENDER);
304     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, LunarHeight, Dimension, PROPERTY_UPDATE_RENDER);
305     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, UnderscoreWidth, Dimension, PROPERTY_UPDATE_RENDER);
306     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, UnderscoreLength, Dimension, PROPERTY_UPDATE_RENDER);
307     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, ScheduleMarkerRadius, Dimension, PROPERTY_UPDATE_RENDER);
308     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, BoundaryRowOffset, Dimension, PROPERTY_UPDATE_RENDER);
309     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(CurrentDayStyle, BoundaryColOffset, Dimension, PROPERTY_UPDATE_RENDER);
310 
311     ACE_DEFINE_PROPERTY_GROUP(NonCurrentDayStyle, NonCurrentDayStyle);
312     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(NonCurrentDayStyle, NonCurrentMonthDayColor, Color, PROPERTY_UPDATE_RENDER);
313     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(NonCurrentDayStyle, NonCurrentMonthLunarColor, Color, PROPERTY_UPDATE_RENDER);
314     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
315         NonCurrentDayStyle, NonCurrentMonthWorkDayMarkColor, Color, PROPERTY_UPDATE_RENDER);
316     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
317         NonCurrentDayStyle, NonCurrentMonthOffDayMarkColor, Color, PROPERTY_UPDATE_RENDER);
318 
319     ACE_DEFINE_PROPERTY_GROUP(TodayStyle, TodayStyle);
320     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TodayStyle, FocusedDayColor, Color, PROPERTY_UPDATE_RENDER);
321     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TodayStyle, FocusedLunarColor, Color, PROPERTY_UPDATE_RENDER);
322     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TodayStyle, FocusedAreaBackgroundColor, Color, PROPERTY_UPDATE_RENDER);
323     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TodayStyle, FocusedAreaRadius, Dimension, PROPERTY_UPDATE_RENDER);
324 
325     ACE_DEFINE_PROPERTY_GROUP(WeekStyle, WeekStyle);
326     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WeekStyle, WeekColor, Color, PROPERTY_UPDATE_RENDER);
327     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WeekStyle, WeekendDayColor, Color, PROPERTY_UPDATE_RENDER);
328     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WeekStyle, WeekendLunarColor, Color, PROPERTY_UPDATE_RENDER);
329     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WeekStyle, WeekFontSize, Dimension, PROPERTY_UPDATE_RENDER);
330     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WeekStyle, WeekHeight, Dimension, PROPERTY_UPDATE_RENDER);
331     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WeekStyle, WeekWidth, Dimension, PROPERTY_UPDATE_RENDER);
332     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WeekStyle, WeekAndDayRowSpace, Dimension, PROPERTY_UPDATE_RENDER);
333 
334     ACE_DEFINE_PROPERTY_GROUP(WorkStateStyle, WorkStateStyle);
335     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WorkStateStyle, WorkDayMarkColor, Color, PROPERTY_UPDATE_RENDER);
336     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WorkStateStyle, OffDayMarkColor, Color, PROPERTY_UPDATE_RENDER);
337     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WorkStateStyle, WorkDayMarkSize, Dimension, PROPERTY_UPDATE_RENDER);
338     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WorkStateStyle, OffDayMarkSize, Dimension, PROPERTY_UPDATE_RENDER);
339     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(WorkStateStyle, WorkStateWidth, Dimension, PROPERTY_UPDATE_RENDER);
340     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
341         WorkStateStyle, WorkStateHorizontalMovingDistance, Dimension, PROPERTY_UPDATE_RENDER);
342     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
343         WorkStateStyle, WorkStateVerticalMovingDistance, Dimension, PROPERTY_UPDATE_RENDER);
344 
345     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowLunar, bool, PROPERTY_UPDATE_RENDER);
346     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowHoliday, bool, PROPERTY_UPDATE_RENDER);
347     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(StartOfWeek, Week, PROPERTY_UPDATE_RENDER);
348     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(OffDays, std::string, PROPERTY_UPDATE_RENDER);
349     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(DayRadius, Dimension, PROPERTY_UPDATE_RENDER);
350 
351     ACE_DISALLOW_COPY_AND_MOVE(CalendarPaintProperty);
352 };
353 } // namespace OHOS::Ace::NG
354 
355 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_CALENDAR_CALENDAR_PAINT_PROPERTY_H
356