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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_RENDER_ADAPTER_ROSEN_DRAWING_IMAGE_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_RENDER_ADAPTER_ROSEN_DRAWING_IMAGE_H 18 19 #include <stdint.h> 20 21 #include "core/components_ng/render/canvas_image.h" 22 #include "core/components_ng/render/drawing.h" 23 #include "core/components_ng/render/drawing_forward.h" 24 25 namespace OHOS::Ace::NG { 26 class DrawingImage : public virtual CanvasImage { DECLARE_ACE_TYPE(DrawingImage,CanvasImage)27 DECLARE_ACE_TYPE(DrawingImage, CanvasImage) 28 public: 29 explicit DrawingImage(const std::shared_ptr<RSImage>& image) : image_(image) {} 30 DrawingImage() = default; 31 ~DrawingImage() override = default; 32 GetImage()33 virtual std::shared_ptr<RSImage> GetImage() const 34 { 35 return image_; 36 } 37 GetCompressData()38 virtual std::shared_ptr<RSData> GetCompressData() const 39 { 40 return compressData_; 41 } 42 HasData()43 bool HasData() const override 44 { 45 return GetCompressData() || GetImage(); 46 } 47 SetCompressData(std::shared_ptr<RSData> data,int32_t w,int32_t h)48 void SetCompressData(std::shared_ptr<RSData> data, int32_t w, int32_t h) 49 { 50 compressData_ = data; 51 compressWidth_ = w; 52 compressHeight_ = h; 53 uniqueId_ = image_->GetUniqueID(); 54 } 55 SetRawCompressData(void * dataPtr,int32_t w,int32_t h)56 void SetRawCompressData(void* dataPtr, int32_t w, int32_t h) override 57 { 58 auto* rsData = reinterpret_cast<std::shared_ptr<RSData>*>(dataPtr); 59 SetCompressData(*rsData, w, h); 60 } 61 GetCompressWidth()62 virtual int32_t GetCompressWidth() const 63 { 64 return compressWidth_; 65 } 66 GetCompressHeight()67 virtual int32_t GetCompressHeight() const 68 { 69 return compressHeight_; 70 } 71 GetUniqueID()72 virtual uint32_t GetUniqueID() const 73 { 74 return uniqueId_; 75 } 76 SetUniqueID(uint32_t id)77 virtual void SetUniqueID(uint32_t id) 78 { 79 uniqueId_ = id; 80 } 81 82 RefPtr<CanvasImage> Clone() override; 83 84 void Cache(const std::string& key) override; 85 86 RefPtr<PixelMap> GetPixelMap() const override; 87 88 void ReplaceRSImage(std::shared_ptr<RSImage> image); 89 int32_t GetWidth() const override; 90 int32_t GetHeight() const override; 91 92 void DrawToRSCanvas( 93 RSCanvas& canvas, const RSRect& srcRect, const RSRect& dstRect, const BorderRadiusArray& radiusXY) override; 94 bool DrawImageNine( 95 RSCanvas& canvas, const RSRect& srcRect, const RSRect& dstRect, const BorderRadiusArray& radiusXY); 96 bool DrawImageLattice( 97 RSCanvas& canvas, const RSRect& srcRect, const RSRect& dstRect, const BorderRadiusArray& radiusXY); 98 void DrawRect(RSCanvas& canvas, const RSRect& srcRect, const RSRect& dstRect) override; 99 static RefPtr<CanvasImage> QueryFromCache(const std::string& key); 100 101 static std::shared_ptr<RSImage> MakeRSImageFromPixmap(const RefPtr<PixelMap>& pixmap); 102 static std::shared_ptr<RSColorSpace> ColorSpaceToRSColorSpace(const RefPtr<PixelMap>& pixmap); 103 static RSAlphaType AlphaTypeToRSAlphaType(const RefPtr<PixelMap>& pixmap); 104 static RSColorType PixelFormatToRSColorType(const RefPtr<PixelMap>& pixmap); 105 106 private: 107 void ClipRRect(RSCanvas& canvas, const RSRect& dstRect, const BorderRadiusArray& radiusXY); 108 bool DrawWithRecordingCanvas(RSCanvas& canvas, const BorderRadiusArray& radiusXY); 109 110 uint32_t uniqueId_ = 0; 111 std::shared_ptr<RSImage> image_; 112 std::shared_ptr<RSData> compressData_; 113 int32_t compressWidth_ = 0; 114 int32_t compressHeight_ = 0; 115 }; 116 } // namespace OHOS::Ace::NG 117 118 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_RENDER_ADAPTER_ROSEN_DRAWING_IMAGE_H 119