hgview
changeset 642:f3a1a23c50bf
[console] delay highlighting the source to speed up rendering
| author | Alain Leufroy <alain.leufroy@logilab.fr> |
|---|---|
| date | Sun, 11 Sep 2011 16:29:23 +0200 |
| parents | 28d208a6cc91 |
| children | 3e77eb5ecbac |
| files | hgviewlib/curses/widgets.py |
| diffstat | 1 files changed, 11 insertions(+), 3 deletions(-) [+] |
line diff
1.1 --- a/hgviewlib/curses/widgets.py Sun Sep 11 13:36:23 2011 +0200 1.2 +++ b/hgviewlib/curses/widgets.py Sun Sep 11 16:29:23 2011 +0200 1.3 @@ -19,7 +19,7 @@ 1.4 """ 1.5 A module that contains usefull widgets. 1.6 """ 1.7 -from urwid import Frame, Text, AttrWrap, ListBox 1.8 +from urwid import Frame, Text, AttrWrap, ListBox, signals 1.9 from urwid.util import is_mouse_press 1.10 1.11 try: 1.12 @@ -101,12 +101,16 @@ 1.13 1.14 It cans number lines and highlight content using pygments. 1.15 """ 1.16 + 1.17 + signals = ['highlight'] 1.18 + 1.19 def __init__(self, text, filename=None, lexer=None, numbering=False, 1.20 *args, **kwargs): 1.21 self._lexer = lexer 1.22 self.filename = filename 1.23 self.numbering = numbering 1.24 super(SourceText, self).__init__(text, *args, **kwargs) 1.25 + signals.connect_signal(self, 'highlight', self._highlight) 1.26 1.27 def get_lexer(self): 1.28 """Return the current source highlighting lexer""" 1.29 @@ -136,11 +140,15 @@ 1.30 self._lexer = lexer 1.31 if lexer == None: # No lexer found => finish 1.32 return 1.33 - self.set_text(list(lex(text, self._lexer))) 1.34 + signals.delay_emit_signal(self, 'highlight', 0.05) 1.35 + 1.36 + def _highlight(self): 1.37 + self.set_text(list(lex(self.text, self._lexer))) 1.38 + 1.39 def clear_lexer(self): 1.40 """Disable source highlighting""" 1.41 self.set_text(self.text) 1.42 - lexer = property(get_lexer, update_lexer, clear_lexer, 1.43 + lexer = property(get_lexer, update_lexer, clear_lexer, 1.44 'source highlighting lexer (require pygments)') 1.45 1.46 def render(self, size, focus=False):
