]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-122392: IDLE - Fix overlapping lines in browsers (#122392) (#124975)
authorZhikang Yan <2951256653@qq.com>
Mon, 7 Oct 2024 18:52:09 +0000 (02:52 +0800)
committerGitHub <noreply@github.com>
Mon, 7 Oct 2024 18:52:09 +0000 (14:52 -0400)
Increase currently inadequate vertical spacing for the IDLE browsers (path,
module, and stack) on high-resolution monitors.
---------

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
Lib/idlelib/tree.py
Misc/NEWS.d/next/IDLE/2024-10-04-15-34-34.gh-issue-122392.V8K3w2.rst [new file with mode: 0644]

index 0726d7e23660f64e36a6a574804ff2d8a1c0d1e7..182ce7189614daf685f8bbac9f7bf45d5306f28e 100644 (file)
@@ -83,6 +83,8 @@ def wheel_event(event, widget=None):
 
 class TreeNode:
 
+    dy = 0
+
     def __init__(self, canvas, parent, item):
         self.canvas = canvas
         self.parent = parent
@@ -199,23 +201,22 @@ class TreeNode:
 
     def draw(self, x, y):
         # XXX This hard-codes too many geometry constants!
-        dy = 20
         self.x, self.y = x, y
         self.drawicon()
         self.drawtext()
         if self.state != 'expanded':
-            return y + dy
+            return y + TreeNode.dy
         # draw children
         if not self.children:
             sublist = self.item._GetSubList()
             if not sublist:
                 # _IsExpandable() was mistaken; that's allowed
-                return y+17
+                return y + TreeNode.dy
             for item in sublist:
                 child = self.__class__(self.canvas, self, item)
                 self.children.append(child)
         cx = x+20
-        cy = y + dy
+        cy = y + TreeNode.dy
         cylast = 0
         for child in self.children:
             cylast = cy
@@ -289,6 +290,11 @@ class TreeNode:
             self.label.bind("<Button-4>", lambda e: wheel_event(e, self.canvas))
             self.label.bind("<Button-5>", lambda e: wheel_event(e, self.canvas))
         self.text_id = id
+        if TreeNode.dy == 0:
+            # The first row doesn't matter what the dy is, just measure its
+            # size to get the value of the subsequent dy
+            coords = self.canvas.bbox(id)
+            TreeNode.dy = max(20, coords[3] - coords[1] - 3)
 
     def select_or_edit(self, event=None):
         if self.selected and self.item.IsEditable():
diff --git a/Misc/NEWS.d/next/IDLE/2024-10-04-15-34-34.gh-issue-122392.V8K3w2.rst b/Misc/NEWS.d/next/IDLE/2024-10-04-15-34-34.gh-issue-122392.V8K3w2.rst
new file mode 100644 (file)
index 0000000..541f621
--- /dev/null
@@ -0,0 +1,2 @@
+Increase currently inadequate vertical spacing for the IDLE browsers (path,
+module, and stack) on high-resolution monitors.