1 /*
2  * Copyright (c) 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 
17 #include "node_extened.h"
18 
19 #include "base/utils/utils.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
OH_ArkUI_DrawableDescriptor_CreateFromPixelMap(OH_PixelmapNativeHandle pixelMap)25 ArkUI_DrawableDescriptor* OH_ArkUI_DrawableDescriptor_CreateFromPixelMap(OH_PixelmapNativeHandle pixelMap)
26 {
27     CHECK_NULL_RETURN(pixelMap, nullptr);
28     ArkUI_DrawableDescriptor* drawableDescriptor =
29         new ArkUI_DrawableDescriptor { nullptr, nullptr, 0, nullptr, nullptr, nullptr, nullptr };
30     drawableDescriptor->pixelMap = pixelMap;
31     drawableDescriptor->drawableDescriptor =
32         std::make_shared<OHOS::Ace::Napi::DrawableDescriptor>(pixelMap->GetInnerPixelmap());
33     return drawableDescriptor;
34 }
35 
OH_ArkUI_DrawableDescriptor_CreateFromAnimatedPixelMap( OH_PixelmapNativeHandle* array, int32_t size)36 ArkUI_DrawableDescriptor* OH_ArkUI_DrawableDescriptor_CreateFromAnimatedPixelMap(
37     OH_PixelmapNativeHandle* array, int32_t size)
38 {
39     CHECK_NULL_RETURN(array, nullptr);
40     ArkUI_DrawableDescriptor* drawableDescriptor =
41         new ArkUI_DrawableDescriptor { nullptr, nullptr, 0, nullptr, nullptr, nullptr, nullptr };
42     drawableDescriptor->pixelMapArray = array;
43     drawableDescriptor->size = size;
44     std::vector<std::shared_ptr<OHOS::Media::PixelMap>> pixelMapList;
45     for (int32_t index = 0; index < size; index++) {
46         if (!array[index]) {
47             continue;
48         }
49         pixelMapList.push_back(array[index]->GetInnerPixelmap());
50     }
51     int32_t duration = -1;
52     int32_t iteration = 1;
53     drawableDescriptor->animatedDrawableDescriptor =
54         std::make_shared<OHOS::Ace::Napi::AnimatedDrawableDescriptor>(pixelMapList, duration, iteration);
55     return drawableDescriptor;
56 }
57 
OH_ArkUI_DrawableDescriptor_Dispose(ArkUI_DrawableDescriptor* drawableDescriptor)58 void OH_ArkUI_DrawableDescriptor_Dispose(ArkUI_DrawableDescriptor* drawableDescriptor)
59 {
60     delete drawableDescriptor;
61 }
62 
OH_ArkUI_DrawableDescriptor_GetStaticPixelMap(ArkUI_DrawableDescriptor* drawableDescriptor)63 OH_PixelmapNativeHandle OH_ArkUI_DrawableDescriptor_GetStaticPixelMap(ArkUI_DrawableDescriptor* drawableDescriptor)
64 {
65     CHECK_NULL_RETURN(drawableDescriptor, nullptr);
66     return drawableDescriptor->pixelMap;
67 }
68 
OH_ArkUI_DrawableDescriptor_GetAnimatedPixelMapArray( ArkUI_DrawableDescriptor* drawableDescriptor)69 OH_PixelmapNativeHandle* OH_ArkUI_DrawableDescriptor_GetAnimatedPixelMapArray(
70     ArkUI_DrawableDescriptor* drawableDescriptor)
71 {
72     CHECK_NULL_RETURN(drawableDescriptor, nullptr);
73     return drawableDescriptor->pixelMapArray;
74 }
75 
OH_ArkUI_DrawableDescriptor_GetAnimatedPixelMapArraySize(ArkUI_DrawableDescriptor* drawableDescriptor)76 int32_t OH_ArkUI_DrawableDescriptor_GetAnimatedPixelMapArraySize(ArkUI_DrawableDescriptor* drawableDescriptor)
77 {
78     CHECK_NULL_RETURN(drawableDescriptor, 0);
79     return drawableDescriptor->size;
80 }
81 
OH_ArkUI_DrawableDescriptor_SetAnimationDuration(ArkUI_DrawableDescriptor* drawableDescriptor, int32_t duration)82 void OH_ArkUI_DrawableDescriptor_SetAnimationDuration(ArkUI_DrawableDescriptor* drawableDescriptor, int32_t duration)
83 {
84     CHECK_NULL_VOID(drawableDescriptor);
85     CHECK_NULL_VOID(drawableDescriptor->animatedDrawableDescriptor);
86     drawableDescriptor->animatedDrawableDescriptor->SetDuration(duration);
87 }
88 
OH_ArkUI_DrawableDescriptor_GetAnimationDuration(ArkUI_DrawableDescriptor* drawableDescriptor)89 int32_t OH_ArkUI_DrawableDescriptor_GetAnimationDuration(ArkUI_DrawableDescriptor* drawableDescriptor)
90 {
91     CHECK_NULL_RETURN(drawableDescriptor, -1);
92     CHECK_NULL_RETURN(drawableDescriptor->animatedDrawableDescriptor, -1);
93     return drawableDescriptor->animatedDrawableDescriptor->GetDuration();
94 }
95 
OH_ArkUI_DrawableDescriptor_SetAnimationIteration( ArkUI_DrawableDescriptor* drawableDescriptor, int32_t iteration)96 void OH_ArkUI_DrawableDescriptor_SetAnimationIteration(
97     ArkUI_DrawableDescriptor* drawableDescriptor, int32_t iteration)
98 {
99     CHECK_NULL_VOID(drawableDescriptor);
100     CHECK_NULL_VOID(drawableDescriptor->animatedDrawableDescriptor);
101     drawableDescriptor->animatedDrawableDescriptor->SetIterations(iteration);
102 }
103 
OH_ArkUI_DrawableDescriptor_GetAnimationIteration(ArkUI_DrawableDescriptor* drawableDescriptor)104 int32_t OH_ArkUI_DrawableDescriptor_GetAnimationIteration(ArkUI_DrawableDescriptor* drawableDescriptor)
105 {
106     CHECK_NULL_RETURN(drawableDescriptor, 1);
107     CHECK_NULL_RETURN(drawableDescriptor->animatedDrawableDescriptor, 1);
108     return drawableDescriptor->animatedDrawableDescriptor->GetIterations();
109 }
110 
111 #ifdef __cplusplus
112 };
113 #endif
114