summaryrefslogtreecommitdiff
path: root/src/windows.py
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2012-07-26 12:40:08 +0200
committermathieui <mathieui@mathieui.net>2012-07-26 12:40:08 +0200
commitd8623d1c509e8f90234d239e61bb0e8bd93851e6 (patch)
tree5ff12918b3bc26808f94d3ae37f0928a8d0297e1 /src/windows.py
parentc4fcf3c71af98f74497cb770c468bd860d010804 (diff)
downloadpoezio-d8623d1c509e8f90234d239e61bb0e8bd93851e6.tar.gz
poezio-d8623d1c509e8f90234d239e61bb0e8bd93851e6.tar.bz2
poezio-d8623d1c509e8f90234d239e61bb0e8bd93851e6.tar.xz
poezio-d8623d1c509e8f90234d239e61bb0e8bd93851e6.zip
Change how scrolling is done
- All functions involved return a boolean, and the core function use that value to determine if a refresh is needed or not. (avoids useless refreshs) - Scrolling with PGUP/DOWN on the roster now only does _one_ action, an not a range corresponding to the screen size (should be way faster)
Diffstat (limited to 'src/windows.py')
-rw-r--r--src/windows.py61
1 files changed, 43 insertions, 18 deletions
diff --git a/src/windows.py b/src/windows.py
index 03905d4b..a46edb1e 100644
--- a/src/windows.py
+++ b/src/windows.py
@@ -212,11 +212,14 @@ class UserList(Win):
}
def scroll_up(self):
self.pos += self.height-1
+ return True
def scroll_down(self):
+ pos = self.pos
self.pos -= self.height-1
if self.pos < 0:
self.pos = 0
+ return self.pos != pos
def draw_plus(self, y):
self.addstr(y, self.width-2, '++', to_curses_attr(get_theme().COLOR_MORE_INDICATOR))
@@ -714,16 +717,20 @@ class TextWin(Win):
self.pos = 0
def scroll_up(self, dist=14):
+ pos = self.pos
self.pos += dist
if self.pos + self.height > len(self.built_lines):
self.pos = len(self.built_lines) - self.height
if self.pos < 0:
self.pos = 0
+ return self.pos != pos
def scroll_down(self, dist=14):
+ pos = self.pos
self.pos -= dist
if self.pos <= 0:
self.pos = 0
+ return self.pos != pos
def scroll_to_separator(self):
"""
@@ -1540,35 +1547,53 @@ class RosterWin(Win):
self.roster_len = 0
self.selected_row = None
- def move_cursor_down(self):
+ def move_cursor_down(self, number=1):
"""
Return True if we scrolled, False otherwise
"""
- if self.pos < self.roster_len-1:
- self.pos += 1
+ pos = self.pos
+ if self.pos < self.roster_len-number:
+ self.pos += number
else:
- return False
- if self.pos == self.start_pos-1 + self.height-1:
- self.scroll_down()
- return True
+ self.pos = self.roster_len - 1
+ if self.pos >= self.start_pos-1 + self.height-1:
+ if number == 1:
+ self.scroll_down(8)
+ else:
+ self.scroll_down(self.pos-self.start_pos - self.height // 2)
+ return pos != self.pos
- def move_cursor_up(self):
+ def move_cursor_up(self, number=1):
"""
Return True if we scrolled, False otherwise
"""
- if self.pos > 0:
- self.pos -= 1
+ pos = self.pos
+ if self.pos-number >= 0:
+ self.pos -= number
else:
- return False
- if self.pos == self.start_pos-2:
- self.scroll_up()
- return True
+ self.pos = 0
+ if self.pos <= self.start_pos:
+ if number == 1:
+ self.scroll_up(8)
+ else:
+ self.scroll_up(self.start_pos-self.pos + self.height // 2)
+ return pos != self.pos
- def scroll_down(self):
- self.start_pos += 8
+ def scroll_down(self, number=8):
+ pos = self.start_pos
+ if self.start_pos + number <= self.roster_len-1:
+ self.start_pos += number
+ else:
+ self.start_pos = self.roster_len-1
+ return self.start_pos != pos
- def scroll_up(self):
- self.start_pos -= 8
+ def scroll_up(self, number=8):
+ pos = self.start_pos
+ if self.start_pos - number > 0:
+ self.start_pos -= number
+ else:
+ self.start_pos = 1
+ return self.start_pos != pos
def refresh(self, roster):
"""