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