📄 tkfont.rb
字号:
end def configinfo_core_tk4x(font, option=nil) # dummy if option "" else [['family',[]], ['size',[]], ['weight',[]], ['slant',[]], ['underline',[]], ['overstrike',[]], ['charset',[]], ['pointadjust',[]]] end end def configure_core_tk8x(font, slot, value=None) if slot.kind_of? Hash tk_call 'font', 'configure', font, *hash_kv(slot) else tk_call 'font', 'configure', font, "-#{slot}", value end end def configinfo_core_tk8x(font, option=nil) if option == 'compound' "" elsif option tk_call('font', 'configure', font, "-#{option}") else l = tk_split_simplelist(tk_call('font', 'configure', font)) r = [] while key=l.shift if key == '-compound' l.shift else r.push [key[1..-1], l.shift] end end r end end def delete_core_tk4x Tk_FontNameTBL[@id] = nil Tk_FontUseTBL.delete_if{|key,value| value == self} end def delete_core_tk8x begin tk_call('font', 'delete', @latinfont) rescue end begin tk_call('font', 'delete', @kanjifont) rescue end begin tk_call('font', 'delete', @compoundfont) rescue end Tk_FontNameTBL[@id] = nil Tk_FontUseTBL.delete_if{|key,value| value == self} end def latin_replace_core_tk4x(ltn) create_latinfont_tk4x(ltn) @compoundfont[0] = [@latinfont] if JAPANIZED_TK @fontslot['font'] = @latinfont Tk_FontUseTBL.dup.each{|w, fobj| if self == fobj begin if w.include?(';') win, tag = w.split(';') winobj = tk_tcl2ruby(win)# winobj.tagfont_configure(tag, {'font'=>@latinfont}) if winobj.kind_of? TkText tk_call(win, 'tag', 'configure', tag, '-font', @latinfont) elsif winobj.kind_of? TkCanvas tk_call(win, 'itemconfigure', tag, '-font', @latinfont) elsif winobj.kind_of? TkMenu tk_call(win, 'entryconfigure', tag, '-font', @latinfont) else raise RuntimeError, "unknown widget type" end else# tk_tcl2ruby(w).font_configure('font'=>@latinfont) tk_call(w, 'configure', '-font', @latinfont) end rescue Tk_FontUseTBL[w] = nil end end } self end def kanji_replace_core_tk4x(knj) return self unless JAPANIZED_TK create_kanjifont_tk4x(knj) @compoundfont[1] = [@kanjifont] @fontslot['kanjifont'] = @kanjifont Tk_FontUseTBL.dup.each{|w, fobj| if self == fobj begin if w.include?(';') win, tag = w.split(';') winobj = tk_tcl2ruby(win)# winobj.tagfont_configure(tag, {'kanjifont'=>@kanjifont}) if winobj.kind_of? TkText tk_call(win, 'tag', 'configure', tag, '-kanjifont', @kanjifont) elsif winobj.kind_of? TkCanvas tk_call(win, 'itemconfigure', tag, '-kanjifont', @kanjifont) elsif winobj.kind_of? TkMenu tk_call(win, 'entryconfigure', tag, '-kanjifont', @latinfont) else raise RuntimeError, "unknown widget type" end else# tk_tcl2ruby(w).font_configure('kanjifont'=>@kanjifont) tk_call(w, 'configure', '-kanjifont', @kanjifont) end rescue Tk_FontUseTBL[w] = nil end end } self end def latin_replace_core_tk8x(ltn) begin tk_call('font', 'delete', @latinfont) rescue end create_latinfont(ltn) self end def kanji_replace_core_tk8x(knj) begin tk_call('font', 'delete', @kanjifont) rescue end create_kanjifont(knj) self end def measure_core_tk4x(window, text) 0 end def measure_core_tk8x(window, text) if window number(tk_call('font', 'measure', @compoundfont, '-displayof', window, text)) else number(tk_call('font', 'measure', @compoundfont, text)) end end def metrics_core_tk4x(font, window, option=nil) # dummy if option "" else [['ascent',[]], ['descent',[]], ['linespace',[]], ['fixed',[]]] end end def metrics_core_tk8x(font, window, option=nil) if option if window number(tk_call('font', 'metrics', font, "-displayof", window, "-#{option}")) else number(tk_call('font', 'metrics', font, "-#{option}")) end else l = tk_split_list(if window tk_call('font','metrics',font,"-displayof",window) else tk_call('font','metrics',font) end) r = [] while key=l.shift r.push [key[1..-1], l.shift.to_i] end r end end ################################### # private alias ################################### case (Tk::TK_VERSION) when /^4\.*/ alias create_latinfont create_latinfont_tk4x alias create_kanjifont create_kanjifont_tk4x alias create_compoundfont create_compoundfont_tk4x alias actual_core actual_core_tk4x alias configure_core configure_core_tk4x alias configinfo_core configinfo_core_tk4x alias delete_core delete_core_tk4x alias latin_replace_core latin_replace_core_tk4x alias kanji_replace_core kanji_replace_core_tk4x alias measure_core measure_core_tk4x alias metrics_core metrics_core_tk4x when /^8\.[0123]/ alias create_latinfont create_latinfont_tk8x alias create_kanjifont create_kanjifont_tk8x alias create_compoundfont create_compoundfont_tk8x alias actual_core actual_core_tk8x alias configure_core configure_core_tk8x alias configinfo_core configinfo_core_tk8x alias delete_core delete_core_tk8x alias latin_replace_core latin_replace_core_tk8x alias kanji_replace_core kanji_replace_core_tk8x alias measure_core measure_core_tk8x alias metrics_core metrics_core_tk8x when /^8\.*/ alias create_latinfont create_latinfont_tk8x alias create_kanjifont create_kanjifont_tk8x alias create_compoundfont create_compoundfont_tk8x alias actual_core actual_core_tk8x alias configure_core configure_core_tk8x alias configinfo_core configinfo_core_tk8x alias delete_core delete_core_tk8x alias latin_replace_core latin_replace_core_tk8x alias kanji_replace_core kanji_replace_core_tk8x alias measure_core measure_core_tk8x alias metrics_core metrics_core_tk8x end ################################### public ################################### def method_missing(id, *args) name = id.id2name case args.length when 1 configure name, args[0] when 0 begin configinfo name rescue fail NameError, "undefined local variable or method `#{name}' for #{self.to_s}", error_at end else fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at end end def call_font_configure(path, *args) args += hash_kv(args.pop.update(@fontslot)) tk_call(*args) Tk_FontUseTBL[path] = self self end def used ret = [] Tk_FontUseTBL.each{|key,value| if key.include?(';') win, tag = key.split(';') winobj = tk_tcl2ruby(win) if winobj.kind_of? TkText ret.push([winobj, winobj.tagid2obj(tag)]) elsif winobj.kind_of? TkCanvas if (tagobj = TkcTag.id2obj(winobj, tag)).kind_of? TkcTag ret.push([winobj, tagobj]) elsif (tagobj = TkcItem.id2obj(tag)).kind_of? TkcItem ret.push([winobj, tagobj]) else ret.push([winobj, tag]) end elsif winobj.kind_of? TkMenu ret.push([winobj, tag]) else ret.push([win, tag]) end else ret.push(tk_tcl2ruby(key)) if value == self end } ret end def id @id end def to_eval font end def font @compoundfont end def latin_font @latinfont end def kanji_font @kanjifont end def actual(option=nil) actual_core(@compoundfont, nil, option) end def actual_displayof(window, option=nil) window = '.' unless window actual_core(@compoundfont, window, option) end def latin_actual(option=nil) actual_core(@latinfont, nil, option) end def latin_actual_displayof(window, option=nil) window = '.' unless window actual_core(@latinfont, window, option) end def kanji_actual(option=nil) #if JAPANIZED_TK if @kanjifont != "" actual_core(@kanjifont, nil, option) else actual_core_tk4x(nil, nil, option) end end def kanji_actual_displayof(window, option=nil) #if JAPANIZED_TK if @kanjifont != "" window = '.' unless window actual_core(@kanjifont, window, option) else actual_core_tk4x(nil, window, option) end end def [](slot) configinfo slot end def []=(slot, val) configure slot, val end def configure(slot, value=None) configure_core(@compoundfont, slot, value) end def configinfo(slot=nil) configinfo_core(@compoundfont, slot) end def delete delete_core end def latin_configure(slot, value=None) if JAPANIZED_TK configure_core(@latinfont, slot, value) else configure(slot, value) end end def latin_configinfo(slot=nil) if JAPANIZED_TK configinfo_core(@latinfont, slot) else configinfo(slot) end end def kanji_configure(slot, value=None) #if JAPANIZED_TK if @kanjifont != "" configure_core(@kanjifont, slot, value) configure('size'=>configinfo('size')) # to reflect new configuration else #"" configure(slot, value) end end def kanji_configinfo(slot=nil) #if JAPANIZED_TK if @kanjifont != "" configinfo_core(@kanjifont, slot) else #[] configinfo(slot) end end def replace(ltn, knj) latin_replace(ltn) kanji_replace(knj) self end def latin_replace(ltn) latin_replace_core(ltn) reset_pointadjust end def kanji_replace(knj) kanji_replace_core(knj) reset_pointadjust end def measure(text) measure_core(nil, text) end def measure_displayof(window, text) window = '.' unless window measure_core(window, text) end def metrics(option=nil) metrics_core(@compoundfont, nil, option) end def metrics_displayof(window, option=nil) window = '.' unless window metrics_core(@compoundfont, window, option) end def latin_metrics(option=nil) metrics_core(@latinfont, nil, option) end def latin_metrics_displayof(window, option=nil) window = '.' unless window metrics_core(@latinfont, window, option) end def kanji_metrics(option=nil) if JAPANIZED_TK metrics_core(@kanjifont, nil, option) else metrics_core_tk4x(nil, nil, option) end end def kanji_metrics_displayof(window, option=nil) if JAPANIZED_TK window = '.' unless window metrics_core(@kanjifont, window, option) else metrics_core_tk4x(nil, window, option) end end def reset_pointadjust begin if /^8\.*/ === Tk::TK_VERSION && JAPANIZED_TK configure('pointadjust' => latin_actual.assoc('size')[1].to_f / kanji_actual.assoc('size')[1].to_f ) end rescue end self end ################################### # public alias ################################### alias ascii_font latin_font alias create_asciifont create_latinfont alias ascii_actual latin_actual alias ascii_actual_displayof latin_actual_displayof alias ascii_configure latin_configure alias ascii_configinfo latin_configinfo alias ascii_replace latin_replace alias ascii_metrics latin_metricsendmodule TkTreatTagFont def font_configinfo @parent.tagfont_configinfo(@id) end# alias font font_configinfo def font_configure(slot) @parent.tagfont_configure(@id, slot) end def latinfont_configure(ltn, keys=nil) @parent.latintagfont_configure(@id, ltn, keys) end alias asciifont_configure latinfont_configure def kanjifont_configure(knj, keys=nil) @parent.kanjitagfont_configure(@id, ltn, keys) end def font_copy(window, wintag=nil) @parent.tagfont_copy(@id, window, wintag) end def latinfont_copy(window, wintag=nil) @parent.latintagfont_copy(@id, window, wintag) end alias asciifont_copy latinfont_copy def kanjifont_copy(window, wintag=nil) @parent.kanjitagfont_copy(@id, window, wintag) endend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -