Commit 1b3c8f8e authored by Terry Jan Reedy's avatar Terry Jan Reedy

Issue 24745: Merge with 3.4

parents 75b5ab57 d87d1682
...@@ -230,13 +230,7 @@ class EditorWindow(object): ...@@ -230,13 +230,7 @@ class EditorWindow(object):
vbar['command'] = text.yview vbar['command'] = text.yview
vbar.pack(side=RIGHT, fill=Y) vbar.pack(side=RIGHT, fill=Y)
text['yscrollcommand'] = vbar.set text['yscrollcommand'] = vbar.set
fontWeight = 'normal' text['font'] = idleConf.GetFont(self.root, 'main', 'EditorWindow')
if idleConf.GetOption('main', 'EditorWindow', 'font-bold', type='bool'):
fontWeight='bold'
text.config(font=(idleConf.GetOption('main', 'EditorWindow', 'font'),
idleConf.GetOption('main', 'EditorWindow',
'font-size', type='int'),
fontWeight))
text_frame.pack(side=LEFT, fill=BOTH, expand=1) text_frame.pack(side=LEFT, fill=BOTH, expand=1)
text.pack(side=TOP, fill=BOTH, expand=1) text.pack(side=TOP, fill=BOTH, expand=1)
text.focus_set() text.focus_set()
...@@ -797,13 +791,8 @@ class EditorWindow(object): ...@@ -797,13 +791,8 @@ class EditorWindow(object):
def ResetFont(self): def ResetFont(self):
"Update the text widgets' font if it is changed" "Update the text widgets' font if it is changed"
# Called from configDialog.py # Called from configDialog.py
fontWeight='normal'
if idleConf.GetOption('main','EditorWindow','font-bold',type='bool'): self.text['font'] = idleConf.GetFont(self.root, 'main','EditorWindow')
fontWeight='bold'
self.text.config(font=(idleConf.GetOption('main','EditorWindow','font'),
idleConf.GetOption('main','EditorWindow','font-size',
type='int'),
fontWeight))
def RemoveKeybindings(self): def RemoveKeybindings(self):
"Remove the keybindings before they are changed." "Remove the keybindings before they are changed."
......
...@@ -53,7 +53,7 @@ delete-exitfunc= 1 ...@@ -53,7 +53,7 @@ delete-exitfunc= 1
[EditorWindow] [EditorWindow]
width= 80 width= 80
height= 40 height= 40
font= courier font= TkFixedFont
font-size= 10 font-size= 10
font-bold= 0 font-bold= 0
encoding= none encoding= none
......
...@@ -465,9 +465,9 @@ class ConfigDialog(Toplevel): ...@@ -465,9 +465,9 @@ class ConfigDialog(Toplevel):
return frame return frame
def AttachVarCallbacks(self): def AttachVarCallbacks(self):
self.fontSize.trace_variable('w', self.VarChanged_fontSize) self.fontSize.trace_variable('w', self.VarChanged_font)
self.fontName.trace_variable('w', self.VarChanged_fontName) self.fontName.trace_variable('w', self.VarChanged_font)
self.fontBold.trace_variable('w', self.VarChanged_fontBold) self.fontBold.trace_variable('w', self.VarChanged_font)
self.spaceNum.trace_variable('w', self.VarChanged_spaceNum) self.spaceNum.trace_variable('w', self.VarChanged_spaceNum)
self.colour.trace_variable('w', self.VarChanged_colour) self.colour.trace_variable('w', self.VarChanged_colour)
self.builtinTheme.trace_variable('w', self.VarChanged_builtinTheme) self.builtinTheme.trace_variable('w', self.VarChanged_builtinTheme)
...@@ -484,15 +484,15 @@ class ConfigDialog(Toplevel): ...@@ -484,15 +484,15 @@ class ConfigDialog(Toplevel):
self.autoSave.trace_variable('w', self.VarChanged_autoSave) self.autoSave.trace_variable('w', self.VarChanged_autoSave)
self.encoding.trace_variable('w', self.VarChanged_encoding) self.encoding.trace_variable('w', self.VarChanged_encoding)
def VarChanged_fontSize(self, *params): def VarChanged_font(self, *params):
value = self.fontSize.get() '''When one font attribute changes, save them all, as they are
self.AddChangedItem('main', 'EditorWindow', 'font-size', value) not independent from each other. In particular, when we are
overriding the default font, we need to write out everything.
def VarChanged_fontName(self, *params): '''
value = self.fontName.get() value = self.fontName.get()
self.AddChangedItem('main', 'EditorWindow', 'font', value) self.AddChangedItem('main', 'EditorWindow', 'font', value)
value = self.fontSize.get()
def VarChanged_fontBold(self, *params): self.AddChangedItem('main', 'EditorWindow', 'font-size', value)
value = self.fontBold.get() value = self.fontBold.get()
self.AddChangedItem('main', 'EditorWindow', 'font-bold', value) self.AddChangedItem('main', 'EditorWindow', 'font-bold', value)
...@@ -958,24 +958,24 @@ class ConfigDialog(Toplevel): ...@@ -958,24 +958,24 @@ class ConfigDialog(Toplevel):
fonts.sort() fonts.sort()
for font in fonts: for font in fonts:
self.listFontName.insert(END, font) self.listFontName.insert(END, font)
configuredFont = idleConf.GetOption( configuredFont = idleConf.GetFont(self, 'main', 'EditorWindow')
'main', 'EditorWindow', 'font', default='courier') fontName = configuredFont[0].lower()
lc_configuredFont = configuredFont.lower() fontSize = configuredFont[1]
self.fontName.set(lc_configuredFont) fontBold = configuredFont[2]=='bold'
self.fontName.set(fontName)
lc_fonts = [s.lower() for s in fonts] lc_fonts = [s.lower() for s in fonts]
if lc_configuredFont in lc_fonts: try:
currentFontIndex = lc_fonts.index(lc_configuredFont) currentFontIndex = lc_fonts.index(fontName)
self.listFontName.see(currentFontIndex) self.listFontName.see(currentFontIndex)
self.listFontName.select_set(currentFontIndex) self.listFontName.select_set(currentFontIndex)
self.listFontName.select_anchor(currentFontIndex) self.listFontName.select_anchor(currentFontIndex)
except ValueError:
pass
##font size dropdown ##font size dropdown
fontSize = idleConf.GetOption(
'main', 'EditorWindow', 'font-size', type='int', default='10')
self.optMenuFontSize.SetMenu(('7', '8', '9', '10', '11', '12', '13', self.optMenuFontSize.SetMenu(('7', '8', '9', '10', '11', '12', '13',
'14', '16', '18', '20', '22'), fontSize ) '14', '16', '18', '20', '22'), fontSize )
##fontWeight ##fontWeight
self.fontBold.set(idleConf.GetOption( self.fontBold.set(fontBold)
'main', 'EditorWindow', 'font-bold', default=0, type='bool'))
##font sample ##font sample
self.SetFontSample() self.SetFontSample()
......
...@@ -22,6 +22,7 @@ import os ...@@ -22,6 +22,7 @@ import os
import sys import sys
from configparser import ConfigParser from configparser import ConfigParser
from tkinter.font import Font, nametofont
class InvalidConfigType(Exception): pass class InvalidConfigType(Exception): pass
class InvalidConfigSet(Exception): pass class InvalidConfigSet(Exception): pass
...@@ -670,6 +671,32 @@ class IdleConf: ...@@ -670,6 +671,32 @@ class IdleConf:
self.GetExtraHelpSourceList('user') ) self.GetExtraHelpSourceList('user') )
return allHelpSources return allHelpSources
def GetFont(self, root, configType, section):
"""Retrieve a font from configuration (font, font-size, font-bold)
Intercept the special value 'TkFixedFont' and substitute
the actual font, factoring in some tweaks if needed for
appearance sakes.
The 'root' parameter can normally be any valid Tkinter widget.
Return a tuple (family, size, weight) suitable for passing
to tkinter.Font
"""
family = self.GetOption(configType, section, 'font', default='courier')
size = self.GetOption(configType, section, 'font-size', type='int',
default='10')
bold = self.GetOption(configType, section, 'font-bold', default=0,
type='bool')
if (family == 'TkFixedFont'):
f = Font(name='TkFixedFont', exists=True, root=root)
actualFont = Font.actual(f)
family = actualFont['family']
size = actualFont['size']
if size < 0:
size = 10 # if font in pixels, ignore actual size
bold = actualFont['weight']=='bold'
return (family, size, 'bold' if bold else 'normal')
def LoadCfgFiles(self): def LoadCfgFiles(self):
"Load all configuration files." "Load all configuration files."
for key in self.defaultCfg: for key in self.defaultCfg:
......
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