1 /* 2 * Copyright (c) 2021-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_PATTERN_IMAGE_IMAGE_MODEL_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_IMAGE_IMAGE_MODEL_H 18 19 #include <mutex> 20 21 #include "base/geometry/dimension.h" 22 #include "base/image/drawing_color_filter.h" 23 #include "base/image/drawing_lattice.h" 24 #include "base/image/pixel_map.h" 25 #include "base/memory/referenced.h" 26 #include "core/components/box/drag_drop_event.h" 27 #include "core/components/common/layout/constants.h" 28 #include "core/components/common/properties/border.h" 29 #include "core/components/common/properties/color.h" 30 #include "core/components/declaration/image/image_animator_declaration.h" 31 #include "core/components/image/image_event.h" 32 #include "core/components_ng/event/gesture_event_hub.h" 33 #include "interfaces/inner_api/ace/ai/image_analyzer.h" 34 35 namespace OHOS::Ace { 36 struct ACE_FORCE_EXPORT ImageInfoConfig { 37 std::shared_ptr<std::string> src; 38 std::string bundleName; 39 std::string moduleName; 40 bool isUriPureNumber = false; 41 bool isImageSpan = false; 42 ImageInfoConfigImageInfoConfig43 ImageInfoConfig() {} 44 ImageInfoConfigImageInfoConfig45 ImageInfoConfig( 46 const std::shared_ptr<std::string>& src_, const std::string& bundleName_, const std::string& moduleName_) 47 : src(src_), bundleName(bundleName_), moduleName(moduleName_) 48 {} 49 ImageInfoConfigImageInfoConfig50 ImageInfoConfig(const std::shared_ptr<std::string>& src_, const std::string& bundleName_, 51 const std::string& moduleName_, bool isUriPureNumber_, bool isImageSpan_) 52 : src(src_), bundleName(bundleName_), moduleName(moduleName_), isUriPureNumber(isUriPureNumber_), 53 isImageSpan(isImageSpan_) 54 {} 55 }; 56 class ACE_FORCE_EXPORT ImageModel { 57 public: 58 static ImageModel *GetInstance(); 59 virtual ~ImageModel() = default; 60 61 virtual void SetAlt(const ImageSourceInfo &src) = 0; 62 virtual void SetBlur(double blur) = 0; 63 virtual void SetBorder(const Border &border) = 0; 64 virtual void SetBorderRadius(const Dimension& value) = 0; 65 virtual void SetBorderRadius(const std::optional<Dimension>& radiusTopLeft, 66 const std::optional<Dimension>& radiusTopRight, const std::optional<Dimension>& radiusBottomLeft, 67 const std::optional<Dimension>& radiusBottomRight) = 0; 68 virtual void SetBorderRadius(const NG::BorderRadiusProperty& borderRadius) = 0; 69 virtual void SetBackBorder() = 0; 70 virtual void SetImageFit(ImageFit value) = 0; 71 virtual void SetMatchTextDirection(bool value) = 0; 72 virtual void SetFitOriginSize(bool value) = 0; 73 virtual void SetOnComplete(std::function<void(const LoadImageSuccessEvent &info)> &&callback) = 0; 74 virtual void SetOnError(std::function<void(const LoadImageFailEvent &info)> &&callback) = 0; 75 virtual void SetSvgAnimatorFinishEvent(std::function<void()> &&callback) = 0; 76 virtual void Create(const ImageInfoConfig& imageInfoConfig, RefPtr<PixelMap>& pixMap) = 0; 77 virtual void ResetImage() = 0; 78 virtual void CreateAnimation(const std::vector<ImageProperties>& imageList, 79 int32_t duration, int32_t iteration) = 0; 80 virtual void SetImageSourceSize(const std::pair<Dimension, Dimension> &size) = 0; 81 virtual void SetImageFill(const Color &color) = 0; 82 virtual void SetImageInterpolation(ImageInterpolation interpolation) = 0; 83 virtual void SetImageRepeat(ImageRepeat imageRepeat) = 0; 84 virtual void SetImageRenderMode(ImageRenderMode imageRenderMode) = 0; 85 virtual bool IsSrcSvgImage() = 0; 86 virtual void SetAutoResize(bool autoResize) = 0; 87 virtual void SetResizableSlice(const ImageResizableSlice& slice) = 0; 88 virtual void SetResizableLattice(const RefPtr<DrawingLattice>& lattice) = 0; 89 virtual void ResetResizableLattice() = 0; 90 virtual void SetSyncMode(bool syncMode) = 0; 91 virtual void SetColorFilterMatrix(const std::vector<float>& matrix) = 0; 92 virtual void SetDrawingColorFilter(RefPtr<DrawingColorFilter> &colorFilter) = 0; 93 virtual void SetDraggable(bool draggable) = 0; 94 virtual void SetOnDragStart(NG::OnDragStartFunc &&onDragStart) = 0; 95 virtual void SetOnDragEnter(NG::OnDragDropFunc &&onDragEnter) = 0; 96 virtual void SetOnDragLeave(NG::OnDragDropFunc &&onDragLeave) = 0; 97 virtual void SetOnDragMove(NG::OnDragDropFunc &&onDragMove) = 0; 98 virtual void SetOnDrop(NG::OnDragDropFunc &&onDrop) = 0; 99 virtual void SetCopyOption(const CopyOptions ©Option) = 0; 100 virtual bool UpdateDragItemInfo(DragItemInfo &itemInfo) = 0; 101 virtual void EnableAnalyzer(bool isEnableAnalyzer) = 0; 102 virtual void SetImageAnalyzerConfig(const ImageAnalyzerConfig& config) = 0; 103 virtual void SetImageAnalyzerConfig(void* config) = 0; 104 virtual void SetImageAIOptions(void* options) = 0; 105 virtual void SetSmoothEdge(float value) = 0; 106 virtual void SetDynamicRangeMode(DynamicRangeMode dynamicRangeMode) = 0; 107 virtual void SetEnhancedImageQuality(AIImageQuality imageQuality) = 0; 108 virtual void SetOrientation(ImageRotateOrientation orientation) = 0; 109 virtual bool GetIsAnimation() = 0; 110 private: 111 static std::unique_ptr<ImageModel> instance_; 112 static std::mutex mutex_; 113 }; 114 } // namespace OHOS::Ace 115 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_IMAGE_IMAGE_MODEL_H 116