File indexing completed on 2024-05-12 15:58:48

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     : KisRandomAccessor2(ktm, offsetX, offsetY, writable, completeListener),
0018       m_wrapRect(wrapRect),
0019       m_currentPos(QPoint())
0020 {
0021 }
0022 
0023 void KisWrappedRandomAccessor::moveTo(qint32 x, qint32 y)
0024 {
0025     m_currentPos = QPoint(x, y);
0026 
0027     x = KisWrappedRect::xToWrappedX(x, m_wrapRect);
0028     y = KisWrappedRect::yToWrappedY(y, m_wrapRect);
0029 
0030     KisRandomAccessor2::moveTo(x, y);
0031 }
0032 
0033 qint32 KisWrappedRandomAccessor::numContiguousColumns(qint32 x) const
0034 {
0035     x = KisWrappedRect::xToWrappedX(x, m_wrapRect);
0036     qint32 distanceToBorder = m_wrapRect.x() + m_wrapRect.width() - x;
0037 
0038     return qMin(distanceToBorder, KisRandomAccessor2::numContiguousColumns(x));
0039 }
0040 
0041 qint32 KisWrappedRandomAccessor::numContiguousRows(qint32 y) const
0042 {
0043     y = KisWrappedRect::yToWrappedY(y, m_wrapRect);
0044     qint32 distanceToBorder = m_wrapRect.y() + m_wrapRect.height() - y;
0045 
0046     return qMin(distanceToBorder, KisRandomAccessor2::numContiguousRows(y));
0047 }
0048 
0049 qint32 KisWrappedRandomAccessor::rowStride(qint32 x, qint32 y) const
0050 {
0051     x = KisWrappedRect::xToWrappedX(x, m_wrapRect);
0052     y = KisWrappedRect::yToWrappedY(y, m_wrapRect);
0053     return KisRandomAccessor2::rowStride(x, y);
0054 }
0055 
0056 qint32 KisWrappedRandomAccessor::x() const
0057 {
0058     return m_currentPos.x();
0059 }
0060 
0061 qint32 KisWrappedRandomAccessor::y() const
0062 {
0063     return m_currentPos.y();
0064 }