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 #include "core/components_ng/pattern/button/toggle_button_model_ng.h"
16
17 #include "core/components_ng/base/view_abstract_model.h"
18 #include "core/components_ng/pattern/button/toggle_button_pattern.h"
19
20 namespace OHOS::Ace::NG {
Create(const std::string & tagName)21 void ToggleButtonModelNG::Create(const std::string& tagName)
22 {
23 auto* stack = ViewStackProcessor::GetInstance();
24 auto nodeId = stack->ClaimNodeId();
25 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", tagName.c_str(), nodeId);
26 auto frameNode =
27 FrameNode::GetOrCreateFrameNode(tagName, nodeId, []() { return AceType::MakeRefPtr<ToggleButtonPattern>(); });
28 CHECK_NULL_VOID(frameNode);
29 stack->Push(frameNode);
30 auto pros = frameNode->GetPaintProperty<ToggleButtonPaintProperty>();
31 CHECK_NULL_VOID(pros);
32 pros->ResetSelectedColorSetByUser();
33 }
34
SetSelectedColor(const Color & selectedColor)35 void ToggleButtonModelNG::SetSelectedColor(const Color& selectedColor)
36 {
37 ACE_UPDATE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColor, selectedColor);
38 ACE_UPDATE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColorSetByUser, true);
39 }
40
ResetSelectedColor()41 void ToggleButtonModelNG::ResetSelectedColor()
42 {
43 ACE_RESET_PAINT_PROPERTY_WITH_FLAG(ToggleButtonPaintProperty, SelectedColor, PROPERTY_UPDATE_RENDER);
44 ACE_UPDATE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColorSetByUser, false);
45 }
46
SetIsOn(bool isOn)47 void ToggleButtonModelNG::SetIsOn(bool isOn)
48 {
49 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
50 CHECK_NULL_VOID(frameNode);
51 auto eventHub = frameNode->GetOrCreateEventHub<ToggleButtonEventHub>();
52 CHECK_NULL_VOID(eventHub);
53 eventHub->SetCurrentUIState(UI_STATE_SELECTED, isOn);
54
55 ACE_UPDATE_PAINT_PROPERTY(ToggleButtonPaintProperty, IsOn, isOn);
56 }
57
SetBackgroundColor(const Color & backgroundColor,bool flag)58 void ToggleButtonModelNG::SetBackgroundColor(const Color& backgroundColor, bool flag)
59 {
60 auto* stack = ViewStackProcessor::GetInstance();
61 CHECK_NULL_VOID(stack);
62 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
63 CHECK_NULL_VOID(frameNode);
64 auto buttonPattern = stack->GetMainFrameNodePattern<ToggleButtonPattern>();
65 if (buttonPattern) {
66 if (flag) {
67 ACE_UPDATE_PAINT_PROPERTY(ToggleButtonPaintProperty, BackgroundColor, backgroundColor);
68 } else {
69 ACE_RESET_PAINT_PROPERTY_WITH_FLAG(ToggleButtonPaintProperty, BackgroundColor, PROPERTY_UPDATE_RENDER);
70 }
71 return;
72 }
73 NG::ViewAbstract::SetBackgroundColor(backgroundColor);
74 }
75
SetBackgroundColor(FrameNode * frameNode,const Color & backgroundColor,bool flag)76 void ToggleButtonModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& backgroundColor, bool flag)
77 {
78 CHECK_NULL_VOID(frameNode);
79 auto buttonPattern = AceType::DynamicCast<ToggleButtonPattern>(frameNode->GetPattern());
80 if (buttonPattern) {
81 if (flag) {
82 ACE_UPDATE_NODE_PAINT_PROPERTY(ToggleButtonPaintProperty, BackgroundColor, backgroundColor, frameNode);
83 } else {
84 ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG(
85 ToggleButtonPaintProperty, BackgroundColor, PROPERTY_UPDATE_RENDER, frameNode);
86 }
87 return;
88 }
89 NG::ViewAbstract::SetBackgroundColor(frameNode, backgroundColor);
90 }
91
SetSelectedColor(FrameNode * frameNode,const Color & selectedColor)92 void ToggleButtonModelNG::SetSelectedColor(FrameNode* frameNode, const Color& selectedColor)
93 {
94 ACE_UPDATE_NODE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColor, selectedColor, frameNode);
95 ACE_UPDATE_NODE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColorSetByUser, true, frameNode);
96 }
97
SetSelectedColorSetByUser(FrameNode * frameNode,const bool isByUser)98 void ToggleButtonModelNG::SetSelectedColorSetByUser(FrameNode* frameNode, const bool isByUser)
99 {
100 CHECK_NULL_VOID(frameNode);
101 ACE_UPDATE_NODE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColorSetByUser, isByUser, frameNode);
102 }
103
ResetSelectedColor(FrameNode * frameNode)104 void ToggleButtonModelNG::ResetSelectedColor(FrameNode* frameNode)
105 {
106 ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG(
107 ToggleButtonPaintProperty, SelectedColor, PROPERTY_UPDATE_RENDER, frameNode);
108 ACE_UPDATE_NODE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColorSetByUser, false, frameNode);
109 }
110
SetBackgroundColor(FrameNode * frameNode,const Color & backgroundColor)111 void ToggleButtonModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& backgroundColor)
112 {
113 CHECK_NULL_VOID(frameNode);
114 auto buttonPattern = AceType::DynamicCast<ToggleButtonPattern>(frameNode->GetPattern());
115 if (buttonPattern) {
116 ACE_UPDATE_NODE_PAINT_PROPERTY(ToggleButtonPaintProperty, BackgroundColor, backgroundColor, frameNode);
117 return;
118 }
119 NG::ViewAbstract::SetBackgroundColor(frameNode, backgroundColor);
120 }
121 } // namespace OHOS::Ace::NG