diff --git a/frameworks/core/components_ng/pattern/list/list_model_ng.cpp b/frameworks/core/components_ng/pattern/list/list_model_ng.cpp index 4cba8705b481618e396b01a78e8be3072130d93d..cf86a6d2b013573faa855c568f5ca8d7b562603b 100644 --- a/frameworks/core/components_ng/pattern/list/list_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/list/list_model_ng.cpp @@ -20,6 +20,7 @@ #include "base/utils/utils.h" #include "core/components_ng/base/frame_node.h" #include "core/components_ng/base/view_stack_processor.h" +#include "core/components_ng/pattern/list/list_layout_property.h" #include "core/components_ng/pattern/list/list_pattern.h" #include "core/components_ng/pattern/list/list_position_controller.h" #include "core/components_ng/pattern/scroll/inner/scroll_bar.h" @@ -210,8 +211,11 @@ void ListModelNG::SetMultiSelectable(bool selectable) int32_t ListModelNG::GetScrollEnabled(FrameNode* frameNode) { CHECK_NULL_RETURN(frameNode, 0); - int32_t value = 0; - ACE_GET_NODE_LAYOUT_PROPERTY(ListLayoutProperty, ScrollEnabled, value, frameNode); + int32_t value = true; + auto layoutProperty = frameNode->GetLayoutProperty(); + if (layoutProperty->GetScrollEnabled()) { + value = layoutProperty->GetScrollEnabledValue(); + } return value; } @@ -514,8 +518,8 @@ void ListModelNG::SetListScrollBar(FrameNode* frameNode, int32_t barState) float ListModelNG::GetScrollBarWidth(FrameNode* frameNode) { CHECK_NULL_RETURN(frameNode, 0.0f); - auto value = frameNode->GetPaintProperty()->GetScrollBarWidth(); - return value->ConvertToVp(); + auto value = frameNode->GetPaintProperty()->GetBarWidth(); + return value.ConvertToVp(); } void ListModelNG::SetListScrollBarWidth(FrameNode* frameNode, const std::string& value) @@ -526,8 +530,8 @@ void ListModelNG::SetListScrollBarWidth(FrameNode* frameNode, const std::string& uint32_t ListModelNG::GetScrollBarColor(FrameNode* frameNode) { CHECK_NULL_RETURN(frameNode, 0); - auto value = frameNode->GetPaintProperty()->GetScrollBarColor(); - return value->GetValue(); + auto value = frameNode->GetPaintProperty()->GetBarColor(); + return value.GetValue(); } void ListModelNG::SetListScrollBarColor(FrameNode* frameNode, const std::string& value) diff --git a/frameworks/core/components_ng/pattern/scroll/scroll_model_ng.cpp b/frameworks/core/components_ng/pattern/scroll/scroll_model_ng.cpp index 11d2f650dd4a95fa245a59c54adfa33730eeb2c4..95b22fb40dc2743d549c964a57771754b307ce0f 100644 --- a/frameworks/core/components_ng/pattern/scroll/scroll_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/scroll/scroll_model_ng.cpp @@ -131,7 +131,12 @@ RefPtr ScrollModelNG::CreateScrollBarProxy() int32_t ScrollModelNG::GetAxis(FrameNode *frameNode) { CHECK_NULL_RETURN(frameNode, 0); - return static_cast(frameNode->GetLayoutProperty()->GetAxisValue()); + int32_t value = 0; + auto layoutProperty = frameNode->GetLayoutProperty(); + if (layoutProperty->GetAxis()) { + value = static_cast(layoutProperty->GetAxisValue()); + } + return value; } void ScrollModelNG::SetAxis(Axis axis) @@ -321,6 +326,19 @@ void ScrollModelNG::SetFriction(FrameNode* frameNode, double friction) pattern->SetFriction(friction); } +ScrollSnapOptions ScrollModelNG::GetScrollSnap(FrameNode* frameNode) +{ + ScrollSnapOptions snapOptions; + CHECK_NULL_RETURN(frameNode, snapOptions); + auto pattern = frameNode->GetPattern(); + CHECK_NULL_RETURN(pattern, snapOptions); + snapOptions.enableSnapToStart = pattern->GetEnableSnapToSide().first; + snapOptions.enableSnapToEnd = pattern->GetEnableSnapToSide().second; + snapOptions.snapAlign = static_cast(pattern->GetScrollSnapAlign()); + snapOptions.paginationParams = pattern->GetSnapPaginations(); + return snapOptions; +} + void ScrollModelNG::SetScrollSnap(FrameNode* frameNode, ScrollSnapAlign scrollSnapAlign, const Dimension& intervalSize, const std::vector& snapPaginations, const std::pair& enableSnapToSide) { @@ -340,8 +358,11 @@ void ScrollModelNG::SetScrollSnap(FrameNode* frameNode, ScrollSnapAlign scrollSn int32_t ScrollModelNG::GetScrollEnabled(FrameNode* frameNode) { CHECK_NULL_RETURN(frameNode, 0); - int32_t value = 0; - ACE_GET_NODE_LAYOUT_PROPERTY(ScrollLayoutProperty, ScrollEnabled, value, frameNode); + int32_t value = true; + auto layoutProperty = frameNode->GetLayoutProperty(); + if (layoutProperty->GetScrollEnabled()) { + value = layoutProperty->GetScrollEnabledValue(); + } return value; } @@ -353,8 +374,8 @@ void ScrollModelNG::SetScrollEnabled(FrameNode* frameNode, bool scrollEnabled) float ScrollModelNG::GetScrollBarWidth(FrameNode* frameNode) { CHECK_NULL_RETURN(frameNode, 0.0f); - auto value = frameNode->GetPaintProperty()->GetScrollBarWidth(); - return value->ConvertToVp(); + auto value = frameNode->GetPaintProperty()->GetBarWidth(); + return value.ConvertToVp(); } void ScrollModelNG::SetScrollBarWidth(const Dimension& dimension) @@ -365,8 +386,8 @@ void ScrollModelNG::SetScrollBarWidth(const Dimension& dimension) uint32_t ScrollModelNG::GetScrollBarColor(FrameNode* frameNode) { CHECK_NULL_RETURN(frameNode, 0); - auto value = frameNode->GetPaintProperty()->GetScrollBarColor(); - return value->GetValue(); + auto value = frameNode->GetPaintProperty()->GetBarColor(); + return value.GetValue(); } void ScrollModelNG::SetScrollBarColor(const Color& color) diff --git a/frameworks/core/components_ng/pattern/scroll/scroll_model_ng.h b/frameworks/core/components_ng/pattern/scroll/scroll_model_ng.h index 100d68c0a4c32b7f1d4220725c5dc3d956f52a33..e33a0c66a5b49f21c90db931207675cab798590c 100644 --- a/frameworks/core/components_ng/pattern/scroll/scroll_model_ng.h +++ b/frameworks/core/components_ng/pattern/scroll/scroll_model_ng.h @@ -66,7 +66,7 @@ public: static void SetScrollEnabled(FrameNode* frameNode, bool scrollEnabled); static float GetFriction(FrameNode* frameNode); static void SetFriction(FrameNode* frameNode, double friction); - static int32_t GetScrollSnap(FrameNode* frameNode); + static ScrollSnapOptions GetScrollSnap(FrameNode* frameNode); static void SetScrollSnap(FrameNode* frameNode, ScrollSnapAlign scrollSnapAlign, const Dimension& intervalSize, const std::vector& snapPaginations, const std::pair& enableSnapToSide); static int32_t GetScrollBar(FrameNode* frameNode); diff --git a/frameworks/core/components_ng/pattern/scrollable/scrollable_paint_property.cpp b/frameworks/core/components_ng/pattern/scrollable/scrollable_paint_property.cpp index e20a73aea3a0d82ac740f8f855a6f72eb7ca79e3..bdef1188dff6a3fa717a73f0d8fd4cba13c345be 100644 --- a/frameworks/core/components_ng/pattern/scrollable/scrollable_paint_property.cpp +++ b/frameworks/core/components_ng/pattern/scrollable/scrollable_paint_property.cpp @@ -49,6 +49,7 @@ Dimension ScrollablePaintProperty::GetBarWidth() const auto scrollBarTheme = themeManager->GetTheme(); CHECK_NULL_RETURN(scrollBarTheme, Dimension()); auto defaultScrollBarWidth = scrollBarTheme->GetNormalWidth(); + LOGI("kkk GetBarWidth"); return propScrollBarProperty_ ? propScrollBarProperty_->propScrollBarWidth.value_or(defaultScrollBarWidth) : defaultScrollBarWidth; } diff --git a/frameworks/core/components_ng/pattern/scrollable/scrollable_paint_property.h b/frameworks/core/components_ng/pattern/scrollable/scrollable_paint_property.h index 33515e81126cf5ed385b1393573e0ba369e3aef2..084f421a834cd0d00114afd4eb4190004b2ed529 100644 --- a/frameworks/core/components_ng/pattern/scrollable/scrollable_paint_property.h +++ b/frameworks/core/components_ng/pattern/scrollable/scrollable_paint_property.h @@ -57,10 +57,10 @@ public: ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ScrollBarProperty, ScrollBarMode, DisplayMode, PROPERTY_UPDATE_RENDER); ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ScrollBarProperty, ScrollBarWidth, Dimension, PROPERTY_UPDATE_RENDER); ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ScrollBarProperty, ScrollBarColor, Color, PROPERTY_UPDATE_RENDER); + Dimension GetBarWidth() const; + Color GetBarColor() const; private: - Color GetBarColor() const; - Dimension GetBarWidth() const; std::string GetBarStateString() const; }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/scrollable/scrollable_properties.h b/frameworks/core/components_ng/pattern/scrollable/scrollable_properties.h index 764ddaecafdc0fdce401d8fbfcf82c67c42e05dc..5eb8d6975263d6ea8865e7667c9a1fb0edeade8b 100644 --- a/frameworks/core/components_ng/pattern/scrollable/scrollable_properties.h +++ b/frameworks/core/components_ng/pattern/scrollable/scrollable_properties.h @@ -88,6 +88,13 @@ struct ScrollFrameResult { } }; +struct ScrollSnapOptions { + int32_t snapAlign; + int32_t enableSnapToStart; + int32_t enableSnapToEnd; + std::vector paginationParams; +}; + struct NestedScrollOptions { NestedScrollMode forward; NestedScrollMode backward; diff --git a/frameworks/core/interfaces/arkoala/arkoala_api.h b/frameworks/core/interfaces/arkoala/arkoala_api.h index 5f4625fe9dee7dd02777f66c58a31d01d6dfd91f..d13da020da913d95718c59b36e1494cd1d63ef9d 100644 --- a/frameworks/core/interfaces/arkoala/arkoala_api.h +++ b/frameworks/core/interfaces/arkoala/arkoala_api.h @@ -1742,6 +1742,7 @@ struct ArkUIScrollModifier { ArkUI_Float32 (*getScrollFriction)(ArkUINodeHandle node); void (*setScrollFriction)(ArkUINodeHandle node, ArkUI_Float32 value); void (*resetScrollFriction)(ArkUINodeHandle node); + ArkUI_Int32 (*getScrollScrollSnap)(ArkUINodeHandle node, ArkUI_Int32* values); void (*setScrollScrollSnap)(ArkUINodeHandle node, const ArkUI_Float32* paginationValue, ArkUI_Int32 paginationSize, const ArkUI_Int32* paginationParam, ArkUI_Int32 paramSize); void (*resetScrollScrollSnap)(ArkUINodeHandle node); diff --git a/frameworks/core/interfaces/native/node/node_scroll_modifier.cpp b/frameworks/core/interfaces/native/node/node_scroll_modifier.cpp index 30922905b68ddb246a693bcbd2f38d16333aff1c..b6219662d06bade7b160653be0cd3ded2c46c2ca 100644 --- a/frameworks/core/interfaces/native/node/node_scroll_modifier.cpp +++ b/frameworks/core/interfaces/native/node/node_scroll_modifier.cpp @@ -14,10 +14,12 @@ */ #include "core/interfaces/native/node/node_scroll_modifier.h" +#include "base/utils/utils.h" #include "core/components/common/layout/constants.h" #include "core/components/scroll/scroll_bar_theme.h" #include "core/components_ng/base/frame_node.h" #include "core/components_ng/pattern/scroll/scroll_model_ng.h" +#include "core/components_ng/pattern/scrollable/scrollable_properties.h" #include "core/interfaces/native/node/node_api.h" #include "frameworks/bridge/common/utils/utils.h" #include "core/components/scroll/scroll_position_controller.h" @@ -126,6 +128,22 @@ void ResetScrollFriction(ArkUINodeHandle node) ScrollModelNG::SetFriction(frameNode, FRICTION_DEFAULT); } +ArkUI_Int32 GetScrollScrollSnap(ArkUINodeHandle node, ArkUI_Int32* values) +{ + auto* frameNode = reinterpret_cast(node); + CHECK_NULL_RETURN(frameNode, 0); + ScrollSnapOptions options = ScrollModelNG::GetScrollSnap(frameNode); + values[0] = static_cast(options.snapAlign); + values[1] = static_cast(options.enableSnapToStart); + values[2] = static_cast(options.enableSnapToEnd); + auto index = 3; + for (auto item : options.paginationParams) { + values[index] = item.ConvertToVp(); + index++; + } + return index; +} + void SetScrollScrollSnap(ArkUINodeHandle node, const ArkUI_Float32* paginationValue, ArkUI_Int32 paginationSize, const int32_t* paginationParam, ArkUI_Int32 paramSize) { @@ -425,6 +443,7 @@ const ArkUIScrollModifier* GetScrollModifier() GetScrollFriction, SetScrollFriction, ResetScrollFriction, + GetScrollScrollSnap, SetScrollScrollSnap, ResetScrollScrollSnap, GetScrollScrollBar, diff --git a/interfaces/native/node/style_modifier.cpp b/interfaces/native/node/style_modifier.cpp index 10cc9a124e95ff2da21e8d5985b9a4ef36a9cf8a..cd58eb60611ad1764c017ab447b23fc22314bb91 100644 --- a/interfaces/native/node/style_modifier.cpp +++ b/interfaces/native/node/style_modifier.cpp @@ -3473,6 +3473,22 @@ void ResetScrollFriction(ArkUI_NodeHandle node) } } +const ArkUI_AttributeItem* GetScrollScrollSnap(ArkUI_NodeHandle node) +{ + ArkUI_Int32 values[32]; + auto size = GetFullImpl()->getNodeModifiers()->getScrollModifier()->getScrollScrollSnap(node->uiNodeHandle, values); + + //size index + g_numberValues[0].i32 = values[0]; + g_numberValues[1].i32 = values[1]; + g_numberValues[2].i32 = values[2]; + for (auto i = 0; i < size - 3; i++) { + g_numberValues[i].i32 = values[i]; + } + g_attributeItem.size = size; + return &g_attributeItem; +} + int32_t SetScrollScrollSnap(ArkUI_NodeHandle node, const ArkUI_AttributeItem* item) { auto actualSize = CheckAttributeItemArray(item, REQUIRED_FOUR_PARAM); @@ -9622,7 +9638,7 @@ const ArkUI_AttributeItem* GetScrollAttribute(ArkUI_NodeHandle node, int32_t sub { static Getter* getters[] = { GetScrollScrollBar, GetScrollScrollBarWidth, GetScrollScrollBarColor, GetScrollScrollable, GetScrollEdgeEffect, GetScrollEnableScrollInteraction, GetScrollFriction, - nullptr, GetScrollNestedScroll, GetScrollOffset, GetScrollEdge, GetScrollEnablePaging }; + GetScrollScrollSnap, GetScrollNestedScroll, GetScrollOffset, GetScrollEdge, GetScrollEnablePaging }; if (subTypeId >= sizeof(getters) / sizeof(Getter*)) { TAG_LOGE(AceLogTag::ACE_NATIVE_NODE, "slider node attribute: %{public}d NOT IMPLEMENT", subTypeId); return nullptr;