[meld: 2/7] A new version of smart scrolling [issue #78].
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld: 2/7] A new version of smart scrolling [issue #78].
- Date: Sun, 3 Nov 2019 00:56:46 +0000 (UTC)
commit 5b7bda933ea0f6fbb49f988ea0d159c7878ed4e7
Author: Heikki Ketoharju <heikki ketoharju iki fi>
Date: Thu Jan 31 23:43:02 2019 +0200
A new version of smart scrolling [issue #78].
This version takes screen position into account when scrolled with mouse
and jumps to the next/previous diff outside the screen.
meld/filediff.py | 40 ++++++++++------------------------------
1 file changed, 10 insertions(+), 30 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index 044788b1..e4ef96b1 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -620,40 +620,20 @@ class FileDiff(Gtk.VBox, MeldDoc):
return
- #Count the down top and bottom 25% of the window
- topedge = text_area.y
- bottomedge = text_area.y+text_area.height
-
- topline = self.textview[pane].get_line_at_y(
- topedge).target_iter.get_line()
- bottomline = self.textview[pane].get_line_at_y(
- bottomedge).target_iter.get_line()
-
- topquarter = self.textview[pane].get_line_at_y(
- topedge + text_area.height / 4).target_iter.get_line()
- bottomquarter = self.textview[pane].get_line_at_y(
- bottomedge - text_area.height / 4).target_iter.get_line()
-
- while chunk[1] < topquarter and direction == Gdk.ScrollDirection.DOWN:
- target += 1
- if(target > self.linediffer.diff_count()):
- return
-
- chunk = self.linediffer.get_chunk(target, pane)
- if not chunk:
- return
+ halfscreen = text_area.y+text_area.height / 2
+ halfline = self.textview[pane].get_line_at_y(
+ halfscreen).target_iter.get_line()
- while chunk[1] > bottomquarter and direction == Gdk.ScrollDirection.UP:
- target -= 1
- if target < 0:
- return
+ (current, prev, next) = self.linediffer.locate_chunk(1, halfline)
- chunk = self.linediffer.get_chunk(target, pane)
- if not chunk:
- return
+ if direction == Gdk.ScrollDirection.DOWN:
+ target = next
+ else:
+ target = prev
self.go_to_chunk(target, centered=centered)
+
@Template.Callback()
def action_previous_conflict(self, *args):
self.go_to_chunk(self.cursor.prev_conflict, self.cursor.pane)
@@ -2192,4 +2172,4 @@ class FileDiff(Gtk.VBox, MeldDoc):
for mgr in self.msgarea_mgr:
if mgr.get_msg_id() == FileDiff.MSG_SYNCPOINTS:
mgr.clear()
- self.refresh_comparison()
+ self.refresh_comparison()
\ No newline at end of file
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]