diff options
-rw-r--r-- | inc/view/ImageGrid.h | 1 | ||||
-rw-r--r-- | src/view/ImageGrid.cpp | 40 |
2 files changed, 30 insertions, 11 deletions
diff --git a/inc/view/ImageGrid.h b/inc/view/ImageGrid.h index af1a65b..399201b 100644 --- a/inc/view/ImageGrid.h +++ b/inc/view/ImageGrid.h @@ -135,6 +135,7 @@ namespace gallery { void removeUnrealizeLock(); void handleItemEvent(int itemIndex, int event, int x, int y) const; + Elm_Interface_Atspi_Accessible *requestAtspi(int itemIndex); Elm_Interface_Atspi_Accessible *getItemAtspi(int itemIndex); // Selection mode hanling diff --git a/src/view/ImageGrid.cpp b/src/view/ImageGrid.cpp index 29cabf9..6c8e14c 100644 --- a/src/view/ImageGrid.cpp +++ b/src/view/ImageGrid.cpp @@ -140,8 +140,7 @@ namespace gallery { virtual int calcMaxSlotCount(const int itemCount) const = 0; - virtual int calcExtraPaddingSize(const int slotSize, - const int itemCount) const + virtual int calcExtraPaddingSize(const int slotSize) const { return 0; } @@ -187,8 +186,8 @@ namespace gallery { return ((itemCount + (totalLength - 1)) / totalLength * 2); } - virtual int calcExtraPaddingSize(const int slotSize, - const int itemCount) const final override + virtual int calcExtraPaddingSize( + const int slotSize) const final override { return slotSize; } @@ -538,7 +537,7 @@ namespace gallery { (m_realizeIndex + 1) : (m_realizeIndex - 1)); - auto relationObject = m_imageGrid.getItemAtspi(relationIndex); + auto relationObject = m_imageGrid.requestAtspi(relationIndex); if (!relationObject) { relationObject = m_btn.getEo(); } @@ -1054,9 +1053,7 @@ namespace gallery { Elm_Interface_Atspi_Accessible *ImageGrid::getAccessObject( const bool isFlowsTo) { - const int itemIndex = (isFlowsTo ? 0 : (m_itemCount - 1)); - scrollToItem(itemIndex); - return getItemAtspi(itemIndex); + return getItemAtspi(isFlowsTo ? 0 : (m_itemCount - 1)); } template <class FUNC> @@ -1120,12 +1117,25 @@ namespace gallery { return doWithCell(itemIndex, [this, &showFunc](const int slotIndex, const int itemOffset) { - const int scrollOffset = ((slotIndex / 2) * m_slotSize); + const int extraPadding = ((slotIndex & 1) ? + m_info.calcExtraPaddingSize(m_slotSize) : 0); + + const int maxOffest = ((slotIndex / 2) * m_slotSize); + const int minOffset = (maxOffest + extraPadding - + ((m_scrollerSize / m_slotSize) - 1) * m_slotSize); + if ((m_scrollOffset >= minOffset) && + (m_scrollOffset <= maxOffest)) { + return RES_OK; + } + + const int scrollOffset = ((m_scrollOffset > maxOffest) ? + maxOffest : minOffset); if (m_info.isHorizontal) { showFunc(*m_scroller, scrollOffset, 0, m_scrollerSize, 1); } else { showFunc(*m_scroller, 0, scrollOffset, 1, m_scrollerSize); } + return RES_OK; }); } @@ -1186,7 +1196,7 @@ namespace gallery { } } - Elm_Interface_Atspi_Accessible *ImageGrid::getItemAtspi(const int itemIndex) + Elm_Interface_Atspi_Accessible *ImageGrid::requestAtspi(const int itemIndex) { if ((itemIndex < 0) || (itemIndex >= m_itemCount)) { if (m_listener) { @@ -1195,6 +1205,14 @@ namespace gallery { } return nullptr; } + return getItemAtspi(itemIndex); + } + + Elm_Interface_Atspi_Accessible *ImageGrid::getItemAtspi( + const int itemIndex) + { + FAIL_RETURN_VALUE(scrollToItem(itemIndex), nullptr, + "scrollToItem() failed!"); Elm_Interface_Atspi_Accessible *result = nullptr; @@ -1391,7 +1409,7 @@ namespace gallery { m_padSize1 = std::lround(spaceSize / 2.0); m_padSize2 = (spaceSize - m_padSize1 + - m_info.calcExtraPaddingSize(m_slotSize, m_itemCount)); + m_info.calcExtraPaddingSize(m_slotSize)); } void ImageGrid::updateScrollBias() |