2014-10-16 2 views
0

У меня есть объект ITextViewer и из него виджет StyledText, в котором Eclipse отображает код. Я хочу, чтобы hihglight одна строка, которая определяется номером строки. Поэтому я добавил LineBackgroundListener к объекту StyledText написал следующий код:Мой код плагина замедляет Eclipse, что я могу улучшить?

private class HighlightLine implements LineBackgroundListener { 

     @Override 
     public void lineGetBackground(LineBackgroundEvent event) { 
      if (lineToHighlight != -1) { 
       int line = ((StyledText) event.widget).getLineAtOffset(event.lineOffset); 
       if (line == lineToHighlight) { 
        event.lineBackground = styledText.getSelectionBackground(); 
       } else if (line == previousLineToHighlight) { 
        event.lineBackground = styledText.getBackground(); 
       } 
       styledText.redraw(); 
       styledText.update(); 
      } 
     } 

    } 

Эта работа более или менее хорошо, но проблема в том, что очень замедляет Eclipse. Вероятно, это так, потому что он очень часто обновляет виджет, и это не оптимально. Тем не менее, я не мог придумать другой путь к нему после многих испытаний. Есть идеи?

+0

Попробуйте перерисовать и обновить только цвет изменения цвета. – WidWing

+0

@WidWing Хорошая идея, но я не нашел способ узнать, изменился ли цвет линии. – user6189

ответ

1

Вам не нужны эти (дорогие) звонки:

styledText.redraw(); 
styledText.update(); 

lineGetBackground вызывается во время операции ничья линии, так что не нужно перерисовать или обновление.

Примечание: Если StyledText имеет любые диапазоны StyleRange, они могут переопределять фон.

+0

Спасибо за подсказку. Проблема в том, что когда я удаляю метод перерисовывания, окраска строк больше не отображается. – user6189

+0

Возможно, это связано с тем, что StyleRange используется, ваши вызовы воюют с этим (и могут вести себя по-другому на других платформах). Как я уже сказал в предыдущем вопросе, если редактор использует полную систему презентаций Eclipse, вам нужно найти способ подключиться к этому. –

Смежные вопросы