提交 7a31a93b 编写于 作者: G guyuanzhang

Description:fix UIList margin support

Sig:graphic
Feature or Bugfix:Feature
Binary Source:No
上级 28a89fab
...@@ -214,7 +214,7 @@ bool UIList::OnRotateEvent(const RotateEvent& event) ...@@ -214,7 +214,7 @@ bool UIList::OnRotateEvent(const RotateEvent& event)
#endif #endif
if (!throwDrag_ || ((MATH_ABS(tmpRotateLen) < (midPointX / rotateThreshold_)) && if (!throwDrag_ || ((MATH_ABS(tmpRotateLen) < (midPointX / rotateThreshold_)) &&
(MATH_ABS(tmpRotateLen) < (midPointY / rotateThreshold_)))) { (MATH_ABS(tmpRotateLen) < (midPointY / rotateThreshold_)))) {
ScrollBy(tmpRotateLen); ScrollBy(tmpRotateLen);
if (event.GetRotate() == 0) { if (event.GetRotate() == 0) {
isReCalculateDragEnd_ = false; isReCalculateDragEnd_ = false;
...@@ -282,17 +282,20 @@ bool UIList::DragXInner(int16_t distance) ...@@ -282,17 +282,20 @@ bool UIList::DragXInner(int16_t distance)
return MoveOffset(distance); return MoveOffset(distance);
} }
if (distance > 0) { if (distance > 0) {
if (childrenHead_ && (childrenHead_->GetX() + distance > scrollBlankSize_ + reboundSize)) { if (childrenHead_ && (childrenHead_->GetX() + distance >
distance = scrollBlankSize_ + reboundSize - childrenHead_->GetX(); scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_LEFT))) {
distance =
scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_LEFT) - childrenHead_->GetX();
} }
} else { } else {
if (childrenTail_) { if (childrenTail_) {
if (childrenTail_->GetRelativeRect().GetRight() <= listWidth - scrollBlankSize_ - reboundSize) { if (childrenTail_->GetRelativeRect().GetRight() <=
listWidth - scrollBlankSize_ - reboundSize - childrenTail_->GetStyle(STYLE_MARGIN_RIGHT)) {
distance = 0; distance = 0;
} else if (listWidth - (childrenTail_->GetX() + childrenTail_->GetRelativeRect().GetWidth() + distance) > } else if (listWidth - (childrenTail_->GetX() + childrenTail_->GetRelativeRect().GetWidth() + distance) >
scrollBlankSize_ + reboundSize) { scrollBlankSize_ + reboundSize + childrenTail_->GetStyle(STYLE_MARGIN_RIGHT)) {
distance = listWidth - scrollBlankSize_ - reboundSize - childrenTail_->GetX() - 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) ...@@ -321,17 +324,20 @@ bool UIList::DragYInner(int16_t distance)
return MoveOffset(distance); return MoveOffset(distance);
} }
if (distance > 0) { if (distance > 0) {
if (childrenHead_ && (childrenHead_->GetY() + distance > scrollBlankSize_ + reboundSize)) { if (childrenHead_ && (childrenHead_->GetY() + distance >
distance = scrollBlankSize_ + reboundSize - childrenHead_->GetY(); scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_TOP))) {
distance =
scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_TOP) - childrenHead_->GetY();
} }
} else { } else {
if (childrenTail_) { if (childrenTail_) {
if (childrenTail_->GetRelativeRect().GetBottom() <= listHeigh - scrollBlankSize_ - reboundSize) { if (childrenTail_->GetRelativeRect().GetBottom() <=
listHeigh - scrollBlankSize_ - reboundSize - childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM)) {
distance = 0; distance = 0;
} else if (listHeigh - (childrenTail_->GetY() + childrenTail_->GetRelativeRect().GetHeight() + distance) > } else if (listHeigh - (childrenTail_->GetY() + childrenTail_->GetRelativeRect().GetHeight() + distance) >
scrollBlankSize_ + reboundSize) { scrollBlankSize_ + reboundSize + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM)) {
distance = listHeigh - scrollBlankSize_ - reboundSize - childrenTail_->GetY() - 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, ...@@ -423,7 +429,7 @@ bool UIList::MoveChildStepInner(int16_t distance,
} else { } else {
if ((childrenTail_ == nullptr) || if ((childrenTail_ == nullptr) ||
((childrenTail_->*pfnGetXOrY)() + (childrenTail_->GetRelativeRect().*pfnGetWidthOrHeight)() + distance < ((childrenTail_->*pfnGetXOrY)() + (childrenTail_->GetRelativeRect().*pfnGetWidthOrHeight)() + distance <
(this->GetRelativeRect().*pfnGetWidthOrHeight)())) { (this->GetRelativeRect().*pfnGetWidthOrHeight)())) {
UIView* newView = recycle_.GetView(GetIndexInc(bottomIndex_)); UIView* newView = recycle_.GetView(GetIndexInc(bottomIndex_));
if (newView == nullptr) { if (newView == nullptr) {
return false; return false;
...@@ -496,9 +502,13 @@ void UIList::PushBack(UIView* view) ...@@ -496,9 +502,13 @@ void UIList::PushBack(UIView* view)
SetHead(view); SetHead(view);
} else { } else {
if (direction_ == VERTICAL) { 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 { } 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_); bottomIndex_ = GetIndexInc(bottomIndex_);
} }
...@@ -516,9 +526,13 @@ void UIList::PushFront(UIView* view) ...@@ -516,9 +526,13 @@ void UIList::PushFront(UIView* view)
SetHead(view); SetHead(view);
} else { } else {
if (direction_ == VERTICAL) { 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 { } 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_); topIndex_ = GetIndexDec(topIndex_);
} }
...@@ -545,7 +559,7 @@ void UIList::PopItem(UIView* view) ...@@ -545,7 +559,7 @@ void UIList::PopItem(UIView* view)
void UIList::SetHead(UIView* view) void UIList::SetHead(UIView* view)
{ {
if (view != nullptr) { if (view != nullptr) {
view->SetPosition(0, 0); view->SetPosition(view->GetStyle(STYLE_MARGIN_LEFT), view->GetStyle(STYLE_MARGIN_TOP));
topIndex_ = startIndex_; topIndex_ = startIndex_;
bottomIndex_ = startIndex_; bottomIndex_ = startIndex_;
} }
...@@ -565,8 +579,10 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset) ...@@ -565,8 +579,10 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset)
if ((onSelectedIndex_ != NULL_SELECT_INDEX) && (selectPosition_ != 0)) { if ((onSelectedIndex_ != NULL_SELECT_INDEX) && (selectPosition_ != 0)) {
if (direction_ == VERTICAL) { if (direction_ == VERTICAL) {
height = view->GetRelativeRect().GetHeight(); height = view->GetRelativeRect().GetHeight();
if ((GetChildrenHead()->GetY() + yOffset > selectPosition_) || if ((GetChildrenHead()->GetY() - GetChildrenHead()->GetStyle(STYLE_MARGIN_TOP) + yOffset >
(childrenTail_->GetY() + height + yOffset < selectPosition_)) { selectPosition_) ||
(childrenTail_->GetY() + height + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM) + yOffset <
selectPosition_)) {
onSelectedIndex_ = NULL_SELECT_INDEX; onSelectedIndex_ = NULL_SELECT_INDEX;
onSelectedView_ = nullptr; onSelectedView_ = nullptr;
if (scrollListener_ != nullptr) { if (scrollListener_ != nullptr) {
...@@ -575,8 +591,9 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset) ...@@ -575,8 +591,9 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset)
} }
} else { } else {
width = view->GetRelativeRect().GetWidth(); width = view->GetRelativeRect().GetWidth();
if ((GetChildrenHead()->GetX() + xOffset > selectPosition_) || if ((GetChildrenHead()->GetX() - GetChildrenHead()->GetStyle(STYLE_MARGIN_LEFT) + xOffset >
(childrenTail_->GetX() + width < selectPosition_)) { selectPosition_) ||
(childrenTail_->GetX() + width + childrenTail_->GetStyle(STYLE_MARGIN_RIGHT) < selectPosition_)) {
onSelectedIndex_ = NULL_SELECT_INDEX; onSelectedIndex_ = NULL_SELECT_INDEX;
onSelectedView_ = nullptr; onSelectedView_ = nullptr;
if (scrollListener_ != nullptr) { if (scrollListener_ != nullptr) {
...@@ -594,7 +611,8 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset) ...@@ -594,7 +611,8 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset)
if (direction_ == VERTICAL) { if (direction_ == VERTICAL) {
height = view->GetRelativeRect().GetHeight(); height = view->GetRelativeRect().GetHeight();
/* Views may be the same but have different indexes because of view recycling. */ /* 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()))) { ((onSelectedView_ != view) || (onSelectedIndex_ != view->GetViewIndex()))) {
onSelectedIndex_ = view->GetViewIndex(); onSelectedIndex_ = view->GetViewIndex();
onSelectedView_ = view; onSelectedView_ = view;
...@@ -605,7 +623,8 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset) ...@@ -605,7 +623,8 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset)
} }
} else { } else {
width = view->GetRelativeRect().GetWidth(); 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()))) { ((onSelectedView_ != view) || (onSelectedIndex_ != view->GetViewIndex()))) {
onSelectedIndex_ = view->GetViewIndex(); onSelectedIndex_ = view->GetViewIndex();
onSelectedView_ = view; onSelectedView_ = view;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册