Проблемы с перерисовкой при прокрутке с помощью ScrollGraphicalViewer - PullRequest
0 голосов
/ 30 июня 2018

Среда: 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)

Перед прокруткой большого пальца: enter image description here

После прокрутки большого пальца: enter image description here

1 Ответ

0 голосов
/ 04 июля 2018

Решено! Я использовал SimpleRootEditPart, Viewport, LayeredPane, Layer, AbstractLayout. Переключаясь на их версии Freeform, теперь я могу спокойно прокручивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...