Горизонтальный скролл в трассировке #595
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Основная проблема исходит из того, что нужно программно пересчитывать размер колонки, в которой находится трассировка. Как только пересчет произведен корректно, горизонтальный скролл автоматически начинает нормально работать.
Как логичное решение предлагается сделать пересчет размеров на событие resize. Однако, если так сделать, то скролл корректно масштабируется только если уменьшать размер окна, а когда начинаем увеличивать размер окна, то скролл исчезает.
Дебагом классов swt удалось выяснить, что внутренний диспатчер ивентов swt вызывает на каждый ресайз окна 2 события - одно нативное от layout'а, которое присваивает колонке ширину родителя т.е. всей таблицы (следовательно ширина фиксированная и скролл пропадает) и одно моё, которое я вызываю методом
pack()
на каждый ресайз окна. Причем, когда окно уменьшается, сначала вызывается нативный вызов, а затем мой, но когда окно увеличивается, происходит ровно наоборот и скролл исчезает, так как мой пересчет перекрывается неправильным нативным.Как наиболее близкое событие к ресайзу я выбрал событие отрисовки контрола. Оно уже работает как часы)