Commit 800415e3 authored by Terry Jan Reedy's avatar Terry Jan Reedy Committed by GitHub

bpo-33656: On Windows, add API call saying that tk scales for DPI (GH-7137)

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.
parent 0e5f9015
......@@ -1179,6 +1179,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
---------
......
......@@ -3,6 +3,14 @@ Released on 2018-06-18?
======================================
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.
......
......@@ -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
......
......@@ -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
......
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.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment