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_BUBBLE_BUBBLE_LAYOUT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_BUBBLE_BUBBLE_LAYOUT_PROPERTY_H
18 
19 #include "base/geometry/ng/offset_t.h"
20 #include "core/components/common/properties/placement.h"
21 #include "core/components_ng/layout/layout_property.h"
22 
23 namespace OHOS::Ace::NG {
24 class ACE_EXPORT BubbleLayoutProperty : public LayoutProperty {
25     DECLARE_ACE_TYPE(BubbleLayoutProperty, LayoutProperty);
26 
27 public:
28     BubbleLayoutProperty() = default;
29     ~BubbleLayoutProperty() override = default;
30 
Clone()31     RefPtr<LayoutProperty> Clone() const override
32     {
33         auto value = MakeRefPtr<BubbleLayoutProperty>();
34         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
35         value->propEnableArrow_ = CloneEnableArrow();
36         value->propUseCustom_ = CloneUseCustom();
37         value->propPlacement_ = ClonePlacement();
38         value->propShowInSubWindow_ = CloneShowInSubWindow();
39         value->propDisplayWindowOffset_ = CloneDisplayWindowOffset();
40         value->propTargetSpace_ = CloneTargetSpace();
41         value->propBlockEvent_ = CloneBlockEvent();
42         value->propPositionOffset_ = ClonePositionOffset();
43         value->propArrowHeight_ = CloneArrowHeight();
44         value->propArrowWidth_ = CloneArrowWidth();
45         value->propRadius_ = CloneRadius();
46         value->propIsCaretMode_ = CloneIsCaretMode();
47         value->propFollowTransformOfTarget_ = CloneFollowTransformOfTarget();
48         return value;
49     }
50 
Reset()51     void Reset() override
52     {
53         LayoutProperty::Reset();
54         ResetEnableArrow();
55         ResetPlacement();
56         ResetUseCustom();
57         ResetShowInSubWindow();
58         ResetDisplayWindowOffset();
59         ResetTargetSpace();
60         ResetBlockEvent();
61         ResetPositionOffset();
62         ResetArrowHeight();
63         ResetArrowWidth();
64         ResetRadius();
65         ResetIsCaretMode();
66         ResetFollowTransformOfTarget();
67     }
68 
69     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(EnableArrow, bool, PROPERTY_UPDATE_MEASURE);
70     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UseCustom, bool, PROPERTY_UPDATE_MEASURE);
71     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Placement, Placement, PROPERTY_UPDATE_MEASURE);
72     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowInSubWindow, bool, PROPERTY_UPDATE_MEASURE);
73     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(DisplayWindowOffset, OffsetF, PROPERTY_UPDATE_MEASURE);
74     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TargetSpace, Dimension, PROPERTY_UPDATE_RENDER);
75     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BlockEvent, bool, PROPERTY_UPDATE_MEASURE);
76     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PositionOffset, OffsetF, PROPERTY_UPDATE_LAYOUT);
77     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ArrowHeight, Dimension, PROPERTY_UPDATE_LAYOUT);
78     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ArrowWidth, Dimension, PROPERTY_UPDATE_LAYOUT);
79     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Radius, Dimension, PROPERTY_UPDATE_LAYOUT);
80     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsCaretMode, bool, PROPERTY_UPDATE_LAYOUT);
81     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FollowTransformOfTarget, bool, PROPERTY_UPDATE_LAYOUT);
82 
83 private:
84     ACE_DISALLOW_COPY_AND_MOVE(BubbleLayoutProperty);
85 };
86 } // namespace OHOS::Ace::NG
87 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_BUBBLE_BUBBLE_LAYOUT_PROPERTY_H
88