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

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_lod_capable_layer_offset.h"
0008 
0009 #include "kis_lod_transform.h"
0010 
0011 
0012 struct KisLodCapableLayerOffset::Private
0013 {
0014     Private(KisDefaultBoundsBaseSP _defaultBounds)
0015         : defaultBounds(_defaultBounds),
0016           x(0),
0017           y(0),
0018           lodX(0),
0019           lodY(0)
0020     {
0021     }
0022 
0023     KisDefaultBoundsBaseSP defaultBounds;
0024 
0025     int x;
0026     int y;
0027 
0028     int lodX;
0029     int lodY;
0030 };
0031 
0032 
0033 KisLodCapableLayerOffset::KisLodCapableLayerOffset(KisDefaultBoundsBaseSP defaultBounds)
0034     : m_d(new Private(defaultBounds))
0035 {
0036 }
0037 
0038 KisLodCapableLayerOffset::KisLodCapableLayerOffset(const KisLodCapableLayerOffset &rhs)
0039     : m_d(new Private(*rhs.m_d))
0040 {
0041 }
0042 
0043 KisLodCapableLayerOffset& KisLodCapableLayerOffset::operator=(const KisLodCapableLayerOffset &rhs)
0044 {
0045     if (this != &rhs) {
0046         *m_d = *rhs.m_d;
0047     }
0048 
0049     return *this;
0050 }
0051 
0052 KisLodCapableLayerOffset::~KisLodCapableLayerOffset()
0053 {
0054 }
0055 
0056 int KisLodCapableLayerOffset::x() const
0057 {
0058     const int newLod = m_d->defaultBounds->currentLevelOfDetail();
0059     return newLod > 0 ? m_d->lodX : m_d->x;
0060 }
0061 
0062 int KisLodCapableLayerOffset::y() const
0063 {
0064     const int newLod = m_d->defaultBounds->currentLevelOfDetail();
0065     return newLod > 0 ? m_d->lodY : m_d->y;
0066 }
0067 
0068 void KisLodCapableLayerOffset::setX(int value)
0069 {
0070     const int newLod = m_d->defaultBounds->currentLevelOfDetail();
0071     (newLod > 0 ? m_d->lodX : m_d->x) = value;
0072 }
0073 
0074 void KisLodCapableLayerOffset::setY(int value)
0075 {
0076     const int newLod = m_d->defaultBounds->currentLevelOfDetail();
0077     (newLod > 0 ? m_d->lodY : m_d->y) = value;
0078 }
0079 
0080 void KisLodCapableLayerOffset::syncLodOffset()
0081 {
0082     const int newLod = m_d->defaultBounds->currentLevelOfDetail();
0083 
0084     m_d->lodX = KisLodTransform::coordToLodCoord(m_d->x, newLod);
0085     m_d->lodY = KisLodTransform::coordToLodCoord(m_d->y, newLod);
0086 }