From 047291619312832ba8c5c7983979b1f7ccc8d94b Mon Sep 17 00:00:00 2001 From: zcdqs Date: Wed, 2 Nov 2022 15:33:36 +0800 Subject: [PATCH] xts ng Signed-off-by: zcdqs Change-Id: Ib05f904eb128238188c2bf0683685b6d975630f1 --- .../common/properties/decoration.cpp | 66 ++++++ .../components/common/properties/decoration.h | 4 + .../components_ng/layout/layout_property.cpp | 16 ++ .../property/gradient_property.cpp | 119 ++++++++++- .../property/gradient_property.h | 4 + .../components_ng/property/overlay_property.h | 6 +- frameworks/core/components_ng/render/BUILD.gn | 1 + .../render/adapter/rosen_render_context.cpp | 8 +- .../render/adapter/rosen_render_context.h | 2 +- .../components_ng/render/render_context.cpp | 20 ++ .../components_ng/render/render_context.h | 4 +- .../components_ng/render/render_property.cpp | 196 ++++++++++++++++++ .../components_ng/render/render_property.h | 9 +- .../inspector/inspector_composed_element.cpp | 57 +---- .../inspector/inspector_composed_element.h | 1 - .../components_v2/inspector/inspector_node.h | 1 - .../mock/mock_inspector_composed_element.cpp | 5 - 17 files changed, 444 insertions(+), 75 deletions(-) create mode 100644 frameworks/core/components_ng/render/render_property.cpp diff --git a/frameworks/core/components/common/properties/decoration.cpp b/frameworks/core/components/common/properties/decoration.cpp index 9400ed332ae..984c3426abf 100644 --- a/frameworks/core/components/common/properties/decoration.cpp +++ b/frameworks/core/components/common/properties/decoration.cpp @@ -190,6 +190,26 @@ bool BackgroundImageSize::operator!=(const BackgroundImageSize& size) const return !operator==(size); } +std::string BackgroundImageSize::ToString() const +{ + auto widthType = GetSizeTypeX(); + if (widthType == BackgroundImageSizeType::CONTAIN) { + return "ImageSize.Contain"; + } + if (widthType == BackgroundImageSizeType::COVER) { + return "ImageSize.Cover"; + } + if (widthType == BackgroundImageSizeType::AUTO) { + return "ImageSize.Auto"; + } + auto jsonValue = JsonUtil::Create(true); + Dimension width = Dimension((GetSizeValueX()), DimensionUnit::VP); + Dimension height = Dimension((GetSizeValueY()), DimensionUnit::VP); + jsonValue->Put("width", width.ToString().c_str()); + jsonValue->Put("height", height.ToString().c_str()); + return jsonValue->ToString(); +} + BackgroundImagePosition BackgroundImagePosition::operator+(const BackgroundImagePosition& rhs) const { auto rhsX = rhs.GetSizeValueX(); @@ -250,6 +270,52 @@ bool BackgroundImagePosition::operator!=(const BackgroundImagePosition& backgrou return !operator==(backgroundImagePosition); } +static std::string GetAlignmentType(double width, double height) +{ + const double halfDimension = 50.0; + auto jsonValue = JsonUtil::Create(true); + if (NearZero(width)) { + if (NearZero(height)) { + return "Alignment.TopStart"; + } + if (NearEqual(height, halfDimension)) { // Determine whether the vertical element is centered + return "Alignment.Start"; + } + return "Alignment.BottomStart"; + } else if (NearEqual(width, halfDimension)) { // Judge whether the horizontal element is centered + if (NearZero(height)) { + return "Alignment.Top"; + } + if (NearEqual(height, halfDimension)) { + return "Alignment.Center"; + } + return "Alignment.Bottom"; + } else { + if (NearZero(height)) { + return "Alignment.TopEnd"; + } + if (NearEqual(height, halfDimension)) { + return "Alignment.End"; + } + return "Alignment.BottomEnd"; + } +} + +std::string BackgroundImagePosition::ToString() const +{ + if (GetSizeTypeX() == BackgroundImagePositionType::PX) { + auto width = GetSizeValueX(); + auto height = GetSizeValueY(); + auto jsonValue = JsonUtil::Create(true); + jsonValue->Put("x", width); + jsonValue->Put("y", height); + return jsonValue->ToString(); + } + auto width = GetSizeValueX(); + auto height = GetSizeValueY(); + return GetAlignmentType(width, height); +} + CanvasPath2D::CanvasPath2D(const std::string& cmds) { PathArgs args; diff --git a/frameworks/core/components/common/properties/decoration.h b/frameworks/core/components/common/properties/decoration.h index 33e575e0975..6dae7585bf9 100644 --- a/frameworks/core/components/common/properties/decoration.h +++ b/frameworks/core/components/common/properties/decoration.h @@ -488,6 +488,8 @@ public: bool operator==(const BackgroundImageSize& size) const; bool operator!=(const BackgroundImageSize& size) const; + std::string ToString() const; + private: BackgroundImageSizeType typeX_ { BackgroundImageSizeType::AUTO }; double valueX_ = 0.0; @@ -595,6 +597,8 @@ public: bool operator!=(const BackgroundImagePosition& backgroundImagePosition) const; + std::string ToString() const; + private: BackgroundImagePositionType typeX_ { BackgroundImagePositionType::PX }; BackgroundImagePositionType typeY_ { BackgroundImagePositionType::PX }; diff --git a/frameworks/core/components_ng/layout/layout_property.cpp b/frameworks/core/components_ng/layout/layout_property.cpp index d5556c4da9c..cbd47574bfa 100644 --- a/frameworks/core/components_ng/layout/layout_property.cpp +++ b/frameworks/core/components_ng/layout/layout_property.cpp @@ -42,6 +42,21 @@ std::string VisibleTypeToString(VisibleType type) } return "Visibility.Visible"; } + +std::string TextDirectionToString(TextDirection type) +{ + static const LinearEnumMapNode toStringMap[] = { + { TextDirection::LTR, "Direction.Ltr" }, + { TextDirection::RTL, "Direction.Rtl" }, + { TextDirection::INHERIT, "Direction.Inherit" }, + { TextDirection::AUTO, "Direction.Auto" }, + }; + auto idx = BinarySearchFindIndex(toStringMap, ArraySize(toStringMap), type); + if (idx >= 0) { + return toStringMap[idx].value; + } + return "Direction.Auto"; +} } // namespace void LayoutProperty::Reset() @@ -67,6 +82,7 @@ void LayoutProperty::ToJsonValue(std::unique_ptr& json) const ACE_PROPERTY_TO_JSON_VALUE(borderWidth_, BorderWidthProperty); json->Put("visibility", VisibleTypeToString(propVisibility_.value_or(VisibleType::VISIBLE)).c_str()); + json->Put("direction", TextDirectionToString(GetLayoutDirection()).c_str()); } RefPtr LayoutProperty::Clone() const diff --git a/frameworks/core/components_ng/property/gradient_property.cpp b/frameworks/core/components_ng/property/gradient_property.cpp index 53be8725446..4d0a696e333 100644 --- a/frameworks/core/components_ng/property/gradient_property.cpp +++ b/frameworks/core/components_ng/property/gradient_property.cpp @@ -26,5 +26,122 @@ void Gradient::ClearColors() { colors_.clear(); } - + +static void GetColorsAndRepeating(std::unique_ptr& resultJson, const Gradient& gradient) +{ + auto jsonColorArray = JsonUtil::CreateArray(true); + auto colors = gradient.GetColors(); + for (size_t i = 0; i < colors.size(); ++i) { + auto temp = JsonUtil::CreateArray(true); + auto value = std::to_string(colors[i].GetDimension().Value() / 100.0); + auto color = colors[i].GetColor().ColorToString(); + temp->Put("0", color.c_str()); + temp->Put("1", value.c_str()); + auto index = std::to_string(i); + jsonColorArray->Put(index.c_str(), temp); + } + resultJson->Put("colors", jsonColorArray); + resultJson->Put("repeating", gradient.GetRepeat() ? "true" : "false"); +} + +std::unique_ptr Gradient::LinearGradientToJson() const +{ + auto resultJson = JsonUtil::Create(true); + if (GradientType::LINEAR != GetType()) { + return resultJson; + } + CHECK_NULL_RETURN(linearGradient_, resultJson); + if (linearGradient_->angle.has_value()) { + resultJson->Put("angle", linearGradient_->angle->ToString().c_str()); + } + + auto linearX = linearGradient_->linearX; + auto linearY = linearGradient_->linearY; + if (linearX == GradientDirection::LEFT) { + if (linearY == GradientDirection::TOP) { + resultJson->Put("direction", "GradientDirection.LeftTop"); + } else if (linearY == GradientDirection::BOTTOM) { + resultJson->Put("direction", "GradientDirection.LeftBottom"); + } else { + resultJson->Put("direction", "GradientDirection.Left"); + } + } else if (linearX == GradientDirection::RIGHT) { + if (linearY == GradientDirection::TOP) { + resultJson->Put("direction", "GradientDirection.RightTop"); + } else if (linearY == GradientDirection::BOTTOM) { + resultJson->Put("direction", "GradientDirection.RightBottom"); + } else { + resultJson->Put("direction", "GradientDirection.Right"); + } + } else { + if (linearY == GradientDirection::TOP) { + resultJson->Put("direction", "GradientDirection.Top"); + } else if (linearY == GradientDirection::BOTTOM) { + resultJson->Put("direction", "GradientDirection.Bottom"); + } else { + resultJson->Put("direction", "GradientDirection.None"); + } + } + GetColorsAndRepeating(resultJson, *this); + return resultJson; +} + +std::unique_ptr Gradient::SweepGradientToJson() const +{ + auto resultJson = JsonUtil::Create(true); + + if (GradientType::SWEEP != GetType()) { + return resultJson; + } + CHECK_NULL_RETURN(sweepGradient_, resultJson); + auto radialCenterX = sweepGradient_->centerX; + auto radialCenterY = sweepGradient_->centerY; + if (radialCenterX && radialCenterY) { + auto jsPoint = JsonUtil::CreateArray(true); + jsPoint->Put("0", radialCenterX->ToString().c_str()); + jsPoint->Put("1", radialCenterY->ToString().c_str()); + resultJson->Put("center", jsPoint); + } + + auto startAngle = sweepGradient_->startAngle; + auto endAngle = sweepGradient_->endAngle; + if (startAngle) { + resultJson->Put("start", startAngle->ToString().c_str()); + } + if (endAngle) { + resultJson->Put("end", endAngle->ToString().c_str()); + } + + GetColorsAndRepeating(resultJson, *this); + + return resultJson; +} + +std::unique_ptr Gradient::RadialGradientToJson() const +{ + auto resultJson = JsonUtil::Create(true); + if (GradientType::RADIAL != GetType()) { + return resultJson; + } + CHECK_NULL_RETURN(radialGradient_, resultJson); + + auto radialCenterX = radialGradient_->radialCenterX; + auto radialCenterY = radialGradient_->radialCenterY; + if (radialCenterX && radialCenterY) { + auto jsPoint = JsonUtil::CreateArray(true); + jsPoint->Put("0", radialCenterX->ToString().c_str()); + jsPoint->Put("1", radialCenterY->ToString().c_str()); + resultJson->Put("center", jsPoint); + } + + auto radius = radialGradient_->radialVerticalSize; + if (radius) { + resultJson->Put("radius", radius->ToString().c_str()); + } + + GetColorsAndRepeating(resultJson, *this); + + return resultJson; +} + } // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/components_ng/property/gradient_property.h b/frameworks/core/components_ng/property/gradient_property.h index 5a7737b70c6..a1ca83630b6 100644 --- a/frameworks/core/components_ng/property/gradient_property.h +++ b/frameworks/core/components_ng/property/gradient_property.h @@ -498,6 +498,10 @@ public: return !(*this == other); } + std::unique_ptr LinearGradientToJson() const; + std::unique_ptr SweepGradientToJson() const; + std::unique_ptr RadialGradientToJson() const; + private: GradientType type_ = GradientType::LINEAR; bool repeat_ = false; diff --git a/frameworks/core/components_ng/property/overlay_property.h b/frameworks/core/components_ng/property/overlay_property.h index 11ce611882f..8043dc6899d 100644 --- a/frameworks/core/components_ng/property/overlay_property.h +++ b/frameworks/core/components_ng/property/overlay_property.h @@ -41,7 +41,8 @@ struct OverlayOptions { void ToJsonValue(std::unique_ptr& json) const { - json->Put("title", content.c_str()); + auto jsonOverlay = JsonUtil::Create(true); + jsonOverlay->Put("title", content.c_str()); auto jsonOptions = JsonUtil::Create(true); // should get TextDirection jsonOptions->Put("align", align.GetAlignmentStr(TextDirection::LTR).c_str()); @@ -49,7 +50,8 @@ struct OverlayOptions { jsonOffset->Put("x", x.ToString().c_str()); jsonOffset->Put("y", y.ToString().c_str()); jsonOptions->Put("offset", jsonOffset); - json->Put("options", jsonOptions); + jsonOverlay->Put("options", jsonOptions); + json->Put("overlay", jsonOverlay); } }; diff --git a/frameworks/core/components_ng/render/BUILD.gn b/frameworks/core/components_ng/render/BUILD.gn index 4a4ef8dbe10..8c3d2fd8b30 100644 --- a/frameworks/core/components_ng/render/BUILD.gn +++ b/frameworks/core/components_ng/render/BUILD.gn @@ -40,6 +40,7 @@ build_component_ng("render_ng") { "rect_painter.cpp", "render_context.cpp", "render_context_creator.cpp", + "render_property.cpp", "render_surface_creator.cpp", "shape_painter.cpp", "sk_painter.cpp", diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index 02a8ea0fd72..e4912663985 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -1111,14 +1111,8 @@ void RosenRenderContext::UpdateBackBlurRadius(const Dimension& radius) RequestNextFrame(); } -void RosenRenderContext::UpdateFrontBlurRadius(const Dimension& radius) +void RosenRenderContext::OnFrontBlurRadiusUpdate(const Dimension& radius) { - auto& frontDecoration = GetOrCreateFrontDecoration(); - if (frontDecoration->CheckBlurRadius(radius)) { - return; - } - frontDecoration->UpdateBlurRadius(radius); - auto pipelineBase = PipelineBase::GetCurrentContext(); CHECK_NULL_VOID(pipelineBase); std::shared_ptr frontFilter = nullptr; diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.h b/frameworks/core/components_ng/render/adapter/rosen_render_context.h index 0590a0555c6..0db1b719b0a 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.h +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.h @@ -119,7 +119,6 @@ public: void AnimateHoverEffectScale(bool isHovered) override; void AnimateHoverEffectBoard(bool isHovered) override; void UpdateBackBlurRadius(const Dimension& radius) override; - void UpdateFrontBlurRadius(const Dimension& radius) override; void UpdateBackShadow(const Shadow& shadow) override; void UpdateBorderWidthF(const BorderWidthPropertyF& value) override; @@ -216,6 +215,7 @@ private: void OnFrontInvertUpdate(const Dimension& invert) override; void OnFrontHueRotateUpdate(float hueRotate) override; void OnFrontColorBlendUpdate(const Color& colorBlend) override; + void OnFrontBlurRadiusUpdate(const Dimension& radius) override; void OnOverlayTextUpdate(const OverlayOptions& overlay) override; void OnMotionPathUpdate(const MotionPathOption& motionPath) override; diff --git a/frameworks/core/components_ng/render/render_context.cpp b/frameworks/core/components_ng/render/render_context.cpp index 8648b3c485a..5e79f7deb17 100644 --- a/frameworks/core/components_ng/render/render_context.cpp +++ b/frameworks/core/components_ng/render/render_context.cpp @@ -45,7 +45,27 @@ void RenderContext::ToJsonValue(std::unique_ptr& json) const ACE_PROPERTY_TO_JSON_VALUE(propBorder_, BorderProperty); ACE_PROPERTY_TO_JSON_VALUE(propBackDecoration_, DecorationProperty); ACE_PROPERTY_TO_JSON_VALUE(propOverlay_, OverlayProperty); + ACE_PROPERTY_TO_JSON_VALUE(propPositionProperty_, RenderPositionProperty); + ACE_PROPERTY_TO_JSON_VALUE(propBackground_, BackgroundProperty); + ACE_PROPERTY_TO_JSON_VALUE(propGraphics_, GraphicsProperty); + ACE_PROPERTY_TO_JSON_VALUE(propGradient_, GradientProperty); + ACE_PROPERTY_TO_JSON_VALUE(propTransform_, TransformProperty); + ACE_PROPERTY_TO_JSON_VALUE(propClip_, ClipProperty); + if (propTransformMatrix_.has_value()) { + auto jsonValue = JsonUtil::Create(true); + jsonValue->Put("type", "matrix"); + auto matrixString = propTransformMatrix_->ToString(); + while (matrixString.find("\n") != std::string::npos) { + auto num = matrixString.find("\n"); + matrixString.replace(num, 1, ""); + } + jsonValue->Put("matrix", matrixString.c_str()); + json->Put("transform", jsonValue); + } else { + json->Put("transform", JsonUtil::Create(true)); + } json->Put("backgroundColor", propBackgroundColor_.value_or(Color::TRANSPARENT).ColorToString().c_str()); json->Put("zIndex", propZIndex_.value_or(0)); + json->Put("opacity", propOpacity_.value_or(1)); } } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/render/render_context.h b/frameworks/core/components_ng/render/render_context.h index d4f84f872cc..2401466895d 100644 --- a/frameworks/core/components_ng/render/render_context.h +++ b/frameworks/core/components_ng/render/render_context.h @@ -138,7 +138,6 @@ public: virtual void SetBounds(float positionX, float positionY, float width, float height) {} virtual void UpdateBackBlurRadius(const Dimension& radius) {} - virtual void UpdateFrontBlurRadius(const Dimension& radius) {} virtual void UpdateBackShadow(const Shadow& shadow) {} virtual void ClipWithRect(const RectF& rectF) {} @@ -228,7 +227,6 @@ public: // Decoration ACE_DEFINE_PROPERTY_GROUP(BackDecoration, DecorationProperty); - ACE_DEFINE_PROPERTY_GROUP(FrontDecoration, DecorationProperty); // Graphics ACE_DEFINE_PROPERTY_GROUP(Graphics, GraphicsProperty); @@ -240,6 +238,7 @@ public: ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(Graphics, FrontInvert, Dimension); ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(Graphics, FrontHueRotate, float); ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(Graphics, FrontColorBlend, Color); + ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(Graphics, FrontBlurRadius, Dimension); // BorderRadius. ACE_DEFINE_PROPERTY_GROUP(Border, BorderProperty); @@ -334,6 +333,7 @@ protected: virtual void OnFrontInvertUpdate(const Dimension& value) {} virtual void OnFrontHueRotateUpdate(float value) {} virtual void OnFrontColorBlendUpdate(const Color& value) {} + virtual void OnFrontBlurRadiusUpdate(const Dimension& value) {} virtual void OnOverlayTextUpdate(const OverlayOptions& overlay) {} virtual void OnMotionPathUpdate(const MotionPathOption& motionPath) {} diff --git a/frameworks/core/components_ng/render/render_property.cpp b/frameworks/core/components_ng/render/render_property.cpp new file mode 100644 index 00000000000..8b4608fda53 --- /dev/null +++ b/frameworks/core/components_ng/render/render_property.cpp @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components_ng/render/render_property.h" + +namespace OHOS::Ace::NG { +namespace { +std::string ImageRepeatToString(ImageRepeat type) +{ + static const LinearEnumMapNode toStringMap[] = { + { ImageRepeat::NOREPEAT, "ImageRepeat.NoRepeat" }, + { ImageRepeat::REPEATX, "ImageRepeat.X" }, + { ImageRepeat::REPEATY, "ImageRepeat.Y" }, + { ImageRepeat::REPEAT, "ImageRepeat.XY" }, + }; + auto idx = BinarySearchFindIndex(toStringMap, ArraySize(toStringMap), type); + if (idx >= 0) { + return toStringMap[idx].value; + } + return "ImageRepeat.NoRepeat"; +} + +std::string BasicShapeTypeToString(BasicShapeType type) +{ + static const LinearEnumMapNode toStringMap[] = { + { BasicShapeType::NONE, "None" }, + { BasicShapeType::INSET, "Inset" }, + { BasicShapeType::CIRCLE, "Circle" }, + { BasicShapeType::ELLIPSE, "Ellipse" }, + { BasicShapeType::POLYGON, "Polygon" }, + { BasicShapeType::PATH, "Path" }, + { BasicShapeType::RECT, "Rect" }, + }; + auto idx = BinarySearchFindIndex(toStringMap, ArraySize(toStringMap), type); + if (idx >= 0) { + return toStringMap[idx].value; + } + return ""; +} +} // namespace + +#define ACE_OFFSET_TO_JSON(name) \ + auto json##name = JsonUtil::Create(true); \ + if (prop##name.has_value()) { \ + json##name->Put("x", prop##name->GetX().ToString().c_str()); \ + json##name->Put("y", prop##name->GetY().ToString().c_str()); \ + } else { \ + json##name->Put("x", "0.0px"); \ + json##name->Put("y", "0.0px"); \ + } + +void RenderPositionProperty::ToJsonValue(std::unique_ptr& json) const +{ + ACE_OFFSET_TO_JSON(Position); + json->Put("position", jsonPosition); + + ACE_OFFSET_TO_JSON(Offset); + json->Put("offset", jsonOffset); + + ACE_OFFSET_TO_JSON(Anchor); + json->Put("markAnchor", jsonAnchor); +} + +void GraphicsProperty::ToJsonValue(std::unique_ptr& json) const +{ + json->Put("blur", propFrontBlurRadius.value_or(0.0_vp).Value()); + json->Put("grayscale", propFrontGrayScale.has_value() ? propFrontGrayScale->Value() : 0.0); + json->Put("brightness", propFrontBrightness.has_value() ? propFrontBrightness->Value() : 1.0); + json->Put("saturate", propFrontSaturate.has_value() ? propFrontSaturate->Value() : 1.0); + json->Put("contrast", propFrontContrast.has_value() ? propFrontContrast->Value() : 1.0); + json->Put("invert", propFrontInvert.has_value() ? propFrontInvert->Value() : 0.0); + json->Put("sepia", propFrontSepia.has_value() ? propFrontSepia->Value() : 0.0); + json->Put("hueRotate", propFrontHueRotate.has_value() ? propFrontHueRotate.value() : 0.0); + json->Put("colorBlend", propFrontColorBlend.has_value() ? propFrontColorBlend->ColorToString().c_str() : ""); +} + +void BackgroundProperty::ToJsonValue(std::unique_ptr& json) const +{ + std::string backgroundImage = "NONE"; + if (propBackgroundImage.has_value()) { + backgroundImage = propBackgroundImage->GetSrc() + ", " + + ImageRepeatToString(propBackgroundImageRepeat.value_or(ImageRepeat::NOREPEAT)); + } + json->Put("backgroundImage", backgroundImage.c_str()); + + json->Put("backgroundImageSize", + !propBackgroundImageSize.has_value() ? "ImageSize.Auto" : propBackgroundImageSize->ToString().c_str()); + + if (propBackgroundImagePosition.has_value()) { + json->Put("backgroundImagePosition", propBackgroundImagePosition->ToString().c_str()); + } else { + auto jsonValue = JsonUtil::Create(true); + jsonValue->Put("x", 0.0); + jsonValue->Put("y", 0.0); + json->Put("backgroundImagePosition", jsonValue); + } +} + +void ClipProperty::ToJsonValue(std::unique_ptr& json) const +{ + if (propClipShape.has_value()) { + auto jsonClip = JsonUtil::Create(true); + auto shape = propClipShape.value(); + auto shapeType = BasicShapeTypeToString(shape->GetBasicShapeType()); + if (!shapeType.empty()) { + jsonClip->Put("shape", shapeType.c_str()); + } + json->Put("clip", jsonClip); + } else { + json->Put("clip", propClipEdge.value_or(false) ? "true" : "false"); + } + + auto jsonMask = JsonUtil::Create(true); + if (propClipMask.has_value()) { + auto shape = propClipMask.value(); + auto shapeType = BasicShapeTypeToString(shape->GetBasicShapeType()); + if (!shapeType.empty()) { + jsonMask->Put("shape", shapeType.c_str()); + } + } + json->Put("mask", jsonMask); +} + +void GradientProperty::ToJsonValue(std::unique_ptr& json) const +{ + if (propLinearGradient.has_value()) { + json->Put("linearGradient", propLinearGradient->LinearGradientToJson()); + } else { + json->Put("linearGradient", JsonUtil::Create(true)); + } + + if (propSweepGradient.has_value()) { + json->Put("sweepGradient", propSweepGradient->SweepGradientToJson()); + } else { + json->Put("sweepGradient", JsonUtil::Create(true)); + } + + if (propRadialGradient.has_value()) { + json->Put("radialGradient", propRadialGradient->RadialGradientToJson()); + } else { + json->Put("radialGradient", JsonUtil::Create(true)); + } +} + +void TransformProperty::ToJsonValue(std::unique_ptr& json) const +{ + const double halfDimension = 50.0; + auto center = propTransformCenter.value_or(DimensionOffset( + Dimension(halfDimension, DimensionUnit::PERCENT), Dimension(halfDimension, DimensionUnit::PERCENT))); + if (propTransformRotate.has_value()) { + auto jsonValue = JsonUtil::Create(true); + jsonValue->Put("x", std::to_string(propTransformRotate->x).c_str()); + jsonValue->Put("y", std::to_string(propTransformRotate->y).c_str()); + jsonValue->Put("z", std::to_string(propTransformRotate->z).c_str()); + jsonValue->Put("angle", std::to_string(propTransformRotate->w).c_str()); + jsonValue->Put("centerX", center.GetX().ToString().c_str()); + jsonValue->Put("centerY", center.GetY().ToString().c_str()); + json->Put("rotate", jsonValue); + } else { + json->Put("rotate", JsonUtil::Create(true)); + } + + if (propTransformScale.has_value()) { + auto jsonValue = JsonUtil::Create(true); + jsonValue->Put("x", std::to_string(propTransformScale->x).c_str()); + jsonValue->Put("y", std::to_string(propTransformScale->y).c_str()); + jsonValue->Put("centerX", center.GetX().ToString().c_str()); + jsonValue->Put("centerY", center.GetY().ToString().c_str()); + json->Put("scale", jsonValue); + } else { + json->Put("scale", JsonUtil::Create(true)); + } + + if (propTransformTranslate.has_value()) { + auto jsonValue = JsonUtil::Create(true); + jsonValue->Put("x", std::to_string(propTransformTranslate->x).c_str()); + jsonValue->Put("y", std::to_string(propTransformTranslate->y).c_str()); + jsonValue->Put("z", std::to_string(propTransformTranslate->z).c_str()); + json->Put("translate", jsonValue); + } else { + json->Put("translate", JsonUtil::Create(true)); + } +} +} // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/render/render_property.h b/frameworks/core/components_ng/render/render_property.h index b6dbbbff326..16153cb7ff8 100644 --- a/frameworks/core/components_ng/render/render_property.h +++ b/frameworks/core/components_ng/render/render_property.h @@ -40,6 +40,7 @@ struct BackgroundProperty { ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImageSize, BackgroundImageSize); ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImagePosition, BackgroundImagePosition); ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundBlurStyle, BlurStyle); + void ToJsonValue(std::unique_ptr& json) const; }; struct BorderImageProperty { @@ -79,6 +80,7 @@ struct TransformProperty { ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformCenter, DimensionOffset); ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformTranslate, Vector3F); ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformRotate, Vector4F); + void ToJsonValue(std::unique_ptr& json) const; }; struct DecorationProperty { @@ -87,7 +89,7 @@ struct DecorationProperty { void ToJsonValue(std::unique_ptr& json) const { - json->Put("blur", propBlurRadius.value_or(0.0_vp).Value()); + json->Put("backdropBlur", propBlurRadius.value_or(0.0_vp).Value()); auto jsonShadow = JsonUtil::Create(true); auto shadow = propBackShadow.value_or(Shadow()); jsonShadow->Put("radius", std::to_string(shadow.GetBlurRadius()).c_str()); @@ -107,24 +109,29 @@ struct GraphicsProperty { ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontInvert, Dimension); ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontHueRotate, float); ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontColorBlend, Color); + ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontBlurRadius, Dimension); + void ToJsonValue(std::unique_ptr& json) const; }; struct RenderPositionProperty { ACE_DEFINE_PROPERTY_GROUP_ITEM(Position, OffsetT); ACE_DEFINE_PROPERTY_GROUP_ITEM(Offset, OffsetT); ACE_DEFINE_PROPERTY_GROUP_ITEM(Anchor, OffsetT); + void ToJsonValue(std::unique_ptr& json) const; }; struct ClipProperty { ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipShape, RefPtr); ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipEdge, bool); ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipMask, RefPtr); + void ToJsonValue(std::unique_ptr& json) const; }; struct GradientProperty { ACE_DEFINE_PROPERTY_GROUP_ITEM(LinearGradient, NG::Gradient); ACE_DEFINE_PROPERTY_GROUP_ITEM(SweepGradient, NG::Gradient); ACE_DEFINE_PROPERTY_GROUP_ITEM(RadialGradient, NG::Gradient); + void ToJsonValue(std::unique_ptr& json) const; }; struct OverlayProperty { diff --git a/frameworks/core/components_v2/inspector/inspector_composed_element.cpp b/frameworks/core/components_v2/inspector/inspector_composed_element.cpp index e013efce0f5..1f11d91d3e2 100644 --- a/frameworks/core/components_v2/inspector/inspector_composed_element.cpp +++ b/frameworks/core/components_v2/inspector/inspector_composed_element.cpp @@ -859,20 +859,8 @@ std::string InspectorComposedElement::GetBackgroundImageSize() const if (!image) { return "ImageSize.Auto"; } - auto widthType = image->GetImageSize().GetSizeTypeX(); - if (widthType == BackgroundImageSizeType::CONTAIN) { - return "ImageSize.Contain"; - } else if (widthType == BackgroundImageSizeType::COVER) { - return "ImageSize.Cover"; - } else if (widthType == BackgroundImageSizeType::AUTO) { - return "ImageSize.Auto"; - } - auto jsonValue = JsonUtil::Create(true); - Dimension width = Dimension((image->GetImageSize().GetSizeValueX()), DimensionUnit::VP); - Dimension height = Dimension((image->GetImageSize().GetSizeValueY()), DimensionUnit::VP); - jsonValue->Put("width", width.ToString().c_str()); - jsonValue->Put("height", height.ToString().c_str()); - return jsonValue->ToString(); + + return image->GetImageSize().ToString(); } std::string InspectorComposedElement::GetBackgroundImagePosition() const @@ -890,47 +878,8 @@ std::string InspectorComposedElement::GetBackgroundImagePosition() const jsonValue->Put("y", 0.0); return jsonValue->ToString(); } - if (image->GetImagePosition().GetSizeTypeX() == BackgroundImagePositionType::PX) { - auto width = image->GetImagePosition().GetSizeValueX(); - auto height = image->GetImagePosition().GetSizeValueY(); - jsonValue->Put("x", width); - jsonValue->Put("y", height); - return jsonValue->ToString(); - } else { - auto width = image->GetImagePosition().GetSizeValueX(); - auto height = image->GetImagePosition().GetSizeValueY(); - return GetAlignmentType(width, height); - } -} -std::string InspectorComposedElement::GetAlignmentType(double width, double height) const -{ - auto jsonValue = JsonUtil::Create(true); - if (NearZero(width)) { - if (NearZero(height)) { - return "Alignment.TopStart"; - } else if (NearEqual(height, 50.0)) { // Determine whether the vertical element is centered - return "Alignment.Start"; - } else { - return "Alignment.BottomStart"; - } - } else if (NearEqual(width, 50.0)) { // Judge whether the horizontal element is centered - if (NearZero(height)) { - return "Alignment.Top"; - } else if (NearEqual(height, 50)) { - return "Alignment.Center"; - } else { - return "Alignment.Bottom"; - } - } else { - if (NearZero(height)) { - return "Alignment.TopEnd"; - } else if (NearEqual(height, 50.0)) { - return "Alignment.End"; - } else { - return "Alignment.BottomEnd"; - } - } + return image->GetImagePosition().ToString(); } RefPtr InspectorComposedElement::GetFrontDecoration() const diff --git a/frameworks/core/components_v2/inspector/inspector_composed_element.h b/frameworks/core/components_v2/inspector/inspector_composed_element.h index fe97027ae9d..cfd7ff0486e 100644 --- a/frameworks/core/components_v2/inspector/inspector_composed_element.h +++ b/frameworks/core/components_v2/inspector/inspector_composed_element.h @@ -152,7 +152,6 @@ public: std::string GetBackgroundColor() const override; std::string GetBackgroundImageSize() const override; std::string GetBackgroundImagePosition() const override; - std::string GetAlignmentType(double width, double height) const override; // front decoration settings RefPtr GetFrontDecoration() const override; diff --git a/frameworks/core/components_v2/inspector/inspector_node.h b/frameworks/core/components_v2/inspector/inspector_node.h index ffe023a9c28..df793351deb 100644 --- a/frameworks/core/components_v2/inspector/inspector_node.h +++ b/frameworks/core/components_v2/inspector/inspector_node.h @@ -141,7 +141,6 @@ public: virtual std::string GetBackgroundColor() const = 0; virtual std::string GetBackgroundImageSize() const = 0; virtual std::string GetBackgroundImagePosition() const = 0; - virtual std::string GetAlignmentType(double width, double height) const = 0; // front decoration settings virtual RefPtr GetFrontDecoration() const = 0; diff --git a/frameworks/core/components_v2/test/mock/mock_inspector_composed_element.cpp b/frameworks/core/components_v2/test/mock/mock_inspector_composed_element.cpp index f27fec444c4..1564f66c8c3 100644 --- a/frameworks/core/components_v2/test/mock/mock_inspector_composed_element.cpp +++ b/frameworks/core/components_v2/test/mock/mock_inspector_composed_element.cpp @@ -255,11 +255,6 @@ std::string InspectorComposedElement::GetBackgroundImagePosition() const return std::string(); } -std::string InspectorComposedElement::GetAlignmentType(double width, double height) const -{ - return std::string(); -} - RefPtr InspectorComposedElement::GetFrontDecoration() const { return nullptr; -- Gitee