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