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 }