From 7a31a93bde6317fc287f9dc1f6b9e527989b7c27 Mon Sep 17 00:00:00 2001 From: guyuanzhang Date: Fri, 26 Mar 2021 15:58:26 +0800 Subject: [PATCH] Description:fix UIList margin support Sig:graphic Feature or Bugfix:Feature Binary Source:No --- frameworks/components/ui_list.cpp | 65 ++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/frameworks/components/ui_list.cpp b/frameworks/components/ui_list.cpp index 815d435..2c5fedf 100755 --- a/frameworks/components/ui_list.cpp +++ b/frameworks/components/ui_list.cpp @@ -214,7 +214,7 @@ bool UIList::OnRotateEvent(const RotateEvent& event) #endif if (!throwDrag_ || ((MATH_ABS(tmpRotateLen) < (midPointX / rotateThreshold_)) && - (MATH_ABS(tmpRotateLen) < (midPointY / rotateThreshold_)))) { + (MATH_ABS(tmpRotateLen) < (midPointY / rotateThreshold_)))) { ScrollBy(tmpRotateLen); if (event.GetRotate() == 0) { isReCalculateDragEnd_ = false; @@ -282,17 +282,20 @@ bool UIList::DragXInner(int16_t distance) return MoveOffset(distance); } if (distance > 0) { - if (childrenHead_ && (childrenHead_->GetX() + distance > scrollBlankSize_ + reboundSize)) { - distance = scrollBlankSize_ + reboundSize - childrenHead_->GetX(); + if (childrenHead_ && (childrenHead_->GetX() + distance > + scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_LEFT))) { + distance = + scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_LEFT) - childrenHead_->GetX(); } } else { if (childrenTail_) { - if (childrenTail_->GetRelativeRect().GetRight() <= listWidth - scrollBlankSize_ - reboundSize) { + if (childrenTail_->GetRelativeRect().GetRight() <= + listWidth - scrollBlankSize_ - reboundSize - childrenTail_->GetStyle(STYLE_MARGIN_RIGHT)) { distance = 0; } else if (listWidth - (childrenTail_->GetX() + childrenTail_->GetRelativeRect().GetWidth() + distance) > - scrollBlankSize_ + reboundSize) { + scrollBlankSize_ + reboundSize + childrenTail_->GetStyle(STYLE_MARGIN_RIGHT)) { distance = listWidth - scrollBlankSize_ - reboundSize - childrenTail_->GetX() - - childrenTail_->GetRelativeRect().GetWidth(); + childrenTail_->GetRelativeRect().GetWidth() - childrenTail_->GetStyle(STYLE_MARGIN_RIGHT); } } } @@ -321,17 +324,20 @@ bool UIList::DragYInner(int16_t distance) return MoveOffset(distance); } if (distance > 0) { - if (childrenHead_ && (childrenHead_->GetY() + distance > scrollBlankSize_ + reboundSize)) { - distance = scrollBlankSize_ + reboundSize - childrenHead_->GetY(); + if (childrenHead_ && (childrenHead_->GetY() + distance > + scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_TOP))) { + distance = + scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_TOP) - childrenHead_->GetY(); } } else { if (childrenTail_) { - if (childrenTail_->GetRelativeRect().GetBottom() <= listHeigh - scrollBlankSize_ - reboundSize) { + if (childrenTail_->GetRelativeRect().GetBottom() <= + listHeigh - scrollBlankSize_ - reboundSize - childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM)) { distance = 0; } else if (listHeigh - (childrenTail_->GetY() + childrenTail_->GetRelativeRect().GetHeight() + distance) > - scrollBlankSize_ + reboundSize) { + scrollBlankSize_ + reboundSize + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM)) { distance = listHeigh - scrollBlankSize_ - reboundSize - childrenTail_->GetY() - - childrenTail_->GetRelativeRect().GetHeight(); + childrenTail_->GetRelativeRect().GetHeight() - childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM); } } } @@ -423,7 +429,7 @@ bool UIList::MoveChildStepInner(int16_t distance, } else { if ((childrenTail_ == nullptr) || ((childrenTail_->*pfnGetXOrY)() + (childrenTail_->GetRelativeRect().*pfnGetWidthOrHeight)() + distance < - (this->GetRelativeRect().*pfnGetWidthOrHeight)())) { + (this->GetRelativeRect().*pfnGetWidthOrHeight)())) { UIView* newView = recycle_.GetView(GetIndexInc(bottomIndex_)); if (newView == nullptr) { return false; @@ -496,9 +502,13 @@ void UIList::PushBack(UIView* view) SetHead(view); } else { if (direction_ == VERTICAL) { - view->SetPosition(0, childrenTail_->GetY() + childrenTail_->GetRelativeRect().GetHeight()); + view->SetPosition(view->GetStyle(STYLE_MARGIN_LEFT), + childrenTail_->GetY() + childrenTail_->GetRelativeRect().GetHeight() + + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM) + view->GetStyle(STYLE_MARGIN_TOP)); } else { - view->SetPosition(childrenTail_->GetX() + childrenTail_->GetRelativeRect().GetWidth(), 0); + view->SetPosition(childrenTail_->GetX() + childrenTail_->GetRelativeRect().GetWidth() + + childrenTail_->GetStyle(STYLE_MARGIN_RIGHT) + view->GetStyle(STYLE_MARGIN_LEFT), + view->GetStyle(STYLE_MARGIN_TOP)); } bottomIndex_ = GetIndexInc(bottomIndex_); } @@ -516,9 +526,13 @@ void UIList::PushFront(UIView* view) SetHead(view); } else { if (direction_ == VERTICAL) { - view->SetPosition(0, GetChildrenHead()->GetY() - view->GetRelativeRect().GetHeight()); + view->SetPosition(view->GetStyle(STYLE_MARGIN_LEFT), + GetChildrenHead()->GetY() - GetChildrenHead()->GetStyle(STYLE_MARGIN_TOP) - + view->GetRelativeRect().GetHeight() - view->GetStyle(STYLE_MARGIN_BOTTOM)); } else { - view->SetPosition(GetChildrenHead()->GetX() - view->GetRelativeRect().GetWidth(), 0); + view->SetPosition(GetChildrenHead()->GetX() - GetChildrenHead()->GetStyle(STYLE_MARGIN_LEFT) - + view->GetRelativeRect().GetWidth() - view->GetStyle(STYLE_MARGIN_RIGHT), + view->GetStyle(STYLE_MARGIN_TOP)); } topIndex_ = GetIndexDec(topIndex_); } @@ -545,7 +559,7 @@ void UIList::PopItem(UIView* view) void UIList::SetHead(UIView* view) { if (view != nullptr) { - view->SetPosition(0, 0); + view->SetPosition(view->GetStyle(STYLE_MARGIN_LEFT), view->GetStyle(STYLE_MARGIN_TOP)); topIndex_ = startIndex_; bottomIndex_ = startIndex_; } @@ -565,8 +579,10 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset) if ((onSelectedIndex_ != NULL_SELECT_INDEX) && (selectPosition_ != 0)) { if (direction_ == VERTICAL) { height = view->GetRelativeRect().GetHeight(); - if ((GetChildrenHead()->GetY() + yOffset > selectPosition_) || - (childrenTail_->GetY() + height + yOffset < selectPosition_)) { + if ((GetChildrenHead()->GetY() - GetChildrenHead()->GetStyle(STYLE_MARGIN_TOP) + yOffset > + selectPosition_) || + (childrenTail_->GetY() + height + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM) + yOffset < + selectPosition_)) { onSelectedIndex_ = NULL_SELECT_INDEX; onSelectedView_ = nullptr; if (scrollListener_ != nullptr) { @@ -575,8 +591,9 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset) } } else { width = view->GetRelativeRect().GetWidth(); - if ((GetChildrenHead()->GetX() + xOffset > selectPosition_) || - (childrenTail_->GetX() + width < selectPosition_)) { + if ((GetChildrenHead()->GetX() - GetChildrenHead()->GetStyle(STYLE_MARGIN_LEFT) + xOffset > + selectPosition_) || + (childrenTail_->GetX() + width + childrenTail_->GetStyle(STYLE_MARGIN_RIGHT) < selectPosition_)) { onSelectedIndex_ = NULL_SELECT_INDEX; onSelectedView_ = nullptr; if (scrollListener_ != nullptr) { @@ -594,7 +611,8 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset) if (direction_ == VERTICAL) { height = view->GetRelativeRect().GetHeight(); /* Views may be the same but have different indexes because of view recycling. */ - if ((y <= selectPosition_) && (y + height >= selectPosition_) && + if ((y - view->GetStyle(STYLE_PADDING_TOP) <= selectPosition_) && + (y + view->GetStyle(STYLE_MARGIN_BOTTOM) + height >= selectPosition_) && ((onSelectedView_ != view) || (onSelectedIndex_ != view->GetViewIndex()))) { onSelectedIndex_ = view->GetViewIndex(); onSelectedView_ = view; @@ -605,7 +623,8 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset) } } else { width = view->GetRelativeRect().GetWidth(); - if ((x <= selectPosition_) && (x + width >= selectPosition_) && + if ((x - view->GetStyle(STYLE_MARGIN_LEFT) <= selectPosition_) && + (x + width + view->GetStyle(STYLE_MARGIN_RIGHT) >= selectPosition_) && ((onSelectedView_ != view) || (onSelectedIndex_ != view->GetViewIndex()))) { onSelectedIndex_ = view->GetViewIndex(); onSelectedView_ = view; -- GitLab