提交 e5eaf963 编写于 作者: G guyuanzhang

Description:fix ui_list she margin minus, drag err

Sig:graphic
Feature or Bugfix:Feature
Binary Source:No
Signed-off-by: Nguyuanzhang <zhangguyuan@huawei.com>
上级 9ed1ebb0
......@@ -282,20 +282,18 @@ bool UIList::DragXInner(int16_t distance)
return MoveOffset(distance, 0);
}
if (distance > 0) {
if (childrenHead_ && ((childrenHead_->GetX() + distance) >
(scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_LEFT)))) {
distance =
scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_LEFT) - childrenHead_->GetX();
if (childrenHead_ && ((childrenHead_->GetX() + distance) > (scrollBlankSize_ + reboundSize))) {
distance = scrollBlankSize_ + reboundSize - childrenHead_->GetX();
}
} else {
if (childrenTail_) {
if (childrenTail_->GetRelativeRect().GetRight() <=
(listWidth - scrollBlankSize_ - reboundSize - childrenTail_->GetStyle(STYLE_MARGIN_RIGHT))) {
if (childrenTail_->GetRelativeRect().GetRight() + childrenTail_->GetStyle(STYLE_MARGIN_RIGHT) <
listWidth - scrollBlankSize_ - reboundSize) {
distance = 0;
} else if ((listWidth - childrenTail_->GetX() - childrenTail_->GetRelativeRect().GetWidth() - distance) >
(scrollBlankSize_ + reboundSize + childrenTail_->GetStyle(STYLE_MARGIN_RIGHT))) {
distance = listWidth - scrollBlankSize_ - reboundSize - childrenTail_->GetX() -
childrenTail_->GetRelativeRect().GetWidth() - childrenTail_->GetStyle(STYLE_MARGIN_RIGHT);
} else if ((childrenTail_->GetRelativeRect().GetRight() + childrenTail_->GetStyle(STYLE_MARGIN_RIGHT) +
distance) <= (listWidth - scrollBlankSize_ - reboundSize)) {
distance = listWidth - scrollBlankSize_ - reboundSize - childrenTail_->GetRelativeRect().GetRight() -
childrenTail_->GetStyle(STYLE_MARGIN_RIGHT) - 1;
}
}
}
......@@ -324,20 +322,18 @@ bool UIList::DragYInner(int16_t distance)
return MoveOffset(0, distance);
}
if (distance > 0) {
if (childrenHead_ && ((childrenHead_->GetY() + distance) >
(scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_TOP)))) {
distance =
scrollBlankSize_ + reboundSize + childrenHead_->GetStyle(STYLE_MARGIN_TOP) - childrenHead_->GetY();
if (childrenHead_ && ((childrenHead_->GetY() + distance) > (scrollBlankSize_ + reboundSize))) {
distance = scrollBlankSize_ + reboundSize - childrenHead_->GetY();
}
} else {
if (childrenTail_) {
if (childrenTail_->GetRelativeRect().GetBottom() <=
(listHeight - scrollBlankSize_ - reboundSize - childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM))) {
if (childrenTail_->GetRelativeRect().GetBottom() + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM) <
listHeight - scrollBlankSize_ - reboundSize) {
distance = 0;
} else if ((listHeight - childrenTail_->GetY() - childrenTail_->GetRelativeRect().GetHeight() - distance) >
(scrollBlankSize_ + reboundSize + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM))) {
distance = listHeight - scrollBlankSize_ - reboundSize - childrenTail_->GetY() -
childrenTail_->GetRelativeRect().GetHeight() - childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM);
} else if ((childrenTail_->GetRelativeRect().GetBottom() + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM) +
distance) <= (listHeight - scrollBlankSize_ - reboundSize)) {
distance = listHeight - scrollBlankSize_ - reboundSize - childrenTail_->GetRelativeRect().GetBottom() -
childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM) - 1;
}
}
}
......@@ -414,14 +410,12 @@ bool UIList::ReCalculateDragEnd()
return true;
}
bool UIList::MoveChildStepInner(int16_t distance,
int16_t (UIView::*getXOrY)() const,
int16_t (UIView::*getWidthOrHeight)())
bool UIList::MoveChildStepVertical(int16_t distance)
{
bool popRet = false;
bool pushRet = false;
if (distance > 0) {
if ((childrenHead_ == nullptr) || ((childrenHead_->*getXOrY)() + distance > 0)) {
if ((childrenHead_ == nullptr) || (childrenHead_->GetRelativeRect().GetTop() + distance > 0)) {
uint16_t index = GetIndexDec(topIndex_);
if (index == topIndex_) {
return false;
......@@ -433,14 +427,12 @@ bool UIList::MoveChildStepInner(int16_t distance,
PushFront(newView);
pushRet = true;
}
if (childrenTail_ != nullptr && ((childrenTail_->*getXOrY)() + distance > (this->*getWidthOrHeight)())) {
if (childrenTail_ != nullptr && (childrenTail_->GetRelativeRect().GetTop() + distance > GetHeight())) {
PopItem(childrenTail_);
popRet = true;
}
} else {
if ((childrenTail_ == nullptr) ||
((childrenTail_->*getXOrY)() + (childrenTail_->*getWidthOrHeight)() + distance <
(this->*getWidthOrHeight)())) {
if (childrenTail_ == nullptr || (childrenTail_->GetRelativeRect().GetBottom() + distance < GetHeight())) {
UIView* newView = recycle_.GetView(GetIndexInc(bottomIndex_));
if (newView == nullptr) {
return false;
......@@ -448,7 +440,45 @@ bool UIList::MoveChildStepInner(int16_t distance,
PushBack(newView);
pushRet = true;
}
if (childrenHead_ && (childrenHead_->*getXOrY)() + distance + (childrenHead_->*getWidthOrHeight)() < 0) {
if (childrenHead_ && (childrenHead_->GetRelativeRect().GetBottom() + distance < 0)) {
PopItem(childrenHead_);
popRet = true;
}
}
return (popRet || pushRet);
}
bool UIList::MoveChildStepHorizontal(int16_t distance)
{
bool popRet = false;
bool pushRet = false;
if (distance > 0) {
if ((childrenHead_ == nullptr) || (childrenHead_->GetRelativeRect().GetLeft() + distance > 0)) {
uint16_t index = GetIndexDec(topIndex_);
if (index == topIndex_) {
return false;
}
UIView* newView = recycle_.GetView(index);
if (newView == nullptr) {
return false;
}
PushFront(newView);
pushRet = true;
}
if (childrenTail_ != nullptr && (childrenTail_->GetRelativeRect().GetLeft() + distance > GetWidth())) {
PopItem(childrenTail_);
popRet = true;
}
} else {
if (childrenTail_ == nullptr || (childrenTail_->GetRelativeRect().GetRight() + distance < GetWidth())) {
UIView* newView = recycle_.GetView(GetIndexInc(bottomIndex_));
if (newView == nullptr) {
return false;
}
PushBack(newView);
pushRet = true;
}
if (childrenHead_ && (childrenHead_->GetRelativeRect().GetRight() + distance < 0)) {
PopItem(childrenHead_);
popRet = true;
}
......@@ -459,9 +489,9 @@ bool UIList::MoveChildStepInner(int16_t distance,
bool UIList::MoveChildStep(int16_t distance)
{
if (direction_ == VERTICAL) {
return MoveChildStepInner(distance, &UIView::GetY, &UIView::GetHeightWithMargin);
return MoveChildStepVertical(distance);
} else {
return MoveChildStepInner(distance, &UIView::GetX, &UIView::GetWidthWithMargin);
return MoveChildStepHorizontal(distance);
}
}
......@@ -583,7 +613,7 @@ void UIList::MoveChildByOffset(int16_t xOffset, int16_t yOffset)
height = view->GetRelativeRect().GetHeight();
if ((view->GetY() + yOffset > selectPosition_) ||
(childrenTail_->GetY() + height + childrenTail_->GetStyle(STYLE_MARGIN_BOTTOM) + yOffset <
selectPosition_)) {
selectPosition_)) {
onSelectedIndex_ = NULL_SELECT_INDEX;
onSelectedView_ = nullptr;
if (scrollListener_ != nullptr) {
......
......@@ -342,7 +342,8 @@ public:
}
/**
* @brief 设置自动对齐动画时长,单位为毫秒,默认为100毫秒。该功能依赖EnableAutoAlign()方法,自动对齐设置为true情况下才生效。
* @brief
* 设置自动对齐动画时长,单位为毫秒,默认为100毫秒。该功能依赖EnableAutoAlign()方法,自动对齐设置为true情况下才生效。
*
* @param value 自动对齐动画时长,0表示无动画。
* @since 3.0
......@@ -361,7 +362,7 @@ public:
* position partly (but not all of it).
* false means list item will move front when its position crosses the line of select
* position (no matter how many it crosses).
*
*
* @since 3.0
* @version 3.0
*/
......@@ -391,6 +392,7 @@ public:
static constexpr int8_t NULL_SELECT_INDEX = -1;
UIView* onSelectedView_;
protected:
static constexpr int16_t RECALCULATE_DRAG_DISTANCE = 10;
static constexpr int16_t RECALCULATE_DRAG_TIMES = 10;
......@@ -437,6 +439,7 @@ private:
Rect GetAdapterItemsReletiveRect();
void MoveAdapterItemsRelativeRect(int16_t x, int16_t y);
void MesureAdapterRelativeRect();
private:
friend class UIList;
void FillActiveView();
......@@ -453,8 +456,8 @@ private:
void PushFront(UIView* view);
void SetHead(UIView* view);
bool MoveChildStep(int16_t distance);
bool
MoveChildStepInner(int16_t distance, int16_t (UIView::*getXOrY)() const, int16_t (UIView::*getWidthOrHeight)());
bool MoveChildStepVertical(int16_t distance);
bool MoveChildStepHorizontal(int16_t distance);
uint16_t GetIndexInc(uint16_t index);
uint16_t GetIndexDec(uint16_t index);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册