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 #ifndef USE_ROSEN_DRAWING 179 useSkiaSvg_ = useSkiaSvg; 180 #else 181 useSkiaSvg_ = false; 182 #endif 183 } 184 SetAutoResize(bool autoResize)185void ImageComponent::SetAutoResize(bool autoResize) 186 { 187 autoResize_ = autoResize; 188 } 189 SetSyncMode(bool syncMode)190void ImageComponent::SetSyncMode(bool syncMode) 191 { 192 syncMode_ = syncMode; 193 } 194 GetSyncMode()195bool ImageComponent::GetSyncMode() 196 { 197 return syncMode_; 198 } 199 MakeFromOtherWithoutSourceAndEvent(const RefPtr<ImageComponent> & other)200RefPtr<ImageComponent> ImageComponent::MakeFromOtherWithoutSourceAndEvent(const RefPtr<ImageComponent>& other) 201 { 202 RefPtr<ImageComponent> imageComponent = AceType::MakeRefPtr<ImageComponent>(""); 203 imageComponent->SetAlignment(other->GetAlignment()); 204 imageComponent->SetImageFill(other->GetImageFill()); 205 imageComponent->SetColor(other->GetColor()); 206 imageComponent->SetBorder(other->GetBorder()); 207 imageComponent->SetFitMaxSize(other->GetFitMaxSize()); 208 imageComponent->SetMatchTextDirection(other->IsMatchTextDirection()); 209 imageComponent->SetImageFit(other->GetImageFit()); 210 imageComponent->SetImageInterpolation(other->GetImageInterpolation()); 211 imageComponent->SetImageRenderMode(other->GetImageRenderMode()); 212 imageComponent->SetImageRepeat(other->GetImageRepeat()); 213 imageComponent->SetImageSourceSize(other->GetImageSourceSize()); 214 imageComponent->SetUseSkiaSvg(other->GetUseSkiaSvg()); 215 imageComponent->SetAutoResize(other->GetAutoResize()); 216 return imageComponent; 217 } 218 GetImageFill() const219const std::optional<Color>& ImageComponent::GetImageFill() const 220 { 221 return fillColor_; 222 } 223 GetFitMaxSize() const224bool ImageComponent::GetFitMaxSize() const 225 { 226 return fitMaxSize_; 227 } 228 GetImageFit() const229ImageFit ImageComponent::GetImageFit() const 230 { 231 return imageFit_; 232 } 233 GetImageInterpolation() const234ImageInterpolation ImageComponent::GetImageInterpolation() const 235 { 236 return imageInterpolation_; 237 } 238 GetImageRenderMode() const239ImageRenderMode ImageComponent::GetImageRenderMode() const 240 { 241 return imageRenderMode_; 242 } 243 GetImageRepeat() const244ImageRepeat ImageComponent::GetImageRepeat() const 245 { 246 return imageRepeat_; 247 } 248 GetImageSourceSize() const249const std::pair<Dimension, Dimension>& ImageComponent::GetImageSourceSize() const 250 { 251 return imageSourceSize_; 252 } 253 GetUseSkiaSvg() const254bool ImageComponent::GetUseSkiaSvg() const 255 { 256 return useSkiaSvg_; 257 } 258 GetAutoResize() const259bool ImageComponent::GetAutoResize() const 260 { 261 return autoResize_; 262 } 263 IsSvgSuffix(const std::string & src)264bool ImageComponent::IsSvgSuffix(const std::string& src) 265 { 266 // 4 is the length of ".svg". 267 return (src.size() > 4 && src.substr(src.size() - 4) == ".svg"); 268 } 269 SetPixmap(const RefPtr<PixelMap> & pixmap)270void ImageComponent::SetPixmap(const RefPtr<PixelMap>& pixmap) 271 { 272 pixmap_ = pixmap; 273 } 274 GetPixmap() const275const RefPtr<PixelMap>& ImageComponent::GetPixmap() const 276 { 277 return pixmap_; 278 } 279 SetHasObjectPosition(bool hasObjectPosition)280void ImageComponent::SetHasObjectPosition(bool hasObjectPosition) 281 { 282 hasObjectPosition_ = hasObjectPosition; 283 } 284 GetHasObjectPosition() const285bool ImageComponent::GetHasObjectPosition() const 286 { 287 return hasObjectPosition_; 288 } 289 SetImageObjectPosition(const ImageObjectPosition & imageObjectPosition)290void ImageComponent::SetImageObjectPosition(const ImageObjectPosition& imageObjectPosition) 291 { 292 imageObjectPosition_ = imageObjectPosition; 293 SetHasObjectPosition(true); 294 } 295 GetImageObjectPosition() const296const ImageObjectPosition& ImageComponent::GetImageObjectPosition() const 297 { 298 return imageObjectPosition_; 299 } 300 GetCopyOption() const301const CopyOptions& ImageComponent::GetCopyOption() const 302 { 303 return copyOption_; 304 } 305 SetCopyOption(const CopyOptions & copyOption)306void ImageComponent::SetCopyOption(const CopyOptions& copyOption) 307 { 308 copyOption_ = copyOption; 309 } 310 311 } // namespace OHOS::Ace 312