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