Среда: Eclipse Neon на Win10.
У меня есть старое приложение GEF / SWT RCP, которое использует ScrollingGraphicalViewer для обработки прокрутки. При прокрутке исходное изображение, которое должно быть сохранено в прокрутке, перемещается правильно, но новая область не рисуется. Иногда , сворачивание и восстановление окна приложения заставляет его правильно перерисовать. хотя в другое время изображение будет отображаться так, как если бы оно не было прокручено, но полоса прокрутки показывает, что оно имеет.
Это происходит как с горизонтальной, так и с вертикальной прокруткой. Я тестирую только с прокруткой большого пальца, потому что это один ход, а не непрерывная операция с большим количеством перерисовок.
Вот пример кода. Это метод paintFigure () из одной из моих фигур, который имеет полную ширину.
protected void paintFigure (Graphics graphics)
{
if (log.isTraceEnabled ()) {
final Rectangle dummy = new Rectangle ();
log.trace (String.format ("Paint rung %s, bounds %s, clip %s", rungId.getText (), getBounds (), graphics.getClip (dummy))); //$NON-NLS-1$
}
super.paintFigure (graphics);
// Draw the vertical bars
Rectangle r = getBounds ().getCopy ();
r.width -= LINE_WIDTH;
r.width += 1; // Coming up 1 short for some reason
r.shrink (MARGIN, 0);
if (log.isTraceEnabled ()) {
log.trace (String.format ("Adjusted bounds %s", r)); //$NON-NLS-1$
}
final int connectionY = r.y + connectionYOffset;
int connectionXStart = instructionsFigure.getBounds ().right ();
int connectionXStop = r.right ();
graphics.drawLine (connectionXStart, connectionY, connectionXStop, connectionY);
connectionXStart = r.x-4;
connectionXStop = instructionsFigure.getBounds ().x;
graphics.drawLine (connectionXStart, connectionY, connectionXStop, connectionY);
graphics.setLineWidth (LINE_WIDTH);
graphics.drawLine (r.getTopRight (), r.getBottomRight ());
graphics.drawLine (r.x - 4, r.y, r.x - 4, r.y+r.height);
}
Вот некоторые результаты трассировки. Обратите внимание, что LadderLayer является родительской фигурой для Rung.
Initial display:
TRACE 2018-06-30 10:08:56,289 10099 com.bas.basplc.ui.editors.ladder_editor.figures.LadderLayer [main] Paint ladder layer, bounds Rectangle(0.0, 0.0, 1200.0, 2190.0), clip Rectangle(0.0, 0.0, 1070.0, 673.0)
TRACE 2018-06-30 10:08:56,289 10099 com.bas.basplc.ui.editors.ladder_editor.figures.RungFigure [main] Paint rung 0, bounds Rectangle(3.0, 3.0, 1200.0, 384.0), clip Rectangle(3.0, 3.0, 1067.0, 384.0)
TRACE 2018-06-30 10:08:56,290 10100 com.bas.basplc.ui.editors.ladder_editor.figures.RungFigure [main] Adjusted bounds Rectangle(63.0, 3.0, 1078.0, 384.0)
Not sure what is being drawn here:
TRACE 2018-06-30 10:08:56,370 10180 com.bas.basplc.ui.editors.ladder_editor.figures.LadderLayer [main] Paint ladder layer, bounds Rectangle(0.0, 0.0, 1200.0, 2190.0), clip Rectangle(1047.0, 15.0, 23.0, 658.0)
TRACE 2018-06-30 10:08:56,370 10180 com.bas.basplc.ui.editors.ladder_editor.figures.RungFigure [main] Paint rung 0, bounds Rectangle(3.0, 3.0, 1200.0, 384.0), clip Rectangle(1047.0, 15.0, 23.0, 372.0)
TRACE 2018-06-30 10:08:56,370 10180 com.bas.basplc.ui.editors.ladder_editor.figures.RungFigure [main] Adjusted bounds Rectangle(63.0, 3.0, 1078.0, 384.0)
Thumb scroll right:
TRACE 2018-06-30 10:10:16,244 90054 com.bas.basplc.ui.editors.ladder_editor.figures.LadderLayer [main] Paint ladder layer, bounds Rectangle(0.0, 0.0, 1200.0, 2190.0), clip Rectangle(940.0, 0.0, 130.0, 673.0)
TRACE 2018-06-30 10:10:16,245 90055 com.bas.basplc.ui.editors.ladder_editor.figures.RungFigure [main] Paint rung 0, bounds Rectangle(3.0, 3.0, 1200.0, 384.0), clip Rectangle(940.0, 3.0, 130.0, 384.0)
TRACE 2018-06-30 10:10:16,245 90055 com.bas.basplc.ui.editors.ladder_editor.figures.RungFigure [main] Adjusted bounds Rectangle(63.0, 3.0, 1078.0, 384.0)
Redraw after minimize/restore:
TRACE 2018-06-30 10:11:56,406 190216 com.bas.basplc.ui.editors.ladder_editor.figures.LadderLayer [main] Paint ladder layer, bounds Rectangle(0.0, 0.0, 1200.0, 2190.0), clip Rectangle(0.0, 0.0, 1070.0, 673.0)
TRACE 2018-06-30 10:11:56,406 190216 com.bas.basplc.ui.editors.ladder_editor.figures.RungFigure [main] Paint rung 0, bounds Rectangle(3.0, 3.0, 1200.0, 384.0), clip Rectangle(3.0, 3.0, 1067.0, 384.0)
TRACE 2018-06-30 10:11:56,407 190217 com.bas.basplc.ui.editors.ladder_editor.figures.RungFigure [main] Adjusted bounds Rectangle(63.0, 3.0, 1078.0, 384.0)
Перед прокруткой большого пальца:
После прокрутки большого пальца: