• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024 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 #include "core/components_ng/pattern/canvas/canvas_model_ng.h"
17 
18 #include <mutex>
19 
20 #include "base/log/log_wrapper.h"
21 #include "core/components_ng/base/view_abstract.h"
22 #include "core/components_ng/base/view_stack_processor.h"
23 #include "core/components_ng/pattern/canvas/canvas_paint_method.h"
24 #include "core/components_ng/pattern/canvas/canvas_pattern.h"
25 #include "core/components_v2/inspector/inspector_constants.h"
26 
27 namespace OHOS::Ace::NG {
Create()28 RefPtr<AceType> CanvasModelNG::Create()
29 {
30     auto* stack = ViewStackProcessor::GetInstance();
31     auto nodeId = stack->ClaimNodeId();
32     ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::CANVAS_ETS_TAG, nodeId);
33     auto frameNode = FrameNode::GetOrCreateFrameNode(
34         V2::CANVAS_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<CanvasPattern>(); });
35     stack->Push(frameNode);
36     return frameNode->GetPattern<CanvasPattern>();
37 }
38 
GetTaskPool(RefPtr<AceType> & pattern)39 RefPtr<AceType> CanvasModelNG::GetTaskPool(RefPtr<AceType>& pattern)
40 {
41     return pattern;
42 }
43 
SetOnReady(std::function<void ()> && onReady)44 void CanvasModelNG::SetOnReady(std::function<void()>&& onReady)
45 {
46     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
47     CHECK_NULL_VOID(frameNode);
48     auto eventHub = frameNode->GetOrCreateEventHub<CanvasEventHub>();
49     CHECK_NULL_VOID(eventHub);
50 
51     auto func = onReady;
52     auto onReadyEvent = [func]() { func(); };
53     eventHub->SetOnReady(std::move(onReadyEvent));
54 }
55 
EnableAnalyzer(bool enable)56 void CanvasModelNG::EnableAnalyzer(bool enable)
57 {
58     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
59     CHECK_NULL_VOID(frameNode);
60     auto pattern = frameNode->GetPattern<CanvasPattern>();
61     CHECK_NULL_VOID(pattern);
62     pattern->EnableAnalyzer(enable);
63 }
64 
SetImageAIOptions(void * options)65 void CanvasModelNG::SetImageAIOptions(void* options)
66 {
67     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
68     CHECK_NULL_VOID(frameNode);
69     auto pattern = frameNode->GetPattern<CanvasPattern>();
70     CHECK_NULL_VOID(pattern);
71     pattern->SetImageAIOptions(options);
72 }
73 
DetachRenderContext()74 void CanvasModelNG::DetachRenderContext()
75 {
76     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
77     CHECK_NULL_VOID(frameNode);
78     auto pattern = frameNode->GetPattern<CanvasPattern>();
79     CHECK_NULL_VOID(pattern);
80     pattern->DetachRenderContext();
81 }
82 
SetOnReady(FrameNode * frameNode,std::function<void ()> && onReady)83 void CanvasModelNG::SetOnReady(FrameNode* frameNode, std::function<void()>&& onReady)
84 {
85     CHECK_NULL_VOID(frameNode);
86     auto eventHub = frameNode->GetOrCreateEventHub<CanvasEventHub>();
87     CHECK_NULL_VOID(eventHub);
88     eventHub->SetOnReady(std::move(onReady));
89 }
90 
EnableAnalyzer(FrameNode * frameNode,bool enable)91 void CanvasModelNG::EnableAnalyzer(FrameNode* frameNode, bool enable)
92 {
93     CHECK_NULL_VOID(frameNode);
94     auto pattern = frameNode->GetPattern<CanvasPattern>();
95     CHECK_NULL_VOID(pattern);
96     pattern->EnableAnalyzer(enable);
97 }
98 
GetCanvasPattern(FrameNode * node)99 RefPtr<AceType> CanvasModelNG::GetCanvasPattern(FrameNode* node)
100 {
101     CHECK_NULL_RETURN(node, nullptr);
102     auto* frameNode = reinterpret_cast<FrameNode*>(node);
103     return frameNode->GetPattern<CanvasPattern>();
104 }
105 
CreateFrameNode(int32_t nodeId)106 RefPtr<FrameNode> CanvasModelNG::CreateFrameNode(int32_t nodeId)
107 {
108     return FrameNode::GetOrCreateFrameNode(
109         V2::CANVAS_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<CanvasPattern>(); });
110 }
111 } // namespace OHOS::Ace::NG
112