summaryrefslogtreecommitdiff
path: root/ext/tk/lib/tk.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ext/tk/lib/tk.rb')
-rw-r--r--ext/tk/lib/tk.rb324
1 files changed, 217 insertions, 107 deletions
diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb
index 2f42160313..6bd2736fe4 100644
--- a/ext/tk/lib/tk.rb
+++ b/ext/tk/lib/tk.rb
@@ -3233,94 +3233,131 @@ module TkTreatFont
def font_configure(slot)
slot = _symbolkey2str(slot)
- if (fnt = slot.delete('font'))
+
+ if slot.key?('font')
+ fnt = slot.delete('font')
if fnt.kind_of? TkFont
return fnt.call_font_configure(self.path, self.path,'configure',slot)
else
- if fnt
- latinfont_configure(fnt)
- kanjifont_configure(fnt)
+ if fnt
+ if (slot.key?('kanjifont') ||
+ slot.key?('latinfont') ||
+ slot.key?('asciifont'))
+ fnt = TkFont.new(fnt)
+
+ lfnt = slot.delete('latinfont')
+ lfnt = slot.delete('asciifont') if slot.key?('asciifont')
+ kfnt = slot.delete('kanjifont')
+
+ fnt.latin_replace(lfnt) if lfnt
+ fnt.kanji_replace(kfnt) if kfnt
+ else
+ slot['font'] = fnt
+ tk_call(self.path, 'configure', *hash_kv(slot))
+ end
end
+ return self
end
end
- if (ltn = slot.delete('latinfont'))
- latinfont_configure(ltn) if ltn
- end
- if (ltn = slot.delete('asciifont'))
- latinfont_configure(ltn) if ltn
- end
- if (knj = slot.delete('kanjifont'))
- kanjifont_configure(knj) if knj
+
+ lfnt = slot.delete('latinfont')
+ lfnt = slot.delete('asciifont') if slot.key?('asciifont')
+ kfnt = slot.delete('kanjifont')
+
+ if lfnt && kfnt
+ return TkFont.new(lfnt, kfnt).call_font_configure(self.path, self.path,
+ 'configure', slot)
end
+ latinfont_configure(lfnt) if lfnt
+ kanjifont_configure(kfnt) if kfnt
+
tk_call(self.path, 'configure', *hash_kv(slot)) if slot != {}
self
end
def latinfont_configure(ltn, keys=nil)
- fobj = fontobj
- if ltn.kind_of? TkFont
- conf = {}
- ltn.latin_configinfo.each{|key,val| conf[key] = val}
- if keys
- fobj.latin_configure(conf.update(keys))
+ if (fobj = TkFont.used_on(self.path))
+ fobj = TkFont.new(fobj) # create a new TkFont object
+ elsif Tk::JAPANIZED_TK
+ fobj = fontobj # create a new TkFont object
+ else
+ tk_call(self.path, 'configure', '-font', ltn)
+ return self
+ end
+
+ if fobj.kind_of?(TkFont)
+ if ltn.kind_of? TkFont
+ conf = {}
+ ltn.latin_configinfo.each{|key,val| conf[key] = val}
+ if keys
+ fobj.latin_configure(conf.update(keys))
+ else
+ fobj.latin_configure(conf)
+ end
else
- fobj.latin_configure(conf)
+ fobj.latin_replace(ltn)
end
- else
- fobj.latin_replace(ltn)
end
- self
+
+ return fobj.call_font_configure(self.path, self.path, 'configure', {})
end
alias asciifont_configure latinfont_configure
def kanjifont_configure(knj, keys=nil)
- fobj = fontobj
- if knj.kind_of? TkFont
- conf = {}
- knj.kanji_configinfo.each{|key,val| conf[key] = val}
- if keys
- fobj.kanji_configure(conf.update(keys))
+ if (fobj = TkFont.used_on(self.path))
+ fobj = TkFont.new(fobj) # create a new TkFont object
+ elsif Tk::JAPANIZED_TK
+ fobj = fontobj # create a new TkFont object
+ else
+ tk_call(self.path, 'configure', '-font', knj)
+ return self
+ end
+
+ if fobj.kind_of?(TkFont)
+ if knj.kind_of? TkFont
+ conf = {}
+ knj.kanji_configinfo.each{|key,val| conf[key] = val}
+ if keys
+ fobj.kanji_configure(conf.update(keys))
+ else
+ fobj.kanji_configure(conf)
+ end
else
- fobj.kanji_configure(cond)
+ fobj.kanji_replace(knj)
end
- else
- fobj.kanji_replace(knj)
end
- self
+
+ return fobj.call_font_configure(self.path, self.path, 'configure', {})
end
def font_copy(window, tag=nil)
if tag
- window.tagfontobj(tag).configinfo.each{|key,value|
- fontobj.configure(key,value)
- }
- fontobj.replace(window.tagfontobj(tag).latin_font,
- window.tagfontobj(tag).kanji_font)
+ fnt = window.tagfontobj(tag).dup
else
- window.fontobj.configinfo.each{|key,value|
- fontobj.configure(key,value)
- }
- fontobj.replace(window.fontobj.latin_font, window.fontobj.kanji_font)
+ fnt = window.fontobj.dup
end
+ fnt.call_font_configure(self.path, self.path, 'configure', {})
self
end
def latinfont_copy(window, tag=nil)
+ fontobj.dup.call_font_configure(self.path, self.path, 'configure', {})
if tag
- fontobj.latin_replace(window.tagfontobj(tag).latin_font)
+ fontobj.latin_replace(window.tagfontobj(tag).latin_font_id)
else
- fontobj.latin_replace(window.fontobj.latin_font)
+ fontobj.latin_replace(window.fontobj.latin_font_id)
end
self
end
alias asciifont_copy latinfont_copy
def kanjifont_copy(window, tag=nil)
+ fontobj.dup.call_font_configure(self.path, self.path, 'configure', {})
if tag
- fontobj.kanji_replace(window.tagfontobj(tag).kanji_font)
+ fontobj.kanji_replace(window.tagfontobj(tag).kanji_font_id)
else
- fontobj.kanji_replace(window.fontobj.kanji_font)
+ fontobj.kanji_replace(window.fontobj.kanji_font_id)
end
self
end
@@ -3357,104 +3394,151 @@ module TkTreatItemFont
def tagfont_configure(tagOrId, slot)
pathname = __item_pathname(tagOrId)
slot = _symbolkey2str(slot)
- if (fnt = slot.delete('font'))
+
+ if slot.key?('font')
+ fnt = slot.delete('font')
if fnt.kind_of? TkFont
- return fnt.call_font_configure(pathname, self.path,
+ return fnt.call_font_configure(pathname, self.path,
__conf_cmd(0), __conf_cmd(1),
tagOrId, slot)
else
- if fnt
- latintagfont_configure(tagOrId, fnt)
- kanjitagfont_configure(tagOrId, fnt)
+ if fnt
+ if (slot.key?('kanjifont') ||
+ slot.key?('latinfont') ||
+ slot.key?('asciifont'))
+ fnt = TkFont.new(fnt)
+
+ lfnt = slot.delete('latinfont')
+ lfnt = slot.delete('asciifont') if slot.key?('asciifont')
+ kfnt = slot.delete('kanjifont')
+
+ fnt.latin_replace(lfnt) if lfnt
+ fnt.kanji_replace(kfnt) if kfnt
+ end
+
+ slot['font'] = fnt
+ tk_call(self.path, __conf_cmd(0), __conf_cmd(1),
+ tagOrId, *hash_kv(slot))
end
+ return self
end
end
- if (ltn = slot.delete('latinfont'))
- latintagfont_configure(tagOrId, ltn) if ltn
- end
- if (ltn = slot.delete('asciifont'))
- latintagfont_configure(tagOrId, ltn) if ltn
- end
- if (knj = slot.delete('kanjifont'))
- kanjitagfont_configure(tagOrId, knj) if knj
+
+ lfnt = slot.delete('latinfont')
+ lfnt = slot.delete('asciifont') if slot.key?('asciifont')
+ kfnt = slot.delete('kanjifont')
+
+ if lfnt && kfnt
+ return TkFont.new(lfnt, kfnt).call_font_configure(pathname, self.path,
+ __conf_cmd(0),
+ __conf_cmd(1),
+ tagOrId, slot)
end
+ latintagfont_configure(tagOrId, lfnt) if lfnt
+ kanjitagfont_configure(tagOrId, kfnt) if kfnt
+
tk_call(self.path, __conf_cmd(0), __conf_cmd(1),
tagOrId, *hash_kv(slot)) if slot != {}
self
end
def latintagfont_configure(tagOrId, ltn, keys=nil)
- fobj = tagfontobj(tagOrId)
- if ltn.kind_of? TkFont
- conf = {}
- ltn.latin_configinfo.each{|key,val| conf[key] = val if val != []}
- if conf == {}
- fobj.latin_replace(ltn)
- fobj.latin_configure(keys) if keys
- elsif keys
- fobj.latin_configure(conf.update(keys))
+ pathname = __item_pathname(tagOrId)
+ if (fobj = TkFont.used_on(pathname))
+ fobj = TkFont.new(fobj) # create a new TkFont object
+ elsif Tk::JAPANIZED_TK
+ fobj = tagfontobj(tagOrId) # create a new TkFont object
+ else
+ tk_call(self.path, __conf_cmd(0), __conf_cmd(1), tagOrId, '-font', ltn)
+ return self
+ end
+
+ if fobj.kind_of?(TkFont)
+ if ltn.kind_of? TkFont
+ conf = {}
+ ltn.latin_configinfo.each{|key,val| conf[key] = val}
+ if keys
+ fobj.latin_configure(conf.update(keys))
+ else
+ fobj.latin_configure(conf)
+ end
else
- fobj.latin_configure(conf)
+ fobj.latin_replace(ltn)
end
- else
- fobj.latin_replace(ltn)
end
- self
+
+ return fobj.call_font_configure(pathname, self.path,
+ __conf_cmd(0), __conf_cmd(1), tagOrId, {})
end
alias asciitagfont_configure latintagfont_configure
def kanjitagfont_configure(tagOrId, knj, keys=nil)
- fobj = tagfontobj(tagOrId)
- if knj.kind_of? TkFont
- conf = {}
- knj.kanji_configinfo.each{|key,val| conf[key] = val if val != []}
- if conf == {}
- fobj.kanji_replace(knj)
- fobj.kanji_configure(keys) if keys
- elsif keys
- fobj.kanji_configure(conf.update(keys))
+ pathname = __item_pathname(tagOrId)
+ if (fobj = TkFont.used_on(pathname))
+ fobj = TkFont.new(fobj) # create a new TkFont object
+ elsif Tk::JAPANIZED_TK
+ fobj = tagfontobj(tagOrId) # create a new TkFont object
+ else
+ tk_call(self.path, __conf_cmd(0), __conf_cmd(1), tagOrId, '-font', knj)
+ return self
+ end
+
+ if fobj.kind_of?(TkFont)
+ if knj.kind_of? TkFont
+ conf = {}
+ knj.kanji_configinfo.each{|key,val| conf[key] = val}
+ if keys
+ fobj.kanji_configure(conf.update(keys))
+ else
+ fobj.kanji_configure(conf)
+ end
else
- fobj.kanji_configure(conf)
+ fobj.kanji_replace(knj)
end
- else
- fobj.kanji_replace(knj)
end
- self
+
+ return fobj.call_font_configure(pathname, self.path,
+ __conf_cmd(0), __conf_cmd(1), tagOrId, {})
end
def tagfont_copy(tagOrId, window, wintag=nil)
+ pathname = __item_pathname(tagOrId)
if wintag
- window.tagfontobj(wintag).configinfo.each{|key,value|
- tagfontobj(tagOrId).configure(key,value)
- }
- tagfontobj(tagOrId).replace(window.tagfontobj(wintag).latin_font,
- window.tagfontobj(wintag).kanji_font)
+ fnt = window.tagfontobj(wintag).dup
else
- window.tagfont(wintag).configinfo.each{|key,value|
- tagfontobj(tagOrId).configure(key,value)
- }
- tagfontobj(tagOrId).replace(window.fontobj.latin_font,
- window.fontobj.kanji_font)
+ fnt = window.fontobj.dup
end
- self
+ fnt.call_font_configure(pathname, self.path,
+ __conf_cmd(0), __conf_cmd(1), tagOrId, {})
+ return self
end
def latintagfont_copy(tagOrId, window, wintag=nil)
+ pathname = __item_pathname(tagOrId)
+ tagfontobj(tagOrId).dup.call_font_configure(pathname, self.path,
+ __conf_cmd(0), __conf_cmd(1),
+ tagOrId, {})
if wintag
- tagfontobj(tagOrId).latin_replace(window.tagfontobj(wintag).latin_font)
+ tagfontobj(tagOrId).
+ latin_replace(window.tagfontobj(wintag).latin_font_id)
else
- tagfontobj(tagOrId).latin_replace(window.fontobj.latin_font)
+ tagfontobj(tagOrId).latin_replace(window.fontobj.latin_font_id)
end
self
end
alias asciitagfont_copy latintagfont_copy
def kanjitagfont_copy(tagOrId, window, wintag=nil)
+ pathname = __item_pathname(tagOrId)
+ tagfontobj(tagOrId).dup.call_font_configure(pathname, self.path,
+ __conf_cmd(0), __conf_cmd(1),
+ tagOrId, {})
if wintag
- tagfontobj(tagOrId).kanji_replace(window.tagfontobj(wintag).kanji_font)
+ tagfontobj(tagOrId).
+ kanji_replace(window.tagfontobj(wintag).kanji_font_id)
else
- tagfontobj(tagOrId).kanji_replace(window.fontobj.kanji_font)
+ tagfontobj(tagOrId).kanji_replace(window.fontobj.kanji_font_id)
end
self
end
@@ -3513,11 +3597,17 @@ class TkObject<TkKernel
when 'text', 'label', 'show', 'data', 'file'
tk_call path, 'cget', "-#{slot}"
when 'font', 'kanjifont'
- fnt = tk_tcl2ruby(tk_call(path, 'cget', "-#{slot}"))
+ #fnt = tk_tcl2ruby(tk_call(path, 'cget', "-#{slot}"))
+ fnt = tk_tcl2ruby(tk_call(path, 'cget', "-font"))
unless fnt.kind_of?(TkFont)
fnt = fontobj(fnt)
end
- fnt
+ if slot == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
+ # obsolete; just for compatibility
+ fnt.kanji_font
+ else
+ fnt
+ end
else
tk_tcl2ruby tk_call(path, 'cget', "-#{slot}")
end
@@ -4883,11 +4973,17 @@ class TkListbox<TkTextWin
when 'text', 'label', 'show'
tk_send('itemcget', index, "-#{key}")
when 'font', 'kanjifont'
- fnt = tk_tcl2ruby(tk_send('itemcget', index, "-#{key}"))
+ #fnt = tk_tcl2ruby(tk_send('itemcget', index, "-#{key}"))
+ fnt = tk_tcl2ruby(tk_send('itemcget', index, '-font'))
unless fnt.kind_of?(TkFont)
fnt = tagfontobj(index, fnt)
end
- fnt
+ if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
+ # obsolete; just for compatibility
+ fnt.kanji_font
+ else
+ fnt
+ end
else
tk_tcl2ruby(tk_send('itemcget', index, "-#{key}"))
end
@@ -4908,7 +5004,11 @@ class TkListbox<TkTextWin
key == 'kanjifont' || key == :kanjifont ||
key == 'latinfont' || key == :latinfont ||
key == 'asciifont' || key == :asciifont )
- tagfont_configure(index, {key=>val})
+ if val == None
+ tagfontobj(index)
+ else
+ tagfont_configure(index, {key=>val})
+ end
else
tk_call 'itemconfigure', index, "-#{key}", val
end
@@ -5065,11 +5165,17 @@ class TkMenu<TkWindow
when 'text', 'label', 'show'
tk_send 'entrycget', index, "-#{key}"
when 'font', 'kanjifont'
- fnt = tk_tcl2ruby(tk_send('entrycget', index, "-#{key}"))
+ #fnt = tk_tcl2ruby(tk_send('entrycget', index, "-#{key}"))
+ fnt = tk_tcl2ruby(tk_send('entrycget', index, '-font'))
unless fnt.kind_of?(TkFont)
fnt = tagfontobj(index, fnt)
end
- fnt
+ if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
+ # obsolete; just for compatibility
+ fnt.kanji_font
+ else
+ fnt
+ end
else
tk_tcl2ruby(tk_send('entrycget', index, "-#{key}"))
end
@@ -5090,7 +5196,11 @@ class TkMenu<TkWindow
key == 'kanjifont' || key == :kanjifont ||
key == 'latinfont' || key == :latinfont ||
key == 'asciifont' || key == :asciifont )
- tagfont_configure({key=>val})
+ if val == None
+ tagfontobj(index)
+ else
+ tagfont_configure(index, {key=>val})
+ end
else
tk_call 'entryconfigure', index, "-#{key}", val
end