Skip to content

Commit c21e1a9

Browse files
committed
Fix poor perfofmance of line selection
1 parent f0c728e commit c21e1a9

File tree

5 files changed

+16
-4
lines changed

5 files changed

+16
-4
lines changed

src/application/selection_service.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ bool SelectionService::requestSelectionEnd(size_t pattern, size_t track, size_t
112112
const Position position = { pattern, track, column, line };
113113
m_endPosition = position;
114114
juzzlin::L(TAG).info() << "New selection end: " << position.toString();
115-
emit selectionChanged();
115+
emit selectionChanged(*m_startPosition, *m_endPosition);
116116
emit isValidSelectionChanged();
117117
return true;
118118
}
@@ -122,10 +122,13 @@ bool SelectionService::requestSelectionEnd(size_t pattern, size_t track, size_t
122122

123123
void SelectionService::clear()
124124
{
125+
const auto prevStart = *m_startPosition;
126+
const auto prevEnd = *m_endPosition;
127+
125128
m_startPosition.reset();
126129
m_endPosition.reset();
127130

128-
emit selectionChanged();
131+
emit selectionCleared(prevStart, prevEnd);
129132
emit isValidSelectionChanged();
130133
}
131134

src/application/selection_service.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ class SelectionService : public QObject
4949

5050
signals:
5151
void isValidSelectionChanged();
52-
void selectionChanged();
52+
void selectionCleared(const Position & startPosition, const Position & endPosition);
53+
void selectionChanged(const Position & startPosition, const Position & endPosition);
5354

5455
private:
5556
std::optional<Position> m_startPosition;

src/unit_tests/selection_service_test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ set(NAME selection_service_test)
33
set(SRC
44
${NAME}.cpp
55
${NAME}.hpp
6+
../../application/position.hpp
67
../../application/selection_service.cpp
78
)
89
add_executable(${NAME} ${SRC} ${MOC_SRC})

src/view/qml/Editor/EditorView.qml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,9 @@ FocusScope {
212212
function _updateIndexHighlights() {
213213
_patterns.forEach(pattern => pattern.updateIndexHighlights());
214214
}
215+
function _updateSelectedLines(startPosition, endPosition) {
216+
_patterns.filter(pattern => pattern.index() === startPosition.pattern).forEach(pattern => pattern.updateSelectedLines(startPosition, endPosition));
217+
}
215218
function _addColumn(trackIndex) {
216219
_patterns.forEach(pattern => {
217220
pattern.addColumn(trackIndex);
@@ -290,7 +293,8 @@ FocusScope {
290293
});
291294
});
292295
mixerService.cleared.connect(_clearMixerSettings);
293-
selectionService.selectionChanged.connect(_updateIndexHighlights);
296+
selectionService.selectionChanged.connect(_updateSelectedLines);
297+
selectionService.selectionCleared.connect(_updateSelectedLines);
294298
}
295299
function _lineNumberColumnHeight() {
296300
return trackArea.height - Constants.trackHeaderHeight - Constants.columnHeaderHeight;

src/view/qml/Editor/Pattern.qml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ Item {
140140
track.updateIndexHighlights();
141141
});
142142
}
143+
function updateSelectedLines(startPosition, endPosition) {
144+
_tracks.filter(track => track.index() === startPosition.track).forEach(track => track.updateIndexHighlights());
145+
}
143146
function updateColumnHeaders() {
144147
_tracks.forEach(track => {
145148
track.updateColumnHeaders();

0 commit comments

Comments
 (0)