1 /* 2 * Copyright (c) 2022-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_RENDER_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_IMAGE_IMAGE_RENDER_PROPERTY_H 18 19 #include "core/components/common/layout/constants.h" 20 #include "core/components_ng/render/paint_property.h" 21 #include "core/image/image_source_info.h" 22 23 namespace OHOS::Ace::NG { 24 25 struct ImagePaintStyle { 26 ACE_DEFINE_PROPERTY_GROUP_ITEM(ImageResizableSlice, ImageResizableSlice); 27 ACE_DEFINE_PROPERTY_GROUP_ITEM(ImageRenderMode, ImageRenderMode); 28 ACE_DEFINE_PROPERTY_GROUP_ITEM(ImageInterpolation, ImageInterpolation); 29 ACE_DEFINE_PROPERTY_GROUP_ITEM(ImageRepeat, ImageRepeat); 30 ACE_DEFINE_PROPERTY_GROUP_ITEM(ColorFilter, std::vector<float>); 31 ACE_DEFINE_PROPERTY_GROUP_ITEM(MatchTextDirection, bool); 32 ACE_DEFINE_PROPERTY_GROUP_ITEM(SvgFillColor, Color); 33 ACE_DEFINE_PROPERTY_GROUP_ITEM(SmoothEdge, float); ToJsonValueImagePaintStyle34 void ToJsonValue(std::unique_ptr<JsonValue>& json) const 35 { 36 static const char* OBJECTREPEATVALUE[] = { "ImageRepeat.NoRepeat", "ImageRepeat.X", "ImageRepeat.Y", 37 "ImageRepeat.XY" }; 38 static const char* INTERPOLATIONVALUE[] = { "ImageInterpolation.None", "ImageInterpolation.Low", 39 "ImageInterpolation.Medium", "ImageInterpolation.High" }; 40 static const char* RENDERMODEVALUE[] = { "ImageRenderMode.Original", "ImageRenderMode.Template" }; 41 json->Put( 42 "objectRepeat", OBJECTREPEATVALUE[static_cast<int32_t>(propImageRepeat.value_or(ImageRepeat::NO_REPEAT))]); 43 json->Put("interpolation", 44 INTERPOLATIONVALUE[static_cast<int32_t>(propImageInterpolation.value_or(ImageInterpolation::NONE))]); 45 json->Put("renderMode", 46 RENDERMODEVALUE[static_cast<int32_t>(propImageRenderMode.value_or(ImageRenderMode::ORIGINAL))]); 47 json->Put("matchTextDirection", propMatchTextDirection.value_or(false) ? "true" : "false"); 48 json->Put("fillColor", propSvgFillColor.value_or(Color::BLACK).ColorToString().c_str()); 49 std::string colorFilter; 50 for (auto& num : propColorFilter.value_or(std::vector<float>())) { 51 colorFilter += std::to_string(num) + " "; 52 } 53 json->Put("colorFilter", colorFilter.c_str()); 54 } 55 }; 56 57 // PaintProperty are used to set render properties. 58 class ImageRenderProperty : public PaintProperty { 59 DECLARE_ACE_TYPE(ImageRenderProperty, PaintProperty) 60 61 public: 62 ImageRenderProperty() = default; 63 ~ImageRenderProperty() override = default; 64 Clone()65 RefPtr<PaintProperty> Clone() const override 66 { 67 auto renderProperty = MakeRefPtr<ImageRenderProperty>(); 68 renderProperty->UpdatePaintProperty(this); 69 renderProperty->propImagePaintStyle_ = CloneImagePaintStyle(); 70 renderProperty->propNeedBorderRadius_ = CloneNeedBorderRadius(); 71 renderProperty->propImageFit_ = CloneImageFit(); 72 return renderProperty; 73 } 74 Reset()75 void Reset() override 76 { 77 ResetImagePaintStyle(); 78 ResetNeedBorderRadius(); 79 } 80 ToJsonValue(std::unique_ptr<JsonValue> & json)81 void ToJsonValue(std::unique_ptr<JsonValue>& json) const override 82 { 83 PaintProperty::ToJsonValue(json); 84 ACE_PROPERTY_TO_JSON_VALUE(propImagePaintStyle_, ImagePaintStyle); 85 } 86 87 ACE_DEFINE_PROPERTY_GROUP(ImagePaintStyle, ImagePaintStyle); 88 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImagePaintStyle, ImageRenderMode, ImageRenderMode, PROPERTY_UPDATE_RENDER); 89 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP( 90 ImagePaintStyle, ImageInterpolation, ImageInterpolation, PROPERTY_UPDATE_RENDER); 91 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImagePaintStyle, ImageRepeat, ImageRepeat, PROPERTY_UPDATE_RENDER); 92 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImagePaintStyle, ColorFilter, std::vector<float>, PROPERTY_UPDATE_RENDER); 93 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImagePaintStyle, MatchTextDirection, bool, PROPERTY_UPDATE_RENDER); 94 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImagePaintStyle, SvgFillColor, Color, PROPERTY_UPDATE_RENDER); 95 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ImagePaintStyle, SmoothEdge, float, PROPERTY_UPDATE_RENDER); 96 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP( 97 ImagePaintStyle, ImageResizableSlice, ImageResizableSlice, PROPERTY_UPDATE_RENDER); 98 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NeedBorderRadius, bool, PROPERTY_UPDATE_RENDER); 99 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ImageFit, ImageFit, PROPERTY_UPDATE_RENDER); 100 }; 101 102 } // namespace OHOS::Ace::NG 103 104 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_IMAGE_IMAGE_RENDER_PROPERTY_H 105