1 /*
2 * Copyright (c) 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
16 #include "drawing_filter.h"
17
18 #include "drawing_canvas_utils.h"
19
20 #include "effect/filter.h"
21
22 using namespace OHOS;
23 using namespace Rosen;
24 using namespace Drawing;
25
CastToFilter(OH_Drawing_Filter * cFilter)26 static Filter* CastToFilter(OH_Drawing_Filter* cFilter)
27 {
28 return reinterpret_cast<Filter*>(cFilter);
29 }
30
CastToImageFilter(OH_Drawing_ImageFilter * cImageFilter)31 static ImageFilter* CastToImageFilter(OH_Drawing_ImageFilter* cImageFilter)
32 {
33 return reinterpret_cast<ImageFilter*>(cImageFilter);
34 }
35
CastToMaskFilter(OH_Drawing_MaskFilter * cMaskFilter)36 static MaskFilter* CastToMaskFilter(OH_Drawing_MaskFilter* cMaskFilter)
37 {
38 return reinterpret_cast<MaskFilter*>(cMaskFilter);
39 }
40
CastToColorFilter(OH_Drawing_ColorFilter * cColorFilter)41 static ColorFilter* CastToColorFilter(OH_Drawing_ColorFilter* cColorFilter)
42 {
43 return reinterpret_cast<ColorFilter*>(cColorFilter);
44 }
45
OH_Drawing_FilterCreate()46 OH_Drawing_Filter* OH_Drawing_FilterCreate()
47 {
48 return (OH_Drawing_Filter*)new Filter();
49 }
50
OH_Drawing_FilterSetImageFilter(OH_Drawing_Filter * cFliter,OH_Drawing_ImageFilter * cImageFilter)51 void OH_Drawing_FilterSetImageFilter(OH_Drawing_Filter* cFliter, OH_Drawing_ImageFilter* cImageFilter)
52 {
53 Filter* filter = CastToFilter(cFliter);
54 if (filter == nullptr) {
55 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
56 return;
57 }
58 if (cImageFilter == nullptr) {
59 filter->SetImageFilter(nullptr);
60 return;
61 }
62 filter->SetImageFilter(std::shared_ptr<ImageFilter>{CastToImageFilter(cImageFilter), [](auto p) {}});
63 }
64
OH_Drawing_FilterSetMaskFilter(OH_Drawing_Filter * cFliter,OH_Drawing_MaskFilter * cMaskFilter)65 void OH_Drawing_FilterSetMaskFilter(OH_Drawing_Filter* cFliter, OH_Drawing_MaskFilter* cMaskFilter)
66 {
67 Filter* filter = CastToFilter(cFliter);
68 if (filter == nullptr) {
69 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
70 return;
71 }
72 if (cMaskFilter == nullptr) {
73 filter->SetMaskFilter(nullptr);
74 return;
75 }
76 filter->SetMaskFilter(std::shared_ptr<MaskFilter>{CastToMaskFilter(cMaskFilter), [](auto p) {}});
77 }
78
OH_Drawing_FilterSetColorFilter(OH_Drawing_Filter * cFliter,OH_Drawing_ColorFilter * cColorFilter)79 void OH_Drawing_FilterSetColorFilter(OH_Drawing_Filter* cFliter, OH_Drawing_ColorFilter* cColorFilter)
80 {
81 Filter* filter = CastToFilter(cFliter);
82 if (filter == nullptr) {
83 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
84 return;
85 }
86 if (cColorFilter == nullptr) {
87 filter->SetColorFilter(nullptr);
88 return;
89 }
90 filter->SetColorFilter(std::shared_ptr<ColorFilter>{CastToColorFilter(cColorFilter), [](auto p) {}});
91 }
92
OH_Drawing_FilterGetColorFilter(OH_Drawing_Filter * cFliter,OH_Drawing_ColorFilter * cColorFilter)93 void OH_Drawing_FilterGetColorFilter(OH_Drawing_Filter* cFliter, OH_Drawing_ColorFilter* cColorFilter)
94 {
95 Filter* filter = CastToFilter(cFliter);
96 if (filter == nullptr) {
97 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
98 return;
99 }
100 ColorFilter* colorFilter = CastToColorFilter(cColorFilter);
101 if (colorFilter == nullptr) {
102 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
103 return;
104 }
105 std::shared_ptr<ColorFilter> colorFilterPtr = filter->GetColorFilter();
106 if (colorFilterPtr == nullptr) {
107 *colorFilter = ColorFilter(ColorFilter::FilterType::NO_TYPE);
108 return;
109 }
110 *colorFilter = *(colorFilterPtr.get());
111 }
112
OH_Drawing_FilterDestroy(OH_Drawing_Filter * cFilter)113 void OH_Drawing_FilterDestroy(OH_Drawing_Filter* cFilter)
114 {
115 if (!cFilter) {
116 return;
117 }
118 delete CastToFilter(cFilter);
119 }
120