1 /* 2 * Copyright (c) 2022 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_LAYOUT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_IMAGE_IMAGE_LAYOUT_PROPERTY_H 18 19 #include "core/components_ng/layout/layout_property.h" 20 #include "core/components_ng/property/property.h" 21 #include "core/image/image_source_info.h" 22 23 namespace OHOS::Ace::NG { 24 class ImagePattern; 25 struct ImageSizeStyle { 26 ACE_DEFINE_PROPERTY_GROUP_ITEM(AutoResize, bool); 27 ACE_DEFINE_PROPERTY_GROUP_ITEM(SourceSize, SizeF); 28 ACE_DEFINE_PROPERTY_GROUP_ITEM(FitOriginalSize, bool); ToJsonValueImageSizeStyle29 void ToJsonValue(std::unique_ptr<JsonValue>& json) const 30 { 31 json->Put("sourceSize", propSourceSize.value_or(SizeF()).ToString().c_str()); 32 json->Put("fitOriginalSize", propFitOriginalSize.value_or(false) ? "true" : "false"); 33 json->Put("autoResize", propAutoResize.value_or(true) ? "true" : "false"); 34 } 35 }; 36 37 class ACE_EXPORT ImageLayoutProperty : public LayoutProperty { 38 DECLARE_ACE_TYPE(ImageLayoutProperty, LayoutProperty); 39 40 public: 41 ImageLayoutProperty() = default; 42 43 ~ImageLayoutProperty() override = default; 44 Clone()45 RefPtr<LayoutProperty> Clone() const override 46 { 47 auto value = MakeRefPtr<ImageLayoutProperty>(); 48 value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this)); 49 value->propImageSourceInfo_ = CloneImageSourceInfo(); 50 value->propAlt_ = CloneAlt(); 51 value->propImageFit_ = CloneImageFit(); 52 value->propSyncMode_ = CloneSyncMode(); 53 value->propCopyOptions_ = CloneCopyOptions(); 54 value->propImageSizeStyle_ = CloneImageSizeStyle(); 55 return value; 56 } 57 Reset()58 void Reset() override 59 { 60 LayoutProperty::Reset(); 61 ResetImageSourceInfo(); 62 ResetAlt(); 63 ResetImageFit(); 64 ResetSyncMode(); 65 ResetCopyOptions(); 66 ResetImageSizeStyle(); 67 } 68 ToJsonValue(std::unique_ptr<JsonValue> & json)69 void ToJsonValue(std::unique_ptr<JsonValue>& json) const override 70 { 71 LayoutProperty::ToJsonValue(json); 72 static const char* OBJECTFITVALUE[] = { "ImageFit.Fill", "ImageFit.Contain", "ImageFit.Cover", 73 "ImageFit.Auto", "ImageFit.FitHeight", "ImageFit.None", "ImageFit.ScaleDown" }; 74 static const char* COPYOPTIONSVALUE[] = { "CopyOptions.None", "CopyOptions.InApp", "CopyOptions.Local", 75 "CopyOptions.Distributed" }; 76 json->Put("alt", propAlt_.value_or(ImageSourceInfo("")).GetSrc().c_str()); 77 json->Put("objectFit", OBJECTFITVALUE[static_cast<int32_t>(propImageFit_.value_or(ImageFit::COVER))]); 78 json->Put("syncLoad", propSyncMode_.value_or(false) ? "true" : "false"); 79 json->Put("copyOption", COPYOPTIONSVALUE[static_cast<int32_t>(propCopyOptions_.value_or(CopyOptions::None))]); 80 std::string src; 81 if (propImageSourceInfo_.has_value()) { 82 src = propImageSourceInfo_->GetSrc(); 83 if (src.find("resources") != std::string::npos) { 84 auto num = src.find("resources"); 85 src = src.substr(num); 86 } 87 for (auto& character : src) { 88 character = tolower(character); 89 } 90 } 91 json->Put("src", src.c_str()); 92 ACE_PROPERTY_TO_JSON_VALUE(propImageSizeStyle_, ImageSizeStyle); 93 } 94 95 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ImageFit, ImageFit, PROPERTY_UPDATE_LAYOUT); 96 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ImageSourceInfo, ImageSourceInfo, PROPERTY_UPDATE_MEASURE); 97 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Alt, ImageSourceInfo, PROPERTY_UPDATE_LAYOUT); 98 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SyncMode, bool, PROPERTY_UPDATE_LAYOUT); 99 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CopyOptions, CopyOptions, PROPERTY_UPDATE_LAYOUT); 100 ACE_DEFINE_PROPERTY_GROUP(ImageSizeStyle, ImageSizeStyle); 101 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImageSizeStyle, AutoResize, bool, PROPERTY_UPDATE_LAYOUT); 102 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImageSizeStyle, SourceSize, SizeF, PROPERTY_UPDATE_LAYOUT); 103 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImageSizeStyle, FitOriginalSize, bool, PROPERTY_UPDATE_LAYOUT); 104 105 private: 106 ACE_DISALLOW_COPY_AND_MOVE(ImageLayoutProperty); 107 }; 108 } // namespace OHOS::Ace::NG 109 110 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_IMAGE_IMAGE_LAYOUT_PROPERTY_H 111