1 /* 2 * Copyright (c) 2021 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 CORECANVASIMPL_H 17 #define CORECANVASIMPL_H 18 19 #include "base_impl.h" 20 #include "securec.h" 21 22 #include "draw/brush.h" 23 #include "draw/clip.h" 24 #include "draw/path.h" 25 #include "draw/pen.h" 26 #include "draw/shadow.h" 27 #include "effect/filter.h" 28 #include "image/bitmap.h" 29 #include "image/image.h" 30 #include "image/picture.h" 31 #include "text/text.h" 32 #include "utils/log.h" 33 #include "utils/matrix.h" 34 #include "utils/point.h" 35 #include "utils/point3.h" 36 #include "utils/rect.h" 37 #include "utils/round_rect.h" 38 #include "utils/sampling_options.h" 39 #include "utils/scalar.h" 40 41 namespace OHOS { 42 namespace Media { 43 class PixelMap; 44 } 45 namespace Rosen { 46 namespace Drawing { 47 enum class SrcRectConstraint; 48 class CoreCanvasImpl : public BaseImpl { 49 public: 50 static inline constexpr AdapterType TYPE = AdapterType::BASE_INTERFACE; CoreCanvasImpl()51 CoreCanvasImpl() {}; ~CoreCanvasImpl()52 ~CoreCanvasImpl() override {}; GetType()53 AdapterType GetType() const override 54 { 55 return AdapterType::BASE_INTERFACE; 56 } 57 58 virtual void Bind(const Bitmap& bitmap) = 0; 59 60 // shapes 61 virtual void DrawPoint(const Point& point) = 0; 62 virtual void DrawLine(const Point& startPt, const Point& endPt) = 0; 63 virtual void DrawRect(const Rect& rect) = 0; 64 virtual void DrawRoundRect(const RoundRect& roundRect) = 0; 65 virtual void DrawNestedRoundRect(const RoundRect& outer, const RoundRect& inner) = 0; 66 virtual void DrawArc(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0; 67 virtual void DrawPie(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0; 68 virtual void DrawOval(const Rect& oval) = 0; 69 virtual void DrawCircle(const Point& centerPt, scalar radius) = 0; 70 virtual void DrawPath(const Path& path) = 0; 71 virtual void DrawBackground(const Brush& brush) = 0; 72 virtual void DrawShadow(const Path& path, const Point3& planeParams, const Point3& devLightPos, scalar lightRadius, 73 Color ambientColor, Color spotColor, ShadowFlags flag) = 0; 74 75 // image 76 virtual void DrawBitmap(const Bitmap& bitmap, const scalar px, const scalar py) = 0; 77 virtual void DrawBitmap(Media::PixelMap& pixelMap, const scalar px, const scalar py) = 0; 78 virtual void DrawImage(const Image& image, const scalar px, const scalar p, const SamplingOptions& sampling) = 0; 79 virtual void DrawImageRect(const Image& image, const Rect& src, const Rect& dst, const SamplingOptions& sampling, 80 SrcRectConstraint constraint) = 0; 81 virtual void DrawImageRect(const Image& image, const Rect& dst, const SamplingOptions& sampling) = 0; 82 virtual void DrawPicture(const Picture& picture) = 0; 83 84 // clip 85 virtual void ClipRect(const Rect& rect, ClipOp op) = 0; 86 virtual void ClipRoundRect(const RoundRect& roundRect, ClipOp op) = 0; 87 virtual void ClipPath(const Path& path, ClipOp op) = 0; 88 89 // transform 90 virtual void SetMatrix(const Matrix& matrix) = 0; 91 virtual void ResetMatrix() = 0; 92 virtual void ConcatMatrix(const Matrix& matrix) = 0; 93 virtual void Translate(scalar dx, scalar dy) = 0; 94 virtual void Scale(scalar sx, scalar sy) = 0; 95 virtual void Rotate(scalar deg) = 0; 96 virtual void Rotate(scalar deg, scalar sx, scalar sy) = 0; 97 virtual void Shear(scalar sx, scalar sy) = 0; 98 99 // state 100 virtual void Flush() = 0; 101 virtual void Clear(ColorQuad color) = 0; 102 virtual void Save() = 0; 103 virtual void SaveLayer(const Rect& rect, const Brush& brush) = 0; 104 virtual void Restore() = 0; 105 106 // paint 107 virtual void AttachPen(const Pen& pen) = 0; 108 virtual void AttachBrush(const Brush& brush) = 0; 109 virtual void DetachPen() = 0; 110 virtual void DetachBrush() = 0; 111 }; 112 } // namespace Drawing 113 } // namespace Rosen 114 } // namespace OHOS 115 #endif 116