autoload
metric_type : default => num_or_str
option_type : default => string
system font names
# File tk/lib/tk/font.rb, line 205 def TkFont.actual(fnt, option=nil) fnt = '{}' if fnt == '' if fnt.kind_of?(TkFont) fnt.actual(option) else actual_core(fnt, nil, option) end end
# File tk/lib/tk/font.rb, line 217 def TkFont.actual_displayof(fnt, win, option=nil) fnt = '{}' if fnt == '' if fnt.kind_of?(TkFont) fnt.actual_displayof(win, option) else win = '.' unless win actual_core(fnt, win, option) end end
# File tk/lib/tk/font.rb, line 213 def TkFont.actual_hash(fnt, option=nil) Hash[TkFont.actual(fnt, option)] end
# File tk/lib/tk/font.rb, line 226 def TkFont.actual_hash_displayof(fnt, option=nil) Hash[TkFont.actual_displayof(fnt, option)] end
# File tk/lib/tk/font.rb, line 239 def TkFont.configinfo(fnt, slot=nil) if fnt.kind_of?(TkFont) fnt.configinfo(fnt, slot) else configinfo_core(fnt, slot) end end
# File tk/lib/tk/font.rb, line 230 def TkFont.configure(fnt, slot, value=None) if fnt.kind_of?(TkFont) fnt.configure(fnt, slot, value) else configure_core(fnt, slot, value) end fnt end
# File tk/lib/tk/font.rb, line 378 def TkFont.create_copy(font) fail 'source-font must be a TkFont object' unless font.kind_of? TkFont if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY keys = {} font.configinfo.each{|key,value| keys[key] = value } TkFont.new(font.latin_font_id, font.kanji_font_id, keys) else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY TkFont.new(font.latin_font_id, font.kanji_font_id, font.configinfo) end end
# File tk/lib/tk/font.rb, line 247 def TkFont.current_configinfo(fnt, slot=nil) if fnt.kind_of?(TkFont) fnt.current_configinfo(fnt, slot) else current_configinfo_core(fnt, slot) end end
# File tk/lib/tk/font.rb, line 527 def TkFont.failsafe(font) begin if /^8\..*/ === Tk::TK_VERSION && JAPANIZED_TK tk_call('font', 'failsafe', font) end rescue end end
# File tk/lib/tk/font.rb, line 347 def TkFont.families(win=nil) case (Tk::TK_VERSION) when /^4\..*/ ['fixed'] when /^8\..*/ if win tk_split_simplelist(tk_call('font', 'families', '-displayof', win)) else tk_split_simplelist(tk_call('font', 'families')) end end end
# File tk/lib/tk/font.rb, line 389 def TkFont.get_obj(name) name = name.to_s if name =~ /^(@font[0-9]+)(|c|l|k)$/ Tk_FontNameTBL.mutex.synchronize{ Tk_FontNameTBL[$1] } else Tk_FontNameTBL.mutex.synchronize{ Tk_FontNameTBL[name] } end end
# File tk/lib/tk/font.rb, line 402 def TkFont.init_widget_font(pathname, *args) win, tag, key = pathname.split(';') key = 'font' if key == nil || key == '' path = [win, tag, key].join(';') case (Tk::TK_VERSION) when /^4\..*/ regexp = /^-(|kanji)#{key} / conf_list = tk_split_simplelist(tk_call(*args)). find_all{|prop| prop =~ regexp}. collect{|prop| tk_split_simplelist(prop)} if conf_list.size == 0 raise RuntimeError, "the widget may not support 'font' option" end args << {} ltn_key = "-#{key}" knj_key = "-kanji#{key}" ltn_info = conf_list.find{|conf| conf[0] == ltn_key} ltn = ltn_info[-1] ltn = nil if ltn == [] || ltn == "" knj_info = conf_list.find{|conf| conf[0] == knj_key} knj = knj_info[-1] knj = nil if knj == [] || knj == "" TkFont.new(ltn, knj).call_font_configure([path, key], *args) when /^8\.[0-4]/ regexp = /^-#{key} / conf_list = tk_split_simplelist(tk_call(*args)). find_all{|prop| prop =~ regexp}. collect{|prop| tk_split_simplelist(prop)} if conf_list.size == 0 raise RuntimeError, "the widget may not support 'font' option" end args << {} optkey = "-#{key}" info = conf_list.find{|conf| conf[0] == optkey} fnt = info[-1] fnt = nil if fnt == [] || fnt == "" unless fnt # create dummy # TkFont.new(nil, nil).call_font_configure([path, key], *args) dummy_fnt = TkFont.allocate dummy_fnt.instance_eval{ init_dummy_fontobj() } dummy_fnt else begin compound = tk_split_simplelist( Hash[*tk_split_simplelist(tk_call('font', 'configure', fnt))].collect{|k,v| [k[1..-1], v] }.assoc('compound')[1]) rescue compound = [] end if compound == [] if TkFont.is_system_font?(fnt) TkNamedFont.new(fnt).call_font_configure([path, key], *args) else TkFont.new(fnt).call_font_configure([path, key], *args) end else TkFont.new(compound[0], compound[1]).call_font_configure([path, key], *args) end end when /^8\.[5-9]/, /^9\..*/ regexp = /^-#{key} / conf_list = tk_split_simplelist(tk_call(*args)). find_all{|prop| prop =~ regexp}. collect{|prop| tk_split_simplelist(prop)} if conf_list.size == 0 raise RuntimeError, "the widget may not support 'font' option" end args << {} optkey = "-#{key}" info = conf_list.find{|conf| conf[0] == optkey} fnt = info[-1] fnt = nil if fnt == [] || fnt == "" unless fnt # create dummy # TkFont.new(nil, nil).call_font_configure([path, key], *args) dummy_fnt = TkFont.allocate dummy_fnt.instance_eval{ init_dummy_fontobj() } dummy_fnt else if TkFont.is_system_font?(fnt) TkNamedFont.new(fnt).call_font_configure([path, key], *args) else TkFont.new(fnt).call_font_configure([path, key], *args) end end end end
class methods
# File tk/lib/tk/font.rb, line 197 def TkFont.is_system_font?(fnt) # true --> system font which is available on the current system # false --> not system font (or unknown system font) # nil --> system font name, but not available on the current system fnt = fnt.to_s SYSTEM_FONT_NAMES.include?(fnt) && self.names.index(fnt) && true end
# File tk/lib/tk/font.rb, line 255 def TkFont.measure(fnt, text) fnt = '{}' if fnt == '' if fnt.kind_of?(TkFont) fnt.measure(text) else measure_core(fnt, nil, text) end end
# File tk/lib/tk/font.rb, line 264 def TkFont.measure_displayof(fnt, win, text) fnt = '{}' if fnt == '' if fnt.kind_of?(TkFont) fnt.measure_displayof(win, text) else win = '.' unless win measure_core(fnt, win, text) end end
# File tk/lib/tk/font.rb, line 274 def TkFont.metrics(fnt, option=nil) fnt = '{}' if fnt == '' if fnt.kind_of?(TkFont) fnt.metrics(option) else metrics_core(fnt, nil, option) end end
# File tk/lib/tk/font.rb, line 310 def TkFont.metrics_displayof(fnt, win, option=nil) fnt = '{}' if fnt == '' if fnt.kind_of?(TkFont) font.metrics_displayof(win, option=nil) else win = '.' unless win metrics_core(fnt, win, option) end end
# File tk/lib/tk/font.rb, line 282 def TkFont.metrics_hash(fnt, option=nil) if option val = TkFont.metrics(fnt, option) case TkFont::MetricsType[option.to_s] when ?n val = TkComm::num_or_str(val) when ?b val = TkComm::bool(val) else # do nothing end return val end h = Hash[TkFont.metrics(fnt)] h.keys.each{|k| case TkFont::MetricsType[k.to_s] when ?n h[k] = TkComm::num_or_str(h[k]) when ?b h[k] = TkComm::bool(h[k]) else # do nothing end } h end
# File tk/lib/tk/font.rb, line 319 def TkFont.metrics_hash_displayof(fnt, win, option=nil) if option val = TkFont.metrics_displayof(fnt, win, option) case TkFont::MetricsType[option.to_s] when ?n val = TkComm::num_or_str(val) when ?b val = TkComm::bool(val) else # do nothing end return val end h = Hash[TkFont.metrics_displayof(fnt, win, option)] h.keys.each{|k| case TkFont::MetricsType[k.to_s] when ?n h[k] = TkComm::num_or_str(h[k]) when ?b h[k] = TkComm::bool(h[k]) else # do nothing end } h end
# File tk/lib/tk/font.rb, line 361 def TkFont.names case (Tk::TK_VERSION) when /^4\..*/ r = ['fixed'] r += ['a14', 'k14'] if JAPANIZED_TK Tk_FontNameTBL.mutex.synchronize{ Tk_FontNameTBL.each_value{|obj| r.push(obj)} } #r | [] r.uniq when /^8\..*/ tk_split_simplelist(tk_call('font', 'names')) end end
# File tk/lib/tk/font.rb, line 587 def initialize(ltn=nil, knj=nil, keys=nil) ltn = '{}' if ltn == '' knj = '{}' if knj == '' Tk_FontID.mutex.synchronize{ # @id = Tk_FontID.join('') @id = Tk_FontID.join(TkCore::INTERP._ip_id_) Tk_FontID[1].succ! } Tk_FontNameTBL.mutex.synchronize{ Tk_FontNameTBL[@id] = self } # @latin_desscendant = nil # @kanji_desscendant = nil @descendant = [nil, nil] # [latin, kanji] # @latinfont = @id + 'l' # @kanjifont = @id + 'k' # @compoundfont = @id + 'c' # @fontslot = {} if knj.kind_of?(Hash) && !keys keys = knj knj = nil end # compound font check if Tk::TK_VERSION == '8.0' && JAPANIZED_TK begin compound = tk_split_simplelist(tk_call('font', 'configure', ltn, '-compound')) if knj == nil if compound != [] ltn, knj = compound end else if compound != [] ltn = compound[0] end compound = tk_split_simplelist(tk_call('font', 'configure', knj, '-compound')) if compound != [] knj = compound[1] end end rescue end end if ltn if JAPANIZED_TK && !knj if Tk::TK_VERSION =~ /^4..*/ knj = DEFAULT_KANJI_FONT_NAME else knj = ltn end end else ltn = DEFAULT_LATIN_FONT_NAME knj = DEFAULT_KANJI_FONT_NAME if JAPANIZED_TK && !knj end create_compoundfont(ltn, knj, keys) end
# File tk/lib/tk/font.rb, line 1256 def [](slot) configinfo slot end
# File tk/lib/tk/font.rb, line 1260 def []=(slot, val) configure slot, val val end
# File tk/lib/tk/font.rb, line 1189 def actual(option=nil) actual_core(@compoundfont, nil, option) end
# File tk/lib/tk/font.rb, line 1196 def actual_displayof(win, option=nil) win = '.' unless win actual_core(@compoundfont, win, option) end
# File tk/lib/tk/font.rb, line 1192 def actual_hash(option=nil) Hash[actual(option)] end
# File tk/lib/tk/font.rb, line 1200 def actual_hash_displayof(win, option=nil) Hash[actual_displayof(win, option)] end
# File tk/lib/tk/font.rb, line 1040 def call_font_configure(path, *args) if path.kind_of?(Array) # [path, optkey] win, tag = path[0].split(';') optkey = path[1].to_s else win, tag, optkey = path.split(';') end fontslot = _symbolkey2str(@fontslot) if optkey && optkey != "" ltn = fontslot.delete('font') knj = fontslot.delete('kanjifont') fontslot[optkey] = ltn if ltn fontslot["kanji#{optkey}"] = knj if knj end keys = _symbolkey2str(args.pop).update(fontslot) args.concat(hash_kv(keys)) begin tk_call(*args) rescue => e unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__ fail e end end Tk_FontUseTBL.mutex.synchronize{ Tk_FontUseTBL[[win, tag, optkey].join(';')] = self } self end
# File tk/lib/tk/font.rb, line 1270 def configinfo(slot=nil) configinfo_core(@compoundfont, slot) end
# File tk/lib/tk/font.rb, line 1265 def configure(slot, value=None) configure_core(@compoundfont, slot, value) self end
# File tk/lib/tk/font.rb, line 1274 def current_configinfo(slot=nil) current_configinfo_core(@compoundfont, slot) end
# File tk/lib/tk/font.rb, line 1012 def inspect sprintf("#<%s:%0x:%s>", self.class.inspect, self.__id__, @compoundfont) end
# File tk/lib/tk/font.rb, line 1227 def kanji_actual(option=nil) #if JAPANIZED_TK if @kanjifont == nil actual_core(@compoundfont, nil, option) # use @compoundfont elsif @kanjifont != "" actual_core(@kanjifont, nil, option) else actual_core_tk4x(nil, nil, option) end end
# File tk/lib/tk/font.rb, line 1241 def kanji_actual_displayof(win, option=nil) #if JAPANIZED_TK if @kanjifont == nil actual_core(@compoundfont, nil, option) # use @compoundfont elsif @kanjifont != "" win = '.' unless win actual_core(@kanjifont, win, option) else actual_core_tk4x(nil, win, option) end end
# File tk/lib/tk/font.rb, line 1237 def kanji_actual_hash(option=nil) Hash[kanji_actual(option)] end
# File tk/lib/tk/font.rb, line 1252 def kanji_actual_hash_displayof(win, option=nil) Hash[kanji_actual_displayof(win, option)] end
# File tk/lib/tk/font.rb, line 1316 def kanji_configinfo(slot=nil) #if JAPANIZED_TK if @kanjifont == nil configure_core(@compoundfont, slot) # use @compoundfont elsif @kanjifont != "" configinfo_core(@kanjifont, slot) else #[] configinfo(slot) end end
# File tk/lib/tk/font.rb, line 1302 def kanji_configure(slot, value=None) #if JAPANIZED_TK if @kanjifont == nil configure_core(@compoundfont, slot, value) # use @compoundfont elsif @kanjifont != "" configure_core(@kanjifont, slot, value) configure('size'=>configinfo('size')) # to reflect new configuration else #"" configure(slot, value) end self end
# File tk/lib/tk/font.rb, line 1327 def kanji_current_configinfo(slot=nil) Hash[kanji_configinfo(slot)] end
# File tk/lib/tk/font.rb, line 1172 def kanji_font # @kanjifont if @descendant[1] # [1] -> kanji @descendant[1] else @descendant[1] = DescendantFont.new(self, 'kanji') end =begin if @kanji_descendant @kanji_descendant else @kanji_descendant = DescendantFont.new(self, 'kanji') end =end end
# File tk/lib/tk/font.rb, line 1168 def kanji_font_id @kanjifont end
# File tk/lib/tk/font.rb, line 1511 def kanji_metrics(option=nil) if @latinfont == nil metrics_core(@compoundfont, nil, option) # use @compoundfont elsif JAPANIZED_TK metrics_core(@kanjifont, nil, option) else metrics_core_tk4x(nil, nil, option) end end
# File tk/lib/tk/font.rb, line 1548 def kanji_metrics_displayof(win, option=nil) win = '.' unless win if @latinfont == nil metrics_core(@compoundfont, win, option) # use @compoundfont elsif JAPANIZED_TK metrics_core(@kanjifont, win, option) else metrics_core_tk4x(nil, win, option) end end
# File tk/lib/tk/font.rb, line 1520 def kanji_metrics_hash(option=nil) if option val = kanji_metrics(option) case TkFont::MetricsType[option.to_s] when ?n val = TkComm::num_or_str(val) when ?b val = TkComm::bool(val) else # do nothing end return val end h = Hash[kanji_metrics(option)] h.keys.each{|k| case TkFont::MetricsType[k.to_s] when ?n h[k] = TkComm::num_or_str(h[k]) when ?b h[k] = TkComm::bool(h[k]) else # do nothing end } h end
# File tk/lib/tk/font.rb, line 1558 def kanji_metrics_hash_displayof(win, option=nil) if option val = kanji_metrics_displayof(win, option) case TkFont::MetricsType[option.to_s] when ?n val = TkComm::num_or_str(val) when ?b val = TkComm::bool(val) else # do nothing end return val end h = Hash[kanji_metrics_displayof(win, option)] h.keys.each{|k| case TkFont::MetricsType[k.to_s] when ?n h[k] = TkComm::num_or_str(h[k]) when ?b h[k] = TkComm::bool(h[k]) else # do nothing end } h end
# File tk/lib/tk/font.rb, line 1361 def kanji_replace(knj) return self unless @kanjifont # ignore kanji_replace_core(knj) reset_pointadjust self end
# File tk/lib/tk/font.rb, line 1204 def latin_actual(option=nil) if @latinfont == nil actual_core(@compoundfont, nil, option) # use @compoundfont else actual_core(@latinfont, nil, option) end end
# File tk/lib/tk/font.rb, line 1215 def latin_actual_displayof(win, option=nil) win = '.' unless win if @latinfont == nil actual_core(@compoundfont, win, option) # use @compoundfont else actual_core(@latinfont, win, option) end end
# File tk/lib/tk/font.rb, line 1211 def latin_actual_hash(option=nil) Hash[latin_actual(option)] end
# File tk/lib/tk/font.rb, line 1223 def latin_actual_hash_displayof(win, option=nil) Hash[latin_actual_displayof(win, option)] end
# File tk/lib/tk/font.rb, line 1291 def latin_configinfo(slot=nil) if JAPANIZED_TK configinfo_core(@latinfont, slot) else configinfo(slot) end end
# File tk/lib/tk/font.rb, line 1282 def latin_configure(slot, value=None) if JAPANIZED_TK configure_core(@latinfont, slot, value) else configure(slot, value) end self end
# File tk/lib/tk/font.rb, line 1298 def latin_current_configinfo(slot=nil) Hash[latin_configinfo(slot)] end
# File tk/lib/tk/font.rb, line 1151 def latin_font # @latinfont if @descendant[0] # [0] -> latin @descendant[0] else @descendant[0] = DescendantFont.new(self, 'latin') end =begin if @latin_descendant @latin_descendant else @latin_descendant = DescendantFont.new(self, 'latin') end =end end
# File tk/lib/tk/font.rb, line 1147 def latin_font_id @latinfont end
# File tk/lib/tk/font.rb, line 1440 def latin_metrics(option=nil) if @latinfont == nil metrics_core(@compoundfont, nil, option) # use @compoundfont else metrics_core(@latinfont, nil, option) end end
# File tk/lib/tk/font.rb, line 1475 def latin_metrics_displayof(win, option=nil) win = '.' unless win if @latinfont == nil metrics_core(@compoundfont, win, option) # use @compoundfont else metrics_core(@latinfont, win, option) end end
# File tk/lib/tk/font.rb, line 1447 def latin_metrics_hash(option=nil) if option val = latin_metrics(option) case TkFont::MetricsType[option.to_s] when ?n val = TkComm::num_or_str(val) when ?b val = TkComm::bool(val) else # do nothing end return val end h = Hash[latin_metrics(option)] h.keys.each{|k| case TkFont::MetricsType[k.to_s] when ?n h[k] = TkComm::num_or_str(h[k]) when ?b h[k] = TkComm::bool(h[k]) else # do nothing end } h end
# File tk/lib/tk/font.rb, line 1483 def latin_metrics_hash_displayof(win, option=nil) if option val = latin_metrics_displayof(win, option) case TkFont::MetricsType[option.to_s] when ?n val = TkComm::num_or_str(val) when ?b val = TkComm::bool(val) else # do nothing end return val end h = Hash[latin_metrics_displayof(win, option)] h.keys.each{|k| case TkFont::MetricsType[k.to_s] when ?n h[k] = TkComm::num_or_str(h[k]) when ?b h[k] = TkComm::bool(h[k]) else # do nothing end } h end
# File tk/lib/tk/font.rb, line 1338 def latin_replace(ltn) if @latinfont latin_replace_core(ltn) reset_pointadjust else # not compound font -> copy properties of ltn latinkeys = {} begin actual_core(ltn).each{|key,val| latinkeys[key] = val} rescue latinkeys = {} end begin tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys)) rescue # not exist? (deleted?) -> create font tk_call('font', 'create', @compoundfont, *hash_kv(latinkeys)) end end self end
# File tk/lib/tk/font.rb, line 1368 def measure(text) measure_core(@compoundfont, nil, text) end
# File tk/lib/tk/font.rb, line 1372 def measure_displayof(win, text) win = '.' unless win measure_core(@compoundfont, win, text) end
# File tk/lib/tk/font.rb, line 1016 def method_missing(id, *args) name = id.id2name case args.length when 1 if name[-1] == ?= configure name[0..-2], args[0] args[0] else configure name, args[0] self end when 0 begin configinfo name rescue super(id, *args) # fail NameError, "undefined local variable or method `#{name}' for #{self.to_s}", error_at end else super(id, *args) # fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at end end
# File tk/lib/tk/font.rb, line 1377 def metrics(option=nil) metrics_core(@compoundfont, nil, option) end
# File tk/lib/tk/font.rb, line 1408 def metrics_displayof(win, option=nil) win = '.' unless win metrics_core(@compoundfont, win, option) end
# File tk/lib/tk/font.rb, line 1380 def metrics_hash(option=nil) if option val = metrics(option) case TkFont::MetricsType[option.to_s] when ?n val = TkComm::num_or_str(val) when ?b val = TkComm::bool(val) else # do nothing end return val end h = Hash[metrics(option)] h.keys.each{|k| case TkFont::MetricsType[k.to_s] when ?n h[k] = TkComm::num_or_str(h[k]) when ?b h[k] = TkComm::bool(h[k]) else # do nothing end } h end
# File tk/lib/tk/font.rb, line 1412 def metrics_hash_displayof(win, option=nil) if option val = metrics_displayof(win, option) case TkFont::MetricsType[option.to_s] when ?n val = TkComm::num_or_str(val) when ?b val = TkComm::bool(val) else # do nothing end return val end h = Hash[metrics_displayof(win, option)] h.keys.each{|k| case TkFont::MetricsType[k.to_s] when ?n h[k] = TkComm::num_or_str(h[k]) when ?b h[k] = TkComm::bool(h[k]) else # do nothing end } h end
# File tk/lib/tk/font.rb, line 1331 def replace(ltn, knj=None) knj = ltn if knj == None latin_replace(ltn) kanji_replace(knj) self end
# File tk/lib/tk/font.rb, line 1586 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
# File tk/lib/tk/font.rb, line 1072 def used ret = [] table = nil Tk_FontUseTBL.mutex.synchronize{ table = Tk_FontUseTBL.clone # to avoid deadlock } table.each{|key,value| next unless self == value if key.include?(';') win, tag, optkey = key.split(';') winobj = tk_tcl2ruby(win) #if winobj.kind_of? TkText if winobj.kind_of?(TkText) || winobj.kind_of?(Tk::Text) if optkey ret.push([winobj, winobj.tagid2obj(tag), optkey]) else ret.push([winobj, winobj.tagid2obj(tag)]) end #elsif winobj.kind_of? TkCanvas elsif winobj.kind_of?(TkCanvas) || winobj.kind_of?(Tk::Canvas) if (tagobj = TkcTag.id2obj(winobj, tag)).kind_of? TkcTag if optkey ret.push([winobj, tagobj, optkey]) else ret.push([winobj, tagobj]) end elsif (tagobj = TkcItem.id2obj(winobj, tag)).kind_of? TkcItem if optkey ret.push([winobj, tagobj, optkey]) else ret.push([winobj, tagobj]) end else if optkey ret.push([winobj, tag, optkey]) else ret.push([winobj, tag]) end end #elsif winobj.kind_of? TkMenu elsif winobj.kind_of?(TkMenu) || winobj.kind_of?(Tk::Menu) if optkey ret.push([winobj, tag, optkey]) else ret.push([winobj, tag]) end else if optkey ret.push([win, tag, optkey]) else ret.push([win, tag]) end end else ret.push(tk_tcl2ruby(key)) end } ret end