]> granicus.if.org Git - python/commitdiff
bpo-33656: On Windows, add API call saying that tk scales for DPI (GH-7137)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 11 Jun 2018 18:39:43 +0000 (11:39 -0700)
committerGitHub <noreply@github.com>
Mon, 11 Jun 2018 18:39:43 +0000 (11:39 -0700)
On Windows 8.1+ or 10, with DPI compatibility properties of the Python binary
unchanged, and a monitor resolution greater than 96 DPI, this should
make text and lines sharper. It should otherwise have no effect.

Using a magnifier, I determined that the improvement comes from horizontal and
lines being better lined up with the monitor pixels. I checked that this call causes
no problem on any Windows buildbot, including the Win7 buildbots. Unlike most
IDLE patches, this one can be easily reverted by users by removing a few lines,
at the top of idlelib/pyshell.py.
(cherry picked from commit 800415e3df69f494afe9f95a8563ce17609fe1da)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
Doc/whatsnew/3.6.rst
Lib/idlelib/NEWS.txt
Lib/idlelib/configdialog.py
Lib/idlelib/pyshell.py
Misc/NEWS.d/next/IDLE/2018-06-10-17-59-36.bpo-33656.60ZqJS.rst [new file with mode: 0644]

index 8ffe7ef4c07004fca1dd57fa2aa253bd0c4ab8f2..2c675a5fbb44bf3d09688eb49d224c8ee6289f8c 100644 (file)
@@ -1178,6 +1178,12 @@ colors for custom themes is added to Highlights tab of Settings dialog.
 (Contributed by Cheryl Sabella and Terry Jan Reedy in :issue:`33642`,
 :issue:`33768`, and :issue:`33679`)
 
+On Windows, a new API call tells Windows that tk scales for DPI. On Windows
+8.1+ or 10, with DPI compatibility properties of the Python binary
+unchanged, and a monitor resolution greater than 96 DPI, this should
+make text and lines sharper.  It should otherwise have no effect.
+(Contributed by Terry Jan Reedy in :issue:`33656`).
+
 
 importlib
 ---------
index 33f0885c43ff7e1574b751549fae970d403064f1..5d829b6d2acb4e7094b97ff9458584a5ca914949 100644 (file)
@@ -3,6 +3,14 @@ Released on 2018-06-15?
 ======================================
 
 
+bpo-33656: On Windows, add API call saying that tk scales for DPI.
+On Windows 8.1+ or 10, with DPI compatibility properties of the Python
+binary unchanged, and a monitor resolution greater than 96 DPI, this
+should make text and lines sharper.  It should otherwise have no
+effect.  If perchance it make text worse on your monitor, you can
+disable the ctypes.OleDLL call near the top of pyshell.py and report
+the problem on python-list or idle-dev@python.org.
+
 bpo-33768: Clicking on a context line moves that line to the top
 of the editor window.
 
index 7df69d5c4d64f8bd11eeaf1479c7f1d2c81ea93b..75b917d0e193162ef8ed6d35609e63d4188bfabf 100644 (file)
@@ -373,11 +373,12 @@ class ConfigDialog(Toplevel):
                             ).grid(row=row, column=1, sticky=W, padx=7)
             elif opt['type'] == 'int':
                 Entry(entry_area, textvariable=var, validate='key',
-                      validatecommand=(self.is_int, '%P')
+                      validatecommand=(self.is_int, '%P'), width=10
                       ).grid(row=row, column=1, sticky=NSEW, padx=7)
 
-            else:
-                Entry(entry_area, textvariable=var
+            else:  # type == 'str'
+                # Limit size to fit non-expanding space with larger font.
+                Entry(entry_area, textvariable=var, width=15
                       ).grid(row=row, column=1, sticky=NSEW, padx=7)
         return
 
index ee1313161da31843236949ba09190828020e66ef..f39f15696e7e0170cee453301dc3013a68c9f95e 100755 (executable)
@@ -8,6 +8,14 @@ except ImportError:
     print("** IDLE can't import Tkinter.\n"
           "Your Python may not be configured for Tk. **", file=sys.__stderr__)
     raise SystemExit(1)
+
+if sys.platform == 'win32':
+    import ctypes
+    try:
+        ctypes.OleDLL('shcore').SetProcessDpiAwareness(1)
+    except (AttributeError, OSError):
+        pass
+
 import tkinter.messagebox as tkMessageBox
 if TkVersion < 8.5:
     root = Tk()  # otherwise create root in main
diff --git a/Misc/NEWS.d/next/IDLE/2018-06-10-17-59-36.bpo-33656.60ZqJS.rst b/Misc/NEWS.d/next/IDLE/2018-06-10-17-59-36.bpo-33656.60ZqJS.rst
new file mode 100644 (file)
index 0000000..e0c51b2
--- /dev/null
@@ -0,0 +1,4 @@
+On Windows, add API call saying that tk scales for DPI. On Windows
+8.1+ or 10, with DPI compatibility properties of the Python binary
+unchanged, and a monitor resolution greater than 96 DPI, this should
+make text and lines sharper.  It should otherwise have no effect.