1 /*
2  * Copyright (c) 2022 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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_SKIA_DECORATION_PAINTER_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_SKIA_DECORATION_PAINTER_H
18 
19 #include "include/core/SkCanvas.h"
20 #include "include/core/SkMaskFilter.h"
21 #include "include/core/SkPaint.h"
22 #include "include/core/SkPath.h"
23 #include "include/core/SkRRect.h"
24 #include "include/core/SkShader.h"
25 
26 #include "base/geometry/ng/rect_t.h"
27 #include "base/geometry/ng/size_t.h"
28 #include "core/components/common/properties/clip_path.h"
29 #include "core/components_ng/property/gradient_property.h"
30 
31 namespace OHOS::Rosen::Drawing {
32 class Image;
33 } // namespace OHOS::Rosen::Drawing
34 
35 namespace OHOS::Ace::NG {
36 using RSImage = Rosen::Drawing::Image;
37 class SkiaDecorationPainter : public virtual AceType {
38     DECLARE_ACE_TYPE(SkiaDecorationPainter, AceType);
39 
40 public:
41     SkiaDecorationPainter() = default;
42     ~SkiaDecorationPainter() override = default;
ConvertRadiusToSigma(float radius)43     static float ConvertRadiusToSigma(float radius)
44     {
45         constexpr float BlurSigmaScale = 0.57735f;
46         return radius > 0.0f ? BlurSigmaScale * radius + SK_ScalarHalf : 0.0f;
47     }
48 
49     static sk_sp<SkShader> CreateGradientShader(const NG::Gradient& gradient, const SizeF& size);
50     static SkPath SkiaCreateSkPath(const RefPtr<BasicShape>& basicShape, const SizeF& size);
51     static void SkiaCreateInset(
52         const RefPtr<BasicShape>& basicShape, const SizeF& size, const OffsetF& position, SkPath& skPath);
53     static void SkiaCreateCircle(
54         const RefPtr<BasicShape>& basicShape, const SizeF& size, const OffsetF& position, SkPath& skPath);
55     static void SkiaCreateEllipse(
56         const RefPtr<BasicShape>& basicShape, const SizeF& size, const OffsetF& position, SkPath& skPath);
57     static void SkiaCreatePolygon(
58         const RefPtr<BasicShape>& basicShape, const SizeF& size, const OffsetF& position, SkPath& skPath);
59     static void SkiaCreatePath(
60         const RefPtr<BasicShape>& basicShape, const SizeF& size, const OffsetF& position, SkPath& skPath);
61     static void SkiaCreateRect(
62         const RefPtr<BasicShape>& basicShape, const SizeF& size, const OffsetF& position, SkPath& skPath);
63     static float SkiaDimensionToPx(const Dimension& value, const SizeF& size, LengthMode type);
64     static float SkiaGetFloatRadiusValue(
65         const Dimension& src, const Dimension& dest, const SizeF& size, LengthMode type);
66 
67     static void PaintGrayScale(const SkRRect& rRect, SkCanvas* canvas, float grayscale);
68     static void PaintBrightness(const SkRRect& rRect, SkCanvas* canvas, float brightness);
69     static void PaintContrast(const SkRRect& rRect, SkCanvas* canvas, float contrast);
70     static void PaintColorBlend(
71         const SkRRect& rRect, SkCanvas* canvas, const Color& colorBlend);
72     static void PaintSaturate(const SkRRect& rRect, SkCanvas* canvas, float saturate);
73     static void PaintSepia(const SkRRect& rRect, SkCanvas* canvas, float sepia);
74     static void PaintInvert(const SkRRect& rRect, SkCanvas* canvas, float invert);
75     static void PaintHueRotate(const SkRRect& rRect, SkCanvas* canvas, float hueRotate);
76     static SkPaint CreateMaskSkPaint(const RefPtr<BasicShape>& basicShape);
77     static RSImage CreateBorderImageGradient(const NG::Gradient& gradients, const SizeF& paintSize);
78 };
79 } // namespace OHOS::Ace::NG
80 
81 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_DECORATION_PAINTER_H
82