Issue #27117: Make colorizer 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:22 -04:00
parent 82069612ec
commit 2bac3b778f
3 changed files with 31 additions and 16 deletions

View file

@ -2,6 +2,7 @@ import time
import re import re
import keyword import keyword
import builtins import builtins
from tkinter import TkVersion
from idlelib.delegator import Delegator from idlelib.delegator import Delegator
from idlelib.config import idleConf from idlelib.config import idleConf
@ -32,6 +33,28 @@ def make_pat():
prog = re.compile(make_pat(), re.S) prog = re.compile(make_pat(), re.S)
idprog = re.compile(r"\s+(\w+)", 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): class ColorDelegator(Delegator):
def __init__(self): def __init__(self):
@ -233,6 +256,7 @@ class ColorDelegator(Delegator):
for tag in self.tagdefs: for tag in self.tagdefs:
self.tag_remove(tag, "1.0", "end") self.tag_remove(tag, "1.0", "end")
def _color_delegator(parent): # htest # def _color_delegator(parent): # htest #
from tkinter import Toplevel, Text from tkinter import Toplevel, Text
from idlelib.percolator import Percolator from idlelib.percolator import Percolator
@ -247,6 +271,7 @@ def _color_delegator(parent): # htest #
text.insert("insert", source) text.insert("insert", source)
text.focus_set() text.focus_set()
color_config(text)
p = Percolator(text) p = Percolator(text)
d = ColorDelegator() d = ColorDelegator()
p.insertfilter(d) p.insertfilter(d)

View file

@ -90,7 +90,7 @@ helpDialog = HelpDialog() # singleton instance, no longer used
class EditorWindow(object): class EditorWindow(object):
from idlelib.percolator import Percolator from idlelib.percolator import Percolator
from idlelib.colorizer import ColorDelegator from idlelib.colorizer import ColorDelegator, color_config
from idlelib.undo import UndoDelegator from idlelib.undo import UndoDelegator
from idlelib.iomenu import IOBinding, filesystemencoding, encoding from idlelib.iomenu import IOBinding, filesystemencoding, encoding
from idlelib import mainmenu from idlelib import mainmenu
@ -742,20 +742,7 @@ class EditorWindow(object):
# Called from self.filename_change_hook and from configdialog.py # Called from self.filename_change_hook and from configdialog.py
self._rmcolorizer() self._rmcolorizer()
self._addcolorizer() self._addcolorizer()
theme = idleConf.CurrentTheme() EditorWindow.color_config(self.text)
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'])
IDENTCHARS = string.ascii_letters + string.digits + "_" IDENTCHARS = string.ascii_letters + string.digits + "_"

View file

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