Issue #27117: Make ColorDelegator htest and turtledemo work with dark theme.

Factor out code for configuring text widget colors to a new function.
This commit is contained in:
Terry Jan Reedy 2016-05-29 01:40:30 -04:00
parent 58dd7648de
commit e8a175eaa0
3 changed files with 31 additions and 16 deletions

View File

@ -2,6 +2,7 @@ import time
import re
import keyword
import builtins
from tkinter import TkVersion
from idlelib.Delegator import Delegator
from idlelib.configHandler import idleConf
@ -32,6 +33,28 @@ def make_pat():
prog = re.compile(make_pat(), re.S)
idprog = re.compile(r"\s+(\w+)", re.S)
def color_config(text): # Called from htest, Editor, and Turtle Demo.
'''Set color opitons of Text widget.
Should be called whenever ColorDelegator is called.
'''
# Not automatic because ColorDelegator does not know 'text'.
theme = idleConf.CurrentTheme()
normal_colors = idleConf.GetHighlight(theme, 'normal')
cursor_color = idleConf.GetHighlight(theme, 'cursor', fgBg='fg')
select_colors = idleConf.GetHighlight(theme, 'hilite')
text.config(
foreground=normal_colors['foreground'],
background=normal_colors['background'],
insertbackground=cursor_color,
selectforeground=select_colors['foreground'],
selectbackground=select_colors['background'],
)
if TkVersion >= 8.5:
text.config(
inactiveselectbackground=select_colors['background'])
class ColorDelegator(Delegator):
def __init__(self):
@ -233,6 +256,7 @@ class ColorDelegator(Delegator):
for tag in self.tagdefs:
self.tag_remove(tag, "1.0", "end")
def _color_delegator(parent): # htest #
from tkinter import Toplevel, Text
from idlelib.Percolator import Percolator
@ -247,6 +271,7 @@ def _color_delegator(parent): # htest #
text.insert("insert", source)
text.focus_set()
color_config(text)
p = Percolator(text)
d = ColorDelegator()
p.insertfilter(d)

View File

@ -90,7 +90,7 @@ helpDialog = HelpDialog() # singleton instance, no longer used
class EditorWindow(object):
from idlelib.Percolator import Percolator
from idlelib.ColorDelegator import ColorDelegator
from idlelib.ColorDelegator import ColorDelegator, color_config
from idlelib.UndoDelegator import UndoDelegator
from idlelib.IOBinding import IOBinding, filesystemencoding, encoding
from idlelib import Bindings
@ -742,20 +742,7 @@ class EditorWindow(object):
# Called from self.filename_change_hook and from configDialog.py
self._rmcolorizer()
self._addcolorizer()
theme = idleConf.CurrentTheme()
normal_colors = idleConf.GetHighlight(theme, 'normal')
cursor_color = idleConf.GetHighlight(theme, 'cursor', fgBg='fg')
select_colors = idleConf.GetHighlight(theme, 'hilite')
self.text.config(
foreground=normal_colors['foreground'],
background=normal_colors['background'],
insertbackground=cursor_color,
selectforeground=select_colors['foreground'],
selectbackground=select_colors['background'],
)
if TkVersion >= 8.5:
self.text.config(
inactiveselectbackground=select_colors['background'])
EditorWindow.color_config(self.text)
IDENTCHARS = string.ascii_letters + string.digits + "_"

View File

@ -89,8 +89,8 @@ import sys
import os
from tkinter import *
from idlelib.ColorDelegator import ColorDelegator, color_config
from idlelib.Percolator import Percolator
from idlelib.ColorDelegator import ColorDelegator
from idlelib.textView import view_text
from turtledemo import __doc__ as about_turtledemo
@ -124,6 +124,8 @@ help_entries = ( # (help_label, help_doc)
('About turtle module', turtle.__doc__),
)
class DemoWindow(object):
def __init__(self, filename=None):
@ -204,6 +206,7 @@ class DemoWindow(object):
self.text_frame = text_frame = Frame(root)
self.text = text = Text(text_frame, name='text', padx=5,
wrap='none', width=45)
color_config(text)
self.vbar = vbar = Scrollbar(text_frame, name='vbar')
vbar['command'] = text.yview