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 "base/memory/ace_type.h"
18 #include "core/components_ng/base/frame_node.h"
19 #include "core/components_ng/base/view_abstract.h"
20 #include "core/components_ng/base/view_stack_processor.h"
21 #include "core/components_ng/pattern/button/toggle_button_paint_property.h"
22 #include "core/components_ng/pattern/button/toggle_button_pattern.h"
23 
24 namespace OHOS::Ace::NG {
Create(const std::string & tagName)25 void ToggleButtonModelNG::Create(const std::string& tagName)
26 {
27     auto* stack = ViewStackProcessor::GetInstance();
28     auto nodeId = stack->ClaimNodeId();
29     ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", tagName.c_str(), nodeId);
30     auto frameNode =
31         FrameNode::GetOrCreateFrameNode(tagName, nodeId, []() { return AceType::MakeRefPtr<ToggleButtonPattern>(); });
32     stack->Push(frameNode);
33 }
34 
SetSelectedColor(const Color & selectedColor)35 void ToggleButtonModelNG::SetSelectedColor(const Color& selectedColor)
36 {
37     ACE_UPDATE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColor, selectedColor);
38 }
39 
SetIsOn(bool isOn)40 void ToggleButtonModelNG::SetIsOn(bool isOn)
41 {
42     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
43     CHECK_NULL_VOID(frameNode);
44     auto eventHub = frameNode->GetEventHub<ToggleButtonEventHub>();
45     CHECK_NULL_VOID(eventHub);
46     eventHub->SetCurrentUIState(UI_STATE_SELECTED, isOn);
47 
48     ACE_UPDATE_PAINT_PROPERTY(ToggleButtonPaintProperty, IsOn, isOn);
49 }
50 
SetBackgroundColor(const Color & backgroundColor,bool flag)51 void ToggleButtonModelNG::SetBackgroundColor(const Color& backgroundColor, bool flag)
52 {
53     auto* stack = ViewStackProcessor::GetInstance();
54     CHECK_NULL_VOID(stack);
55     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
56     CHECK_NULL_VOID(frameNode);
57     auto buttonPattern = stack->GetMainFrameNodePattern<ToggleButtonPattern>();
58     if (buttonPattern) {
59         if (flag) {
60             ACE_UPDATE_PAINT_PROPERTY(ToggleButtonPaintProperty, BackgroundColor, backgroundColor);
61         } else {
62             ACE_RESET_PAINT_PROPERTY_WITH_FLAG(ToggleButtonPaintProperty, BackgroundColor, PROPERTY_UPDATE_RENDER);
63         }
64         return;
65     }
66     NG::ViewAbstract::SetBackgroundColor(backgroundColor);
67 }
68 
SetSelectedColor(FrameNode * frameNode,const Color & selectedColor)69 void ToggleButtonModelNG::SetSelectedColor(FrameNode* frameNode, const Color& selectedColor)
70 {
71     ACE_UPDATE_NODE_PAINT_PROPERTY(ToggleButtonPaintProperty, SelectedColor, selectedColor, frameNode);
72 }
73 
SetBackgroundColor(FrameNode * frameNode,const Color & backgroundColor)74 void ToggleButtonModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& backgroundColor)
75 {
76     CHECK_NULL_VOID(frameNode);
77     auto buttonPattern = AceType::DynamicCast<ToggleButtonPattern>(frameNode->GetPattern());
78     if (buttonPattern) {
79         ACE_UPDATE_NODE_PAINT_PROPERTY(ToggleButtonPaintProperty, BackgroundColor, backgroundColor, frameNode);
80         return;
81     }
82     NG::ViewAbstract::SetBackgroundColor(frameNode, backgroundColor);
83 }
84 } // namespace OHOS::Ace::NG