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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_COMPONENT_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_COMPONENT_H 18 19 #include <string> 20 21 #include "base/image/pixel_map.h" 22 #include "base/resource/internal_resource.h" 23 #include "base/utils/macros.h" 24 #include "base/utils/utils.h" 25 #include "core/components/common/layout/constants.h" 26 #include "core/components/common/properties/alignment.h" 27 #include "core/components/common/properties/border.h" 28 #include "core/components/common/properties/color.h" 29 #include "core/pipeline/base/component_group.h" 30 #include "core/pipeline/base/element.h" 31 #include "core/pipeline/base/measurable.h" 32 #include "core/pipeline/base/render_component.h" 33 #include "core/components/common/properties/decoration.h" 34 35 namespace OHOS::Ace { 36 // A component can show image. 37 class ACE_EXPORT ImageComponent : public RenderComponent, public Measurable { 38 DECLARE_ACE_TYPE(ImageComponent, RenderComponent, Measurable); 39 40 public: 41 explicit ImageComponent(const std::string& src = std::string()); ImageComponent(InternalResource::ResourceId resourceId)42 explicit ImageComponent(InternalResource::ResourceId resourceId) : resourceId_(resourceId) {} 43 ~ImageComponent() override = default; 44 45 RefPtr<RenderNode> CreateRenderNode() override; 46 RefPtr<Element> CreateElement() override; 47 void SetSrc(const std::string& src); 48 void SetAlt(const std::string& alt); 49 void SetAlignment(const Alignment& alignment); 50 void SetColor(const std::optional<Color>& color); 51 void SetLoadSuccessEvent(const EventMarker& loadSuccessEvent); 52 void SetLoadFailEvent(const EventMarker& loadFailEvent); 53 void SetSvgAnimatorFinishEvent(const EventMarker& svgAnimatorFinishEvent); 54 void SetResourceId(InternalResource::ResourceId resourceId); 55 void SetBorder(const Border& border); 56 void SetFitMaxSize(bool fitMaxSize); 57 void SetMatchTextDirection(bool matchTextDirection); 58 void SetImageFill(const std::optional<Color>& color); 59 void SetImageFit(ImageFit imageFit); 60 void SetImageInterpolation(ImageInterpolation imageInterpolation); 61 void SetImageRenderMode(ImageRenderMode imageRenderMode); 62 void SetImageRepeat(ImageRepeat imageRepeat); 63 void SetImageSourceSize(const std::pair<Dimension, Dimension>& sourceSize); 64 void SetUseSkiaSvg(bool useSkiaSvg); 65 void SetPixmap(const RefPtr<PixelMap>& pixmap); 66 void SetAutoResize(bool autoResize); 67 void SetSyncMode(bool syncMode); 68 bool GetSyncMode(); 69 70 const std::string& GetAlt() const; 71 const Alignment& GetAlignment() const; 72 const std::string& GetSrc() const; 73 const std::optional<Color>& GetColor() const; 74 const Border& GetBorder() const; 75 const EventMarker& GetLoadSuccessEvent() const; 76 const EventMarker& GetLoadFailEvent() const; 77 const EventMarker& GetSvgAnimatorFinishEvent() const; 78 InternalResource::ResourceId GetResourceId() const; 79 bool GetFitMaxSize() const; 80 bool IsMatchTextDirection() const; 81 bool IsSrcSvgImage() const; 82 ImageFit GetImageFit() const; 83 ImageInterpolation GetImageInterpolation() const; 84 ImageRenderMode GetImageRenderMode() const; 85 ImageRepeat GetImageRepeat() const; 86 const std::pair<Dimension, Dimension>& GetImageSourceSize() const; 87 bool GetUseSkiaSvg() const; 88 bool GetAutoResize() const; 89 static bool IsSvgSuffix(const std::string& src); 90 const RefPtr<PixelMap>& GetPixmap() const; 91 void SetHasObjectPosition(bool hasObjectPosition); 92 bool GetHasObjectPosition() const; 93 void SetImageObjectPosition(const ImageObjectPosition& imageObjectPosition); 94 const ImageObjectPosition& GetImageObjectPosition() const; 95 const std::optional<Color>& GetImageFill() const; 96 97 static RefPtr<ImageComponent> MakeFromOtherWithoutSourceAndEvent(const RefPtr<ImageComponent>& other); 98 99 private: 100 std::string src_; 101 std::string alt_; 102 Alignment alignment_ = Alignment::CENTER; 103 ImageObjectPosition imageObjectPosition_; 104 105 std::optional<Color> color_; 106 std::optional<Color> fillColor_; // used for paint svg path. 107 108 EventMarker loadSuccessEvent_; 109 EventMarker loadFailEvent_; 110 EventMarker svgAnimatorFinishEvent_; 111 InternalResource::ResourceId resourceId_ = InternalResource::ResourceId::NO_ID; 112 Border border_; 113 bool fitMaxSize_ = true; 114 bool hasObjectPosition_ = false; 115 bool matchTextDirection_ = false; 116 bool useSkiaSvg_ = true; 117 bool autoResize_ = true; 118 119 ImageFit imageFit_ = ImageFit::COVER; 120 // set default value to [ImageInterpolation::LOW] to keep consistent for the old frontend 121 ImageInterpolation imageInterpolation_ = ImageInterpolation::LOW; 122 ImageRenderMode imageRenderMode_ = ImageRenderMode::ORIGINAL; 123 ImageRepeat imageRepeat_ = ImageRepeat::NOREPEAT; 124 std::pair<Dimension, Dimension> imageSourceSize_ = std::pair<Dimension, Dimension>(Dimension(-1), Dimension(-1)); 125 RefPtr<PixelMap> pixmap_ = nullptr; 126 bool syncMode_ = false; 127 }; 128 129 } // namespace OHOS::Ace 130 131 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_COMPONENT_H 132