File indexing completed on 2024-05-19 04:26:40
0001 /* 0002 * SPDX-FileCopyrightText: 2013 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_wrapped_random_accessor.h" 0008 0009 #include "kis_wrapped_rect.h" 0010 0011 0012 KisWrappedRandomAccessor::KisWrappedRandomAccessor(KisTiledDataManager *ktm, 0013 qint32 offsetX, qint32 offsetY, 0014 bool writable, 0015 KisIteratorCompleteListener *completeListener, 0016 const QRect &wrapRect, 0017 const WrapAroundAxis wrapAroundModeAxis) 0018 : KisRandomAccessor2(ktm, offsetX, offsetY, writable, completeListener), 0019 m_wrapRect(wrapRect), 0020 m_currentPos(QPoint()), 0021 m_wrapAxis(wrapAroundModeAxis) 0022 { 0023 } 0024 0025 void KisWrappedRandomAccessor::moveTo(qint32 x, qint32 y) 0026 { 0027 m_currentPos = QPoint(x, y); 0028 0029 x = KisWrappedRect::xToWrappedX(x, m_wrapRect, m_wrapAxis); 0030 y = KisWrappedRect::yToWrappedY(y, m_wrapRect, m_wrapAxis); 0031 0032 KisRandomAccessor2::moveTo(x, y); 0033 } 0034 0035 qint32 KisWrappedRandomAccessor::numContiguousColumns(qint32 x) const 0036 { 0037 if (m_wrapAxis == WRAPAROUND_VERTICAL) { 0038 return KisRandomAccessor2::numContiguousColumns(x); 0039 } 0040 x = KisWrappedRect::xToWrappedX(x, m_wrapRect, m_wrapAxis); 0041 qint32 distanceToBorder = m_wrapRect.x() + m_wrapRect.width() - x; 0042 0043 return qMin(distanceToBorder, KisRandomAccessor2::numContiguousColumns(x)); 0044 } 0045 0046 qint32 KisWrappedRandomAccessor::numContiguousRows(qint32 y) const 0047 { 0048 if (m_wrapAxis == WRAPAROUND_HORIZONTAL) { 0049 return KisRandomAccessor2::numContiguousRows(y); 0050 } 0051 y = KisWrappedRect::yToWrappedY(y, m_wrapRect, m_wrapAxis); 0052 qint32 distanceToBorder = m_wrapRect.y() + m_wrapRect.height() - y; 0053 0054 return qMin(distanceToBorder, KisRandomAccessor2::numContiguousRows(y)); 0055 } 0056 0057 qint32 KisWrappedRandomAccessor::rowStride(qint32 x, qint32 y) const 0058 { 0059 x = KisWrappedRect::xToWrappedX(x, m_wrapRect, m_wrapAxis); 0060 y = KisWrappedRect::yToWrappedY(y, m_wrapRect, m_wrapAxis); 0061 return KisRandomAccessor2::rowStride(x, y); 0062 } 0063 0064 qint32 KisWrappedRandomAccessor::x() const 0065 { 0066 return m_currentPos.x(); 0067 } 0068 0069 qint32 KisWrappedRandomAccessor::y() const 0070 { 0071 return m_currentPos.y(); 0072 }