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