summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2017-09-21 15:15:45 (GMT)
committerGitHub <noreply@github.com>2017-09-21 15:15:45 (GMT)
commit0c4997f1919d8583353b12537a63dcbe7b9d280f (patch)
tree6eb92a2d6eb92675205e8b3fa261730a1e8246fe /Lib/idlelib
parent88d0663005d258526496d1f8ee0acb7103c69e80 (diff)
downloadcpython-0c4997f1919d8583353b12537a63dcbe7b9d280f.zip
cpython-0c4997f1919d8583353b12537a63dcbe7b9d280f.tar.gz
cpython-0c4997f1919d8583353b12537a63dcbe7b9d280f.tar.bz2
[3.6] bpo-31500: IDLE: Scale default fonts on HiDPI displays. (GH-3639) (#3686)
(cherry picked from commit a96c96f)
Diffstat (limited to 'Lib/idlelib')
-rw-r--r--Lib/idlelib/filelist.py2
-rwxr-xr-xLib/idlelib/pyshell.py4
-rw-r--r--Lib/idlelib/run.py13
3 files changed, 19 insertions, 0 deletions
diff --git a/Lib/idlelib/filelist.py b/Lib/idlelib/filelist.py
index f46ad7c..5e1a3dc 100644
--- a/Lib/idlelib/filelist.py
+++ b/Lib/idlelib/filelist.py
@@ -113,8 +113,10 @@ class FileList:
def _test():
from idlelib.editor import fixwordbreaks
+ from idlelib.run import fix_scaling
import sys
root = Tk()
+ fix_scaling(root)
fixwordbreaks(root)
root.withdraw()
flist = FileList(root)
diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py
index 47df744..168eeae 100755
--- a/Lib/idlelib/pyshell.py
+++ b/Lib/idlelib/pyshell.py
@@ -12,6 +12,8 @@ import tkinter.messagebox as tkMessageBox
if TkVersion < 8.5:
root = Tk() # otherwise create root in main
root.withdraw()
+ from idlelib.run import fix_scaling
+ fix_scaling(root)
tkMessageBox.showerror("Idle Cannot Start",
"Idle requires tcl/tk 8.5+, not %s." % TkVersion,
parent=root)
@@ -1457,6 +1459,8 @@ def main():
NoDefaultRoot()
root = Tk(className="Idle")
root.withdraw()
+ from idlelib.run import fix_scaling
+ fix_scaling(root)
# set application icon
icondir = os.path.join(os.path.dirname(__file__), 'Icons')
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index 9f6604b..39e0c11 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -184,6 +184,7 @@ def show_socket_error(err, address):
import tkinter
from tkinter.messagebox import showerror
root = tkinter.Tk()
+ fix_scaling(root)
root.withdraw()
msg = f"IDLE's subprocess can't connect to {address[0]}:{address[1]}.\n"\
f"Fatal OSError #{err.errno}: {err.strerror}.\n"\
@@ -277,6 +278,18 @@ def exit():
sys.exit(0)
+def fix_scaling(root):
+ """Scale fonts on HiDPI displays."""
+ import tkinter.font
+ scaling = float(root.tk.call('tk', 'scaling'))
+ if scaling > 1.4:
+ for name in tkinter.font.names(root):
+ font = tkinter.font.Font(root=root, name=name, exists=True)
+ size = int(font['size'])
+ if size < 0:
+ font['size'] = round(-0.75*size)
+
+
class MyRPCServer(rpc.RPCServer):
def handle_error(self, request, client_address):