Paste P258

Masterwork From Distant Lands
ActivePublic

Authored by dkazakov on Aug 29 2018, 4:51 PM.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e78db3a..509c12a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -430,6 +430,9 @@ if(MINGW)
string(REPLACE "-Wl,--export-all-symbols" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}")
endif(MINGW)
+string(REPLACE "-Wl,--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
+string(REPLACE "-Wl,--no-undefined" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}")
+
# enable exceptions globally
kde_enable_exceptions()
diff --git a/libs/image/tiles3/kis_tile_hash_table2.h b/libs/image/tiles3/kis_tile_hash_table2.h
index d5bda75..57bd309 100644
--- a/libs/image/tiles3/kis_tile_hash_table2.h
+++ b/libs/image/tiles3/kis_tile_hash_table2.h
@@ -81,7 +81,7 @@ public:
* \param newTile out-parameter, returns true if a new tile
* was created
*/
- TileTypeSP getTileLazy(qint32 col, qint32 row, bool& newTile);
+ TileTypeSP getTileLazy(qint32 col, qint32 row, bool& newTile, KisTileData *srcTileData = 0);
/**
* Returns a tile in position (col,row). If no tile exists,
@@ -293,7 +293,7 @@ typename KisTileHashTableTraits2<T>::TileTypeSP KisTileHashTableTraits2<T>::getE
}
template <class T>
-typename KisTileHashTableTraits2<T>::TileTypeSP KisTileHashTableTraits2<T>::getTileLazy(qint32 col, qint32 row, bool &newTile)
+typename KisTileHashTableTraits2<T>::TileTypeSP KisTileHashTableTraits2<T>::getTileLazy(qint32 col, qint32 row, bool &newTile, KisTileData *srcTileData)
{
newTile = false;
quint32 idx = calculateHash(col, row);
@@ -303,9 +303,11 @@ typename KisTileHashTableTraits2<T>::TileTypeSP KisTileHashTableTraits2<T>::getT
while (m_lazyLock.test_and_set(std::memory_order_acquire));
if (!(tile = m_map.get(idx))) {
- {
+ if (!srcTileData) {
QReadLocker locker(&m_defaultPixelDataLock);
tile = new TileType(col, row, m_defaultTileData, m_mementoManager);
+ } else {
+ tile = new TileType(col, row, srcTileData, m_mementoManager);
}
TileTypeSP::ref(&tile, tile.data());
diff --git a/libs/image/tiles3/kis_tiled_data_manager.cc b/libs/image/tiles3/kis_tiled_data_manager.cc
index e7d2143..11794b6 100644
--- a/libs/image/tiles3/kis_tiled_data_manager.cc
+++ b/libs/image/tiles3/kis_tiled_data_manager.cc
@@ -376,8 +376,9 @@ void KisTiledDataManager::clear(QRect clearRect, const quint8 *clearPixel)
if (!pixelBytesAreDefault) {
- KisTileSP clearedTile = KisTileSP(new KisTile(column, row, td, m_mementoManager));
- m_hashTable->addTile(clearedTile);
+ bool newTile = false;
+ (void) m_hashTable->getTileLazy(column, row, newTile, td);
+ KIS_ASSERT(newTile);
m_extentManager.notifyTileAdded(column, row);
}
} else {
@@ -474,11 +475,11 @@ void KisTiledDataManager::bitBltImpl(KisTiledDataManager *srcDM, const QRect &re
if (srcTileExists || !defaultPixelsCoincide) {
srcTile->lockForRead();
KisTileData *td = srcTile->tileData();
- KisTileSP clonedTile = KisTileSP(new KisTile(column, row, td, m_mementoManager));
+ bool newTile = false;
+ (void) m_hashTable->getTileLazy(column, row, newTile, td);
+ KIS_ASSERT(newTile);
srcTile->unlock();
- m_hashTable->addTile(clonedTile);
-
if (!wasDeleted) {
m_extentManager.notifyTileAdded(column, row);
}
@@ -515,6 +516,10 @@ void KisTiledDataManager::bitBltImpl(KisTiledDataManager *srcDM, const QRect &re
template<bool useOldSrcData>
void KisTiledDataManager::bitBltRoughImpl(KisTiledDataManager *srcDM, const QRect &rect)
{
+ bitBltImpl<useOldSrcData>(srcDM, rect);
+ return;
+
+
if (rect.isEmpty()) return;
const qint32 pixelSize = this->pixelSize();
@@ -548,11 +553,11 @@ void KisTiledDataManager::bitBltRoughImpl(KisTiledDataManager *srcDM, const QRec
if (srcTileExists || !defaultPixelsCoincide) {
srcTile->lockForRead();
KisTileData *td = srcTile->tileData();
- KisTileSP clonedTile = KisTileSP(new KisTile(column, row, td, m_mementoManager));
+ bool newTile = false;
+ (void) m_hashTable->getTileLazy(column, row, newTile, td);
+ KIS_ASSERT(newTile);
srcTile->unlock();
- m_hashTable->addTile(clonedTile);
-
if (!wasDeleted) {
m_extentManager.notifyTileAdded(column, row);
}
diff --git a/libs/ui/tests/freehand_stroke_test.cpp b/libs/ui/tests/freehand_stroke_test.cpp
index 2dd206e..27a6a76 100644
--- a/libs/ui/tests/freehand_stroke_test.cpp
+++ b/libs/ui/tests/freehand_stroke_test.cpp
@@ -186,4 +186,12 @@ void FreehandStrokeTest::testPredefinedBrushStrokeLod()
tester.testSimpleStroke();
}
+void FreehandStrokeTest::testAutoBrushStrokeMultiple()
+{
+ FreehandStrokeTester tester("Basic_tip_default.kpp");
+ tester.setNumIterations(5);
+ tester.testSimpleStroke();
+}
+
+
KISTEST_MAIN(FreehandStrokeTest)
diff --git a/libs/ui/tests/freehand_stroke_test.h b/libs/ui/tests/freehand_stroke_test.h
index b63bb40..7d6655f 100644
--- a/libs/ui/tests/freehand_stroke_test.h
+++ b/libs/ui/tests/freehand_stroke_test.h
@@ -36,6 +36,8 @@ private Q_SLOTS:
void testAutoBrushStrokeLod();
void testPredefinedBrushStrokeLod();
+
+ void testAutoBrushStrokeMultiple();
};
#endif /* __FREEHAND_STROKE_TEST_H */
dkazakov edited the content of this paste. (Show Details)Aug 29 2018, 4:51 PM
dkazakov changed the title of this paste from untitled to Masterwork From Distant Lands.