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 #include "core/components/image/image_component.h" 17 18 #include "core/components/common/properties/decoration.h" 19 #include "core/components/image/image_element.h" 20 #include "core/components/image/render_image.h" 21 22 namespace OHOS::Ace { 23 ImageComponent(const std::string & src)24ImageComponent::ImageComponent(const std::string& src) : src_(src) {} 25 CreateRenderNode()26RefPtr<RenderNode> ImageComponent::CreateRenderNode() 27 { 28 return RenderImage::Create(); 29 } 30 CreateElement()31RefPtr<Element> ImageComponent::CreateElement() 32 { 33 return AceType::MakeRefPtr<ImageElement>(); 34 } 35 SetSrc(const std::string & src)36void ImageComponent::SetSrc(const std::string& src) 37 { 38 src_ = src; 39 } 40 SetImageFill(const std::optional<Color> & color)41void ImageComponent::SetImageFill(const std::optional<Color>& color) 42 { 43 fillColor_ = color; 44 } 45 SetAlignment(const Alignment & alignment)46void ImageComponent::SetAlignment(const Alignment& alignment) 47 { 48 alignment_ = alignment; 49 } 50 GetAlignment() const51const Alignment& ImageComponent::GetAlignment() const 52 { 53 return alignment_; 54 } 55 GetBorder() const56const Border& ImageComponent::GetBorder() const 57 { 58 return border_; 59 } 60 GetSrc() const61const std::string& ImageComponent::GetSrc() const 62 { 63 return src_; 64 } 65 SetAlt(const std::string & alt)66void ImageComponent::SetAlt(const std::string& alt) 67 { 68 alt_ = alt; 69 } 70 GetAlt() const71const std::string& ImageComponent::GetAlt() const 72 { 73 return alt_; 74 } 75 SetColor(const std::optional<Color> & color)76void ImageComponent::SetColor(const std::optional<Color>& color) 77 { 78 color_ = color; 79 } 80 IsMatchTextDirection() const81bool ImageComponent::IsMatchTextDirection() const 82 { 83 return matchTextDirection_; 84 } 85 IsSrcSvgImage() const86bool ImageComponent::IsSrcSvgImage() const 87 { 88 return IsSvgSuffix(src_); 89 } 90 GetColor() const91const std::optional<Color>& ImageComponent::GetColor() const 92 { 93 return color_; 94 } 95 SetLoadSuccessEvent(const EventMarker & loadSuccessEvent)96void ImageComponent::SetLoadSuccessEvent(const EventMarker& loadSuccessEvent) 97 { 98 loadSuccessEvent_ = loadSuccessEvent; 99 } 100 GetLoadSuccessEvent() const101const EventMarker& ImageComponent::GetLoadSuccessEvent() const 102 { 103 return loadSuccessEvent_; 104 } 105 SetLoadFailEvent(const EventMarker & loadFailEvent)106void ImageComponent::SetLoadFailEvent(const EventMarker& loadFailEvent) 107 { 108 loadFailEvent_ = loadFailEvent; 109 } 110 GetLoadFailEvent() const111const EventMarker& ImageComponent::GetLoadFailEvent() const 112 { 113 return loadFailEvent_; 114 } 115 SetSvgAnimatorFinishEvent(const EventMarker & svgAnimatorFinishEvent)116void ImageComponent::SetSvgAnimatorFinishEvent(const EventMarker& svgAnimatorFinishEvent) 117 { 118 svgAnimatorFinishEvent_ = svgAnimatorFinishEvent; 119 } 120 GetSvgAnimatorFinishEvent() const121const EventMarker& ImageComponent::GetSvgAnimatorFinishEvent() const 122 { 123 return svgAnimatorFinishEvent_; 124 } 125 GetResourceId() const126InternalResource::ResourceId ImageComponent::GetResourceId() const 127 { 128 return resourceId_; 129 } 130 SetResourceId(InternalResource::ResourceId resourceId)131void ImageComponent::SetResourceId(InternalResource::ResourceId resourceId) 132 { 133 resourceId_ = resourceId; 134 } 135 SetBorder(const Border & border)136void ImageComponent::SetBorder(const Border& border) 137 { 138 border_ = border; 139 } 140 SetMatchTextDirection(bool matchTextDirection)141void ImageComponent::SetMatchTextDirection(bool matchTextDirection) 142 { 143 matchTextDirection_ = matchTextDirection; 144 } 145 SetFitMaxSize(bool fitMaxSize)146void ImageComponent::SetFitMaxSize(bool fitMaxSize) 147 { 148 fitMaxSize_ = fitMaxSize; 149 } 150 SetImageFit(ImageFit imageFit)151void ImageComponent::SetImageFit(ImageFit imageFit) 152 { 153 imageFit_ = imageFit; 154 } 155 SetImageInterpolation(ImageInterpolation imageInterpolation)156void ImageComponent::SetImageInterpolation(ImageInterpolation imageInterpolation) 157 { 158 imageInterpolation_ = imageInterpolation; 159 } 160 SetImageRenderMode(ImageRenderMode imageRenderMode)161void ImageComponent::SetImageRenderMode(ImageRenderMode imageRenderMode) 162 { 163 imageRenderMode_ = imageRenderMode; 164 } 165 SetImageRepeat(ImageRepeat imageRepeat)166void ImageComponent::SetImageRepeat(ImageRepeat imageRepeat) 167 { 168 imageRepeat_ = imageRepeat; 169 } 170 SetImageSourceSize(const std::pair<Dimension,Dimension> & sourceSize)171void ImageComponent::SetImageSourceSize(const std::pair<Dimension, Dimension>& sourceSize) 172 { 173 imageSourceSize_ = sourceSize; 174 } 175 SetUseSkiaSvg(bool useSkiaSvg)176void ImageComponent::SetUseSkiaSvg(bool useSkiaSvg) 177 { 178 useSkiaSvg_ = useSkiaSvg; 179 } 180 SetAutoResize(bool autoResize)181void ImageComponent::SetAutoResize(bool autoResize) 182 { 183 autoResize_ = autoResize; 184 } 185 SetSyncMode(bool syncMode)186void ImageComponent::SetSyncMode(bool syncMode) 187 { 188 syncMode_ = syncMode; 189 } 190 GetSyncMode()191bool ImageComponent::GetSyncMode() 192 { 193 return syncMode_; 194 } 195 MakeFromOtherWithoutSourceAndEvent(const RefPtr<ImageComponent> & other)196RefPtr<ImageComponent> ImageComponent::MakeFromOtherWithoutSourceAndEvent(const RefPtr<ImageComponent>& other) 197 { 198 RefPtr<ImageComponent> imageComponent = AceType::MakeRefPtr<ImageComponent>(""); 199 imageComponent->SetAlignment(other->GetAlignment()); 200 imageComponent->SetImageFill(other->GetImageFill()); 201 imageComponent->SetColor(other->GetColor()); 202 imageComponent->SetBorder(other->GetBorder()); 203 imageComponent->SetFitMaxSize(other->GetFitMaxSize()); 204 imageComponent->SetMatchTextDirection(other->IsMatchTextDirection()); 205 imageComponent->SetImageFit(other->GetImageFit()); 206 imageComponent->SetImageInterpolation(other->GetImageInterpolation()); 207 imageComponent->SetImageRenderMode(other->GetImageRenderMode()); 208 imageComponent->SetImageRepeat(other->GetImageRepeat()); 209 imageComponent->SetImageSourceSize(other->GetImageSourceSize()); 210 imageComponent->SetUseSkiaSvg(other->GetUseSkiaSvg()); 211 imageComponent->SetAutoResize(other->GetAutoResize()); 212 return imageComponent; 213 } 214 GetImageFill() const215const std::optional<Color>& ImageComponent::GetImageFill() const 216 { 217 return fillColor_; 218 } 219 GetFitMaxSize() const220bool ImageComponent::GetFitMaxSize() const 221 { 222 return fitMaxSize_; 223 } 224 GetImageFit() const225ImageFit ImageComponent::GetImageFit() const 226 { 227 return imageFit_; 228 } 229 GetImageInterpolation() const230ImageInterpolation ImageComponent::GetImageInterpolation() const 231 { 232 return imageInterpolation_; 233 } 234 GetImageRenderMode() const235ImageRenderMode ImageComponent::GetImageRenderMode() const 236 { 237 return imageRenderMode_; 238 } 239 GetImageRepeat() const240ImageRepeat ImageComponent::GetImageRepeat() const 241 { 242 return imageRepeat_; 243 } 244 GetImageSourceSize() const245const std::pair<Dimension, Dimension>& ImageComponent::GetImageSourceSize() const 246 { 247 return imageSourceSize_; 248 } 249 GetUseSkiaSvg() const250bool ImageComponent::GetUseSkiaSvg() const 251 { 252 return useSkiaSvg_; 253 } 254 GetAutoResize() const255bool ImageComponent::GetAutoResize() const 256 { 257 return autoResize_; 258 } 259 IsSvgSuffix(const std::string & src)260bool ImageComponent::IsSvgSuffix(const std::string& src) 261 { 262 // 4 is the length of ".svg". 263 return (src.size() > 4 && src.substr(src.size() - 4) == ".svg"); 264 } 265 SetPixmap(const RefPtr<PixelMap> & pixmap)266void ImageComponent::SetPixmap(const RefPtr<PixelMap>& pixmap) 267 { 268 pixmap_ = pixmap; 269 } 270 GetPixmap() const271const RefPtr<PixelMap>& ImageComponent::GetPixmap() const 272 { 273 return pixmap_; 274 } 275 SetHasObjectPosition(bool hasObjectPosition)276void ImageComponent::SetHasObjectPosition(bool hasObjectPosition) 277 { 278 hasObjectPosition_ = hasObjectPosition; 279 } 280 GetHasObjectPosition() const281bool ImageComponent::GetHasObjectPosition() const 282 { 283 return hasObjectPosition_; 284 } 285 SetImageObjectPosition(const ImageObjectPosition & imageObjectPosition)286void ImageComponent::SetImageObjectPosition(const ImageObjectPosition& imageObjectPosition) 287 { 288 imageObjectPosition_ = imageObjectPosition; 289 SetHasObjectPosition(true); 290 } 291 GetImageObjectPosition() const292const ImageObjectPosition& ImageComponent::GetImageObjectPosition() const 293 { 294 return imageObjectPosition_; 295 } 296 GetCopyOption() const297const CopyOptions& ImageComponent::GetCopyOption() const 298 { 299 return copyOption_; 300 } 301 SetCopyOption(const CopyOptions & copyOption)302void ImageComponent::SetCopyOption(const CopyOptions& copyOption) 303 { 304 copyOption_ = copyOption; 305 } 306 307 } // namespace OHOS::Ace 308