• 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 #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