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