archie/tk3.6/library/demos/mkStyles.tcl

129 lines
4.3 KiB
Tcl
Raw Normal View History

2024-05-27 16:13:40 +02:00
# mkStyles w
#
# Create a top-level window with a text widget that demonstrates the
# various display styles that are available in texts.
#
# Arguments:
# w - Name to use for new top-level window.
proc mkStyles {{w .styles}} {
catch {destroy $w}
toplevel $w
dpos $w
wm title $w "Text Demonstration - Display Styles"
wm iconname $w "Text Styles"
button $w.ok -text OK -command "destroy $w"
text $w.t -relief raised -bd 2 -yscrollcommand "$w.s set" -setgrid true \
-width 70 -height 28
scrollbar $w.s -relief flat -command "$w.t yview"
pack $w.ok -side bottom -fill x
pack $w.s -side right -fill y
pack $w.t -expand yes -fill both
# Set up display styles
$w.t tag configure bold -font -Adobe-Courier-Bold-O-Normal-*-120-*
$w.t tag configure big -font -Adobe-Courier-Bold-R-Normal-*-140-*
$w.t tag configure verybig -font -Adobe-Helvetica-Bold-R-Normal-*-240-*
if {[tk colormodel $w] == "color"} {
$w.t tag configure color1 -background #eed5b7
$w.t tag configure color2 -foreground red
$w.t tag configure raised -background #eed5b7 -relief raised \
-borderwidth 1
$w.t tag configure sunken -background #eed5b7 -relief sunken \
-borderwidth 1
} else {
$w.t tag configure color1 -background black -foreground white
$w.t tag configure color2 -background black -foreground white
$w.t tag configure raised -background white -relief raised \
-borderwidth 1
$w.t tag configure sunken -background white -relief sunken \
-borderwidth 1
}
$w.t tag configure bgstipple -background black -borderwidth 0 \
-bgstipple gray25
$w.t tag configure fgstipple -fgstipple gray50
$w.t tag configure underline -underline on
$w.t insert 0.0 {\
Text widgets like this one allow you to display information in a
variety of styles. Display styles are controlled using a mechanism
called }
insertWithTags $w.t tags bold
insertWithTags $w.t {. Tags are just textual names that you can apply to one
or more ranges of characters within a text widget. You can configure
tags with various display styles. If you do this, then the tagged
characters will be displayed with the styles you chose. The
available display styles are:
}
insertWithTags $w.t {
1. Font.} big
insertWithTags $w.t { You can choose any X font, }
insertWithTags $w.t large verybig
insertWithTags $w.t { or }
insertWithTags $w.t {small.
}
insertWithTags $w.t {
2. Color.} big
insertWithTags $w.t { You can change either the }
insertWithTags $w.t background color1
insertWithTags $w.t { or }
insertWithTags $w.t foreground color2
insertWithTags $w.t {
color, or }
insertWithTags $w.t both color1 color2
insertWithTags $w.t {.
}
insertWithTags $w.t {
3. Stippling.} big
insertWithTags $w.t { You can cause either the }
insertWithTags $w.t background bgstipple
insertWithTags $w.t { or }
insertWithTags $w.t foreground fgstipple
insertWithTags $w.t {
information to be drawn with a stipple fill instead of a solid fill.
}
insertWithTags $w.t {
4. Underlining.} big
insertWithTags $w.t { You can }
insertWithTags $w.t underline underline
insertWithTags $w.t { ranges of text.
}
insertWithTags $w.t {
5. 3-D effects.} big
insertWithTags $w.t { You can arrange for the background to be drawn
with a border that makes characters appear either }
insertWithTags $w.t raised raised
insertWithTags $w.t { or }
insertWithTags $w.t sunken sunken
insertWithTags $w.t {.
}
insertWithTags $w.t {
6. Yet to come.} big
insertWithTags $w.t { More display effects will be coming soon, such
as the ability to change line justification and perhaps line spacing.}
$w.t mark set insert 0.0
bind $w <Any-Enter> "focus $w.t"
}
# The procedure below inserts text into a given text widget and
# applies one or more tags to that text. The arguments are:
#
# w Window in which to insert
# text Text to insert (it's inserted at the "insert" mark)
# args One or more tags to apply to text. If this is empty
# then all tags are removed from the text.
proc insertWithTags {w text args} {
set start [$w index insert]
$w insert insert $text
foreach tag [$w tag names $start] {
$w tag remove $tag $start insert
}
foreach i $args {
$w tag add $i $start insert
}
}