Skip to content

Commit 1ebc6a6

Browse files
committed
Fix crash when resizing after track deletion
1 parent 17a6ba8 commit 1ebc6a6

4 files changed

Lines changed: 24 additions & 10 deletions

File tree

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ New features:
1414

1515
Bug fixes:
1616

17+
* Fix crash when resizing after track deletion
18+
1719
Other:
1820

1921
1.8.1

src/application/service/editor_service.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,12 @@ void EditorService::redo()
394394

395395
quint64 EditorService::columnCount(quint64 trackIndex) const
396396
{
397-
return m_song->columnCount(trackIndex);
397+
try {
398+
return m_song->columnCount(trackIndex);
399+
} catch (...) {
400+
juzzlin::L(TAG).warning() << "Cannot get column count for track, index=" << trackIndex;
401+
return 0;
402+
}
398403
}
399404

400405
quint64 EditorService::lineCount(quint64 patternId) const
@@ -878,7 +883,7 @@ bool EditorService::isColumnVisible(quint64 track, quint64 column) const
878883

879884
bool EditorService::isTrackVisible(quint64 track) const
880885
{
881-
for (quint64 column = 0; column < m_song->columnCount(track); column++) {
886+
for (quint64 column = 0; column < columnCount(track); column++) {
882887
if (isColumnVisible(track, column)) {
883888
return true;
884889
}
@@ -2253,16 +2258,21 @@ void EditorService::requestColumnRight(bool isSelecting)
22532258

22542259
quint64 EditorService::totalUnitCount() const
22552260
{
2256-
quint64 columnCount = 0;
2261+
quint64 totalColumnCount = 0;
22572262
for (auto && trackIndex : m_song->trackIndices()) {
2258-
columnCount += m_song->columnCount(trackIndex);
2263+
totalColumnCount += columnCount(trackIndex);
22592264
}
2260-
return columnCount;
2265+
return totalColumnCount;
22612266
}
22622267

22632268
quint64 EditorService::trackWidthInUnits(quint64 trackIndex) const
22642269
{
2265-
return m_song->columnCount(trackIndex);
2270+
try {
2271+
return m_song->columnCount(trackIndex);
2272+
} catch (...) {
2273+
juzzlin::L(TAG).warning() << "Cannot get width for track, index=" << trackIndex;
2274+
return 0;
2275+
}
22662276
}
22672277

22682278
quint64 EditorService::columnPositionInUnits(quint64 trackIndex, quint64 columnIndex) const
@@ -2275,7 +2285,7 @@ quint64 EditorService::trackPositionInUnits(quint64 trackIndex) const
22752285
quint64 unitPosition = 0;
22762286
const auto trackPosition = m_song->trackPositionByIndex(trackIndex);
22772287
for (quint64 track = 0; track < trackPosition; track++) {
2278-
unitPosition += m_song->columnCount(m_song->trackIndexByPosition(track).value_or(0));
2288+
unitPosition += columnCount(m_song->trackIndexByPosition(track).value_or(0));
22792289
}
22802290
return unitPosition;
22812291
}
@@ -2290,7 +2300,7 @@ int EditorService::onScreenTrackPositionInUnits(quint64 trackIndex) const
22902300
int unitPosition = -static_cast<int>(m_state.horizontalScrollPosition);
22912301
const auto trackPosition = m_song->trackPositionByIndex(trackIndex);
22922302
for (quint64 track = 0; track < trackPosition; track++) {
2293-
unitPosition += m_song->columnCount(m_song->trackIndexByPosition(track).value_or(0));
2303+
unitPosition += columnCount(m_song->trackIndexByPosition(track).value_or(0));
22942304
}
22952305
return unitPosition;
22962306
}

src/domain/pattern.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ void Pattern::deleteTrack(size_t trackIndex)
296296
juzzlin::L(TAG).debug() << "Deleting track at position " << *track;
297297
m_trackOrder.erase(m_trackOrder.begin() + static_cast<long>(*track));
298298
} else {
299-
juzzlin::L(TAG).error() << "Invalid track position: " << *track;
299+
juzzlin::L(TAG).error() << "Invalid track index: " << trackIndex;
300300
}
301301
}
302302

src/view/qml/Editor/EditorView.qml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,9 @@ FocusScope {
273273
function _updateAllTrackDimensions() {
274274
uiLogger.debug(_tag, `Updating track dimensions of all patterns..`);
275275
_patterns.forEach(pattern => {
276-
pattern.updateTrackDimensions(trackArea.width, trackArea.height);
276+
if (!pattern._dirty) {
277+
pattern.updateTrackDimensions(trackArea.width, trackArea.height);
278+
}
277279
});
278280
}
279281
function _updateCurrentTrackData() {

0 commit comments

Comments
 (0)