From c818c6ac97e1437e35f2e90c1517098aa5f17e0e Mon Sep 17 00:00:00 2001 From: taoye Date: Fri, 17 Jan 2025 09:34:21 +0800 Subject: [PATCH] add lineargradientblur Signed-off-by: taoye --- .../cj_ffi/cj_view_abstract_ffi.cpp | 28 +++++++++++++++++++ .../interfaces/cj_ffi/cj_view_abstract_ffi.h | 3 ++ 2 files changed, 31 insertions(+) diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.cpp index d6b17706d8b..eb39606cb77 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.cpp @@ -853,6 +853,34 @@ void FfiOHOSAceFrameworkViewAbstractSetColorBlend(uint32_t color) ViewAbstractModel::GetInstance()->SetColorBlend(Color(color)); } +void FfiOHOSAceFrameworkViewAbstractSetLinearGradientBlur(double radius, int32_t direction, + VectorFloat64Ptr blurVec, VectorFloat64Ptr positionVec) +{ + double blurRadius = radius; + std::vector> fractionStops; + const auto& blurVector = *reinterpret_cast*>(blurVec); + const auto& positionVector = *reinterpret_cast*>(positionVec); + if (blurVector.size() <= 1) { + return; + } + float tmpPos = -1.0f; + for (size_t i = 0; i fractionStop; + fractionStop.first = static_cast(std::clamp(blurVector[i], 0.0, 1.0)); + fractionStop.second = static_cast(std::clamp(positionVector[i], 0.0, 1.0)); + if (fractionStop.second <= tmpPos) { + fractionStops.clear(); + return; + } + tmpPos = fractionStop.second; + fractionStops.push_back(fractionStop); + } + // Parse direction + CalcDimension dimensionRadius(static_cast(blurRadius), DimensionUnit::PX); + NG::LinearGradientBlurPara blurPara(dimensionRadius, fractionStops, static_cast(direction)); + ViewAbstractModel::GetInstance()->SetLinearGradientBlur(blurPara); +} + void FfiOHOSAceFrameworkViewAbstractSetBackdropBlur(double value) { Dimension radius(value, DimensionUnit::PX); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h index d87669a6de3..6d75ca559ac 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h @@ -29,6 +29,7 @@ using VectorMenuValuePtr = void*; using VectorStringPtr = void*; using VectorNativeRectangleHandle = void*; +using VectorFloat64Ptr = void*; namespace OHOS::Ace::Framework { @@ -365,6 +366,8 @@ CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetSharedTransition(char* shareId, CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetGeometryTransition(char* id, CJGeometryTransitionOptions option); CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetBlur(double value); CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetColorBlend(uint32_t color); +CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetLinearGradientBlur(double radius, int32_t direction, + VectorFloat64Ptr blurVec, VectorFloat64Ptr positionVec); CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetBackdropBlur(double value); CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetWindowBlur(float progress, int32_t styleValue); CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetShadow(double radius, uint32_t color, double offsetX, double offsetY); -- Gitee