зеркало из https://github.com/github/ruby.git
* ext/tcltklib/tcltklib.c (ip_invoke): fixed bug on passing a exception
* ext/tk/lib/{tk.rb, tkcanvas.rb, tkfont.rb, tktext.rb} : bug fix and improvement of font control git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
645d4abf42
Коммит
9388ed284d
|
@ -1,3 +1,10 @@
|
|||
Tue Sep 2 14:02:19 2003 <nagai@ai.kyutech.ac.jp>
|
||||
|
||||
* ext/tcltklib/tcltklib.c (ip_invoke): fixed bug on passing a exception
|
||||
|
||||
* ext/tk/lib/{tk.rb, tkcanvas.rb, tkfont.rb, tktext.rb} :
|
||||
bug fix and improvement of font control
|
||||
|
||||
Tue Sep 2 09:51:36 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_eval): should not handle exceptions within rescue
|
||||
|
|
|
@ -1313,7 +1313,11 @@ ip_invoke(argc, argv, obj)
|
|||
}
|
||||
if (eventloop_thread == 0 || current == eventloop_thread) {
|
||||
DUMP2("invoke from current eventloop %lx", current);
|
||||
return ip_invoke_real(argc, argv, obj);
|
||||
result = ip_invoke_real(argc, argv, obj);
|
||||
if (rb_obj_is_kind_of(result, rb_eException)) {
|
||||
rb_exc_raise(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
DUMP2("invoke from thread %lx (NOT current eventloop)", current);
|
||||
|
|
332
ext/tk/lib/tk.rb
332
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))
|
||||
else
|
||||
fobj.latin_configure(conf)
|
||||
end
|
||||
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
|
||||
fobj.latin_replace(ltn)
|
||||
tk_call(self.path, 'configure', '-font', ltn)
|
||||
return self
|
||||
end
|
||||
self
|
||||
|
||||
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_replace(ltn)
|
||||
end
|
||||
end
|
||||
|
||||
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))
|
||||
else
|
||||
fobj.kanji_configure(cond)
|
||||
end
|
||||
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
|
||||
fobj.kanji_replace(knj)
|
||||
tk_call(self.path, 'configure', '-font', knj)
|
||||
return self
|
||||
end
|
||||
self
|
||||
|
||||
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_replace(knj)
|
||||
end
|
||||
end
|
||||
|
||||
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))
|
||||
else
|
||||
fobj.latin_configure(conf)
|
||||
end
|
||||
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
|
||||
fobj.latin_replace(ltn)
|
||||
tk_call(self.path, __conf_cmd(0), __conf_cmd(1), tagOrId, '-font', ltn)
|
||||
return self
|
||||
end
|
||||
self
|
||||
|
||||
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_replace(ltn)
|
||||
end
|
||||
end
|
||||
|
||||
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))
|
||||
else
|
||||
fobj.kanji_configure(conf)
|
||||
end
|
||||
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
|
||||
fobj.kanji_replace(knj)
|
||||
tk_call(self.path, __conf_cmd(0), __conf_cmd(1), tagOrId, '-font', knj)
|
||||
return self
|
||||
end
|
||||
self
|
||||
|
||||
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_replace(knj)
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
|
|
|
@ -212,11 +212,17 @@ class TkCanvas<TkWindow
|
|||
when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
|
||||
tk_send 'itemcget', tagid(tagOrId), "-#{option}"
|
||||
when 'font', 'kanjifont'
|
||||
fnt = tk_tcl2ruby(tk_send('itemcget', tagid(tagOrId), "-#{option}"))
|
||||
#fnt = tk_tcl2ruby(tk_send('itemcget', tagid(tagOrId), "-#{option}"))
|
||||
fnt = tk_tcl2ruby(tk_send('itemcget', tagid(tagOrId), '-font'))
|
||||
unless fnt.kind_of?(TkFont)
|
||||
fnt = tagfontobj(tagid(tagOrId), fnt)
|
||||
end
|
||||
fnt
|
||||
if option.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
|
||||
# obsolete; just for compatibility
|
||||
fnt.kanji_font
|
||||
else
|
||||
fnt
|
||||
end
|
||||
else
|
||||
tk_tcl2ruby tk_send('itemcget', tagid(tagOrId), "-#{option}")
|
||||
end
|
||||
|
@ -227,7 +233,7 @@ class TkCanvas<TkWindow
|
|||
key = _symbolkey2str(key)
|
||||
if ( key['font'] || key['kanjifont'] \
|
||||
|| key['latinfont'] || key['asciifont'] )
|
||||
tagfont_configure(tagOrId, key.dup)
|
||||
tagfont_configure(tagid(tagOrId), key.dup)
|
||||
else
|
||||
tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(key)
|
||||
end
|
||||
|
@ -237,7 +243,11 @@ class TkCanvas<TkWindow
|
|||
key == 'kanjifont' || key == :kanjifont ||
|
||||
key == 'latinfont' || key == :latinfont ||
|
||||
key == 'asciifont' || key == :asciifont )
|
||||
tagfont_configure(tagid(tagOrId), {key=>value})
|
||||
if value == None
|
||||
tagfontobj(tagid(tagOrId))
|
||||
else
|
||||
tagfont_configure(tagid(tagOrId), {key=>value})
|
||||
end
|
||||
else
|
||||
tk_send 'itemconfigure', tagid(tagOrId), "-#{key}", value
|
||||
end
|
||||
|
@ -750,7 +760,7 @@ class TkcItem<TkObject
|
|||
@id = create_self(*args).to_i ;# 'canvas item id' is integer number
|
||||
CItemID_TBL[@path] = {} unless CItemID_TBL[@path]
|
||||
CItemID_TBL[@path][@id] = self
|
||||
font_configure(fontkeys) unless fontkeys.empty?
|
||||
configure(fontkeys) unless fontkeys.empty?
|
||||
|
||||
######## old version
|
||||
# if args[-1].kind_of? Hash
|
||||
|
|
|
@ -25,6 +25,7 @@ class TkFont
|
|||
when /^4\.*/
|
||||
DEFAULT_LATIN_FONT_NAME = 'a14'.freeze
|
||||
DEFAULT_KANJI_FONT_NAME = 'k14'.freeze
|
||||
|
||||
when /^8\.*/
|
||||
if JAPANIZED_TK
|
||||
begin
|
||||
|
@ -89,6 +90,8 @@ class TkFont
|
|||
ltn = 'Helvetica'
|
||||
knj = 'mincho'
|
||||
end
|
||||
|
||||
knj = ltn
|
||||
end
|
||||
|
||||
DEFAULT_LATIN_FONT_NAME = ltn.freeze
|
||||
|
@ -105,6 +108,49 @@ class TkFont
|
|||
print "default kanji font = "; p DEFAULT_KANJI_FONT_NAME
|
||||
end
|
||||
|
||||
|
||||
###################################
|
||||
class DescendantFont
|
||||
def initialize(compound, type)
|
||||
unless compound.kind_of?(TkFont)
|
||||
fail ArgumentError, "a TkFont object is expected for the 1st argument"
|
||||
end
|
||||
@compound = compound
|
||||
case type
|
||||
when 'kanji', 'latin', 'ascii'
|
||||
@type = type
|
||||
else
|
||||
fail ArgumentError, "unknown type '#{type}'"
|
||||
end
|
||||
end
|
||||
|
||||
def dup
|
||||
fail RuntimeError, "cannot dupulicate a descendant font"
|
||||
end
|
||||
def clone
|
||||
fail RuntimeError, "cannot clone a descendant font"
|
||||
end
|
||||
|
||||
def to_eval
|
||||
@compound.__send__(@type + '_font_id')
|
||||
end
|
||||
def font
|
||||
@compound.__send__(@type + '_font_id')
|
||||
end
|
||||
|
||||
def [](slot)
|
||||
@compound.__send__(@type + '_configinfo', slot)
|
||||
end
|
||||
def []=(slot, value=None)
|
||||
@compound.__send__(@type + '_configure', slot, value)
|
||||
end
|
||||
|
||||
def method_missing(id, *args)
|
||||
@compound.__send__(@type + '_' + id.id2name, *args)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
###################################
|
||||
# class methods
|
||||
###################################
|
||||
|
@ -140,7 +186,7 @@ class TkFont
|
|||
fail 'source-font must be a TkFont object' unless font.kind_of? TkFont
|
||||
keys = {}
|
||||
font.configinfo.each{|key,value| keys[key] = value }
|
||||
TkFont.new(font.latin_font, font.kanji_font, keys)
|
||||
TkFont.new(font.latin_font_id, font.kanji_font_id, keys)
|
||||
end
|
||||
|
||||
def TkFont.get_obj(name)
|
||||
|
@ -221,6 +267,8 @@ class TkFont
|
|||
end
|
||||
end
|
||||
|
||||
###################################
|
||||
# instance methods
|
||||
###################################
|
||||
private
|
||||
###################################
|
||||
|
@ -229,13 +277,16 @@ class TkFont
|
|||
Tk_FontID[1].succ!
|
||||
Tk_FontNameTBL[@id] = self
|
||||
|
||||
@latin_desscendant = nil
|
||||
@kanji_desscendant = nil
|
||||
|
||||
if knj.kind_of?(Hash) && !keys
|
||||
keys = knj
|
||||
knj = nil
|
||||
end
|
||||
|
||||
# compound font check
|
||||
if /^8\.*/ === Tk::TK_VERSION && JAPANIZED_TK
|
||||
if Tk::TK_VERSION == '8.0' && JAPANIZED_TK
|
||||
begin
|
||||
compound = tk_split_simplelist(tk_call('font', 'configure',
|
||||
ltn, '-compound'))
|
||||
|
@ -374,7 +425,7 @@ class TkFont
|
|||
|
||||
@kanjifont = '-' + _get_font_info_from_hash(finfo).join('-') + '-'
|
||||
elsif font.kind_of? TkFont
|
||||
@kanjifont = font.kanji_font
|
||||
@kanjifont = font.kanji_font_id
|
||||
else
|
||||
if font
|
||||
@kanjifont = font
|
||||
|
@ -457,7 +508,7 @@ class TkFont
|
|||
tk_call('font', 'create', @kanjifont, '-copy', array2tk_list(font))
|
||||
tk_call('font', 'configure', @kanjifont, '-charset', 'jisx0208.1983')
|
||||
elsif font.kind_of? TkFont
|
||||
tk_call('font', 'create', @kanjifont, '-copy', font.kanji_font)
|
||||
tk_call('font', 'create', @kanjifont, '-copy', font.kanji_font_id)
|
||||
elsif font
|
||||
tk_call('font', 'create', @kanjifont, '-copy', font,
|
||||
'-charset', 'jisx0208.1983')
|
||||
|
@ -474,7 +525,7 @@ class TkFont
|
|||
if font.kind_of? Array
|
||||
actual_core(array2tk_list(font)).each{|key,val| keys[key] = val}
|
||||
elsif font.kind_of? TkFont
|
||||
actual_core(font.kanji_font).each{|key,val| keys[key] = val}
|
||||
actual_core(font.kanji_font_id).each{|key,val| keys[key] = val}
|
||||
elsif font
|
||||
actual_core(font).each{|key,val| keys[key] = val}
|
||||
end
|
||||
|
@ -495,6 +546,22 @@ class TkFont
|
|||
|
||||
@compoundfont = @id + 'c'
|
||||
if JAPANIZED_TK
|
||||
unless keys
|
||||
keys = {}
|
||||
else
|
||||
keys = keys.dup
|
||||
end
|
||||
if (tk_call('font', 'configure', @latinfont, '-underline') == '1' &&
|
||||
tk_call('font', 'configure', @kanjifont, '-underline') == '1' &&
|
||||
!keys.key?('underline'))
|
||||
keys['underline'] = true
|
||||
end
|
||||
if (tk_call('font', 'configure', @latinfont, '-overstrike') == '1' &&
|
||||
tk_call('font', 'configure', @kanjifont, '-overstrike') == '1' &&
|
||||
!keys.key?('overstrike'))
|
||||
keys['overstrike'] = true
|
||||
end
|
||||
|
||||
@fontslot = {'font'=>@compoundfont}
|
||||
begin
|
||||
tk_call('font', 'create', @compoundfont,
|
||||
|
@ -806,7 +873,8 @@ class TkFont
|
|||
begin
|
||||
fnt_bup = tk_call('font', 'create', '@font_tmp', '-copy', @latinfont)
|
||||
rescue
|
||||
fnt_bup = ''
|
||||
#fnt_bup = ''
|
||||
fnt_bup = DEFAULT_LATIN_FONT_NAME
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -822,16 +890,29 @@ class TkFont
|
|||
begin
|
||||
tk_call('font', 'create', @compoundfont,
|
||||
'-compound', [@latinfont, @kanjifont], *hash_kv(keys))
|
||||
=begin
|
||||
latinkeys = {}
|
||||
begin
|
||||
actual_core(@latinfont).each{|key,val| latinkeys[key] = val}
|
||||
rescue
|
||||
latinkeys {}
|
||||
end
|
||||
if latinkeys != {}
|
||||
tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys))
|
||||
end
|
||||
=end
|
||||
rescue RuntimeError => e
|
||||
tk_call('font', 'delete', @latinfont)
|
||||
if fnt_bup != ''
|
||||
if fnt_bup && fnt_bup != ''
|
||||
tk_call('font', 'create', @latinfont, '-copy', fnt_bup)
|
||||
tk_call('font', 'create', @compoundfont,
|
||||
'-compound', [@latinfont, @kanjifont], *hash_kv(keys))
|
||||
tk_call('font', 'delete', fnt_bup)
|
||||
else
|
||||
fail e
|
||||
end
|
||||
fail e
|
||||
end
|
||||
|
||||
else
|
||||
latinkeys = {}
|
||||
begin
|
||||
|
@ -855,7 +936,8 @@ class TkFont
|
|||
begin
|
||||
fnt_bup = tk_call('font', 'create', '@font_tmp', '-copy', @kanjifont)
|
||||
rescue
|
||||
fnt_bup = ''
|
||||
#fnt_bup = ''
|
||||
fnt_bup = DEFAULT_KANJI_FONT_NAME
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -873,13 +955,14 @@ class TkFont
|
|||
'-compound', [@latinfont, @kanjifont], *hash_kv(keys))
|
||||
rescue RuntimeError => e
|
||||
tk_call('font', 'delete', @kanjifont)
|
||||
if fnt_bup != ''
|
||||
if fnt_bup && fnt_bup != ''
|
||||
tk_call('font', 'create', @kanjifont, '-copy', fnt_bup)
|
||||
tk_call('font', 'create', @compoundfont,
|
||||
'-compound', [@latinfont, @kanjifont], *hash_kv(keys))
|
||||
tk_call('font', 'delete', fnt_bup)
|
||||
else
|
||||
fail e
|
||||
end
|
||||
fail e
|
||||
end
|
||||
end
|
||||
self
|
||||
|
@ -1039,15 +1122,36 @@ class TkFont
|
|||
def font
|
||||
@compoundfont
|
||||
end
|
||||
alias font_id font
|
||||
|
||||
def latin_font
|
||||
def latin_font_id
|
||||
@latinfont
|
||||
end
|
||||
|
||||
def kanji_font
|
||||
def latin_font
|
||||
# @latinfont
|
||||
if @latin_descendant
|
||||
@latin_descendant
|
||||
else
|
||||
@latin_descendant = DescendantFont.new(self, 'latin')
|
||||
end
|
||||
end
|
||||
alias latinfont latin_font
|
||||
|
||||
def kanji_font_id
|
||||
@kanjifont
|
||||
end
|
||||
|
||||
def kanji_font
|
||||
# @kanjifont
|
||||
if @kanji_descendant
|
||||
@kanji_descendant
|
||||
else
|
||||
@kanji_descendant = DescendantFont.new(self, 'kanji')
|
||||
end
|
||||
end
|
||||
alias kanjifont kanji_font
|
||||
|
||||
def actual(option=nil)
|
||||
actual_core(@compoundfont, nil, option)
|
||||
end
|
||||
|
@ -1222,6 +1326,7 @@ class TkFont
|
|||
# public alias
|
||||
###################################
|
||||
alias ascii_font latin_font
|
||||
alias asciifont latinfont
|
||||
alias create_asciifont create_latinfont
|
||||
alias ascii_actual latin_actual
|
||||
alias ascii_actual_displayof latin_actual_displayof
|
||||
|
@ -1230,6 +1335,19 @@ class TkFont
|
|||
alias ascii_replace latin_replace
|
||||
alias ascii_metrics latin_metrics
|
||||
|
||||
###################################
|
||||
def dup
|
||||
src = self
|
||||
obj = super()
|
||||
obj.instance_eval{ initialize(src) }
|
||||
obj
|
||||
end
|
||||
def clone
|
||||
src = self
|
||||
obj = super()
|
||||
obj.instance_eval{ initialize(src) }
|
||||
obj
|
||||
end
|
||||
end
|
||||
|
||||
module TkTreatTagFont
|
||||
|
|
|
@ -331,11 +331,17 @@ class TkText<TkTextWin
|
|||
when 'text', 'label', 'show', 'data', 'file'
|
||||
tk_call(@path, 'tag', 'cget', tag, "-#{key}")
|
||||
when 'font', 'kanjifont'
|
||||
fnt = tk_tcl2ruby(tk_send('tag', 'cget', tag, "-#{key}"))
|
||||
#fnt = tk_tcl2ruby(tk_send('tag', 'cget', tag, "-#{key}"))
|
||||
fnt = tk_tcl2ruby(tk_send('tag', 'cget', tag, '-font'))
|
||||
unless fnt.kind_of?(TkFont)
|
||||
fnt = tagfontobj(tag, 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_call(@path, 'tag', 'cget', tag, "-#{key}"))
|
||||
end
|
||||
|
@ -356,7 +362,11 @@ class TkText<TkTextWin
|
|||
key == 'kanjifont' || key == :kanjifont ||
|
||||
key == 'latinfont' || key == :latinfont ||
|
||||
key == 'asciifont' || key == :asciifont
|
||||
tagfont_configure(tag, {key=>val})
|
||||
if val == None
|
||||
tagfontobj(tag)
|
||||
else
|
||||
tagfont_configure(tag, {key=>val})
|
||||
end
|
||||
else
|
||||
tk_send 'tag', 'configure', tag, "-#{key}", val
|
||||
end
|
||||
|
@ -450,11 +460,17 @@ class TkText<TkTextWin
|
|||
when 'text', 'label', 'show', 'data', 'file'
|
||||
tk_send('window', 'cget', index, "-#{slot}")
|
||||
when 'font', 'kanjifont'
|
||||
fnt = tk_tcl2ruby(tk_send('window', 'cget', index, "-#{slot}"))
|
||||
#fnt = tk_tcl2ruby(tk_send('window', 'cget', index, "-#{slot}"))
|
||||
fnt = tk_tcl2ruby(tk_send('window', 'cget', index, '-font'))
|
||||
unless fnt.kind_of?(TkFont)
|
||||
fnt = tagfontobj(index, fnt)
|
||||
end
|
||||
fnt
|
||||
if slot.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
|
||||
# obsolete; just for compatibility
|
||||
fnt.kanji_font
|
||||
else
|
||||
fnt
|
||||
end
|
||||
else
|
||||
tk_tcl2ruby(tk_send('window', 'cget', index, "-#{slot}"))
|
||||
end
|
||||
|
@ -878,11 +894,17 @@ class TkTextTag<TkObject
|
|||
when 'text', 'label', 'show', 'data', 'file'
|
||||
tk_call @t.path, 'tag', 'cget', @id, "-#{key}"
|
||||
when 'font', 'kanjifont'
|
||||
fnt = tk_tcl2ruby(tk_call(@t.path, 'tag', 'cget', @id, "-#{key}"))
|
||||
#fnt = tk_tcl2ruby(tk_call(@t.path, 'tag', 'cget', @id, "-#{key}"))
|
||||
fnt = tk_tcl2ruby(tk_call(@t.path, 'tag', 'cget', @id, '-font'))
|
||||
unless fnt.kind_of?(TkFont)
|
||||
fnt = tagfontobj(@id, 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_call(@t.path, 'tag', 'cget', @id, "-#{key}"))
|
||||
end
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
|
||||
require 'tk'
|
||||
|
||||
unless /^8\.[1-9]/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK
|
||||
require 'tkencoding'
|
||||
end
|
||||
#unless /^8\.[1-9]/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK
|
||||
# require 'tkencoding'
|
||||
#end
|
||||
|
||||
require 'tkafter'
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ $ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200,
|
|||
'text'=>"これはキャンバスwidgetのテキスト機能をデモするための文字列です。マウスを持っていき、クリックして入力できます。選択してコントロール-Dで消去することもできます。",
|
||||
'width'=>440, 'anchor'=>'n',
|
||||
'font'=>'-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*',
|
||||
'kanjifont'=>'-*--24-*-jisx0208.1983-0',
|
||||
'kanjifont'=>'-*-r-*--24-*-jisx0208.1983-0',
|
||||
'justify'=>'left') )
|
||||
|
||||
$ctag_text.bind('1', proc{|x,y| textB1Press $ctext_canvas,x,y}, "%x %y")
|
||||
|
|
|
@ -18,12 +18,12 @@ $tk_platform = TkVarAccess.new('tcl_platform')
|
|||
|
||||
# フォント肋年
|
||||
$font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', nil)
|
||||
knjfont = '-*--16-*-jisx0208.1983-0'
|
||||
knjfont = '-*-r-*--16-*-jisx0208.1983-0'
|
||||
$kanji_font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*',
|
||||
knjfont)
|
||||
TkOption.add('*kanjiFont', knjfont, 'startupFile')
|
||||
$msg_kanji_font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*',
|
||||
'-*--24-*-jisx0208.1983-0')
|
||||
'-*-r-*--24-*-jisx0208.1983-0')
|
||||
#######
|
||||
#case($tk_version)
|
||||
#when /^4.*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче