1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/tk/lib/tkfont.rb
nagai d8b02b5096 tk.rb :
* small bug fix
 * rename 'no_create' option to 'without_creating'
 * add TkWindow#pack_in,  TkWindow#grid_in,  TkWindow#place_in
 * add TkWindow#bind_class and TkWindow#database_class
   If defined specific_class (@db_class), bind_class returns @db_class.
   In other case, bind_class returns TkWinow#class().
   It is useful for binding.
   TkWindow#database_class is defined for querying the option database.
   It's same to TkWinfo.classname(self).
 * add TkBindTag.new_by_name and TkDatabaseClass for binding to database class
 * check varname whether already exsist or not. (TkVarAccess.new)
 * TkTextWin#bbox returns an array of four numbers
 * autoload TkDialog2, TkWarning2
 * scan event callback arguments and convert to proper type
 * TkBindTag.new accepts a block ( TkBindTag.new(context){callback} )
 * If given taglist, TkWindow#bindtags(taglist) returns taglist
 * add TkWindow#bindtags=(taglist)
 * Tk.focue and Tk.focus_lastfor return nil if there is no target widget.
 * Tk::Wm.client returns the argument string when setting name
 * TkGrid.columnconfiginfo and rowconfiginfo given a slot return a number.
 * TkWindow.grid_columnconfiginfo and grid_rowconfiginfo :: ditto
 * rename and define alias :: TkOption ==> TkOptionDB
 * define alias :: TkTimer ==> TkAfter
 * some instance methods change from public to private
 * some TkComm methods change to module functions
   (help to treat return values from Tk)
 * add support for -displayof option to some TkWinfo methods
 * bind, bind_append and bind_remove :: returns the target of event-binding
 * add Tk8.4 features
 * add TkPaneWindow

tkdialog.rb:
 * classes without showing at initialize : TkDialog2, TkWarning2
 * add show method to reuse TkDialog object
 * some instance methods change from public to private
 * add new features for configuration

tktext.rb :
 * small bug fix
 * some methods return self
 * add TkTextMark#+(mod) and TkTextMark#-(mod) (e.g. mark + '3 chars')
 * add some methods

tkcanvas.rb :
 * small bug fix
 * some methods return self

tkentry.rb :
 * some methods return self
 * TkEntry#bbox returns an array of four numbers
 * scan validatecommand arguments and convert to proper type

tkbgerror.rb :
 * support to define a error handler by user

tcltklib.rb :
 * reported by Ferenc Engard <engard@all.hu> on [ruby-talk:60759]

                                     ... and so on


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3960 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2003-06-18 19:46:20 +00:00

1064 lines
26 KiB
Ruby

#
# tkfont.rb - the class to treat fonts on Ruby/Tk
#
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
class TkFont
include Tk
extend TkCore
Tk_FontID = [0]
Tk_FontNameTBL = {}
Tk_FontUseTBL = {}
TkComm::INITIALIZE_TARGETS << self
def self.__init_tables__
Tk_FontNameTBL.clear
Tk_FontUseTBL.clear
Tk_FontID[0] = 0
end
# set default font
case Tk::TK_VERSION
when /^4\.*/
DEFAULT_LATIN_FONT_NAME = 'a14'.freeze
DEFAULT_KANJI_FONT_NAME = 'k14'.freeze
when /^8\.*/
if JAPANIZED_TK
begin
fontnames = tk_call('font', 'names')
case fontnames
when /defaultgui/
# Tcl/Tk-JP for Windows
ltn = 'defaultgui'
knj = 'defaultgui'
when /Mincho:Helvetica-12/
# Tcl/Tk-JP for UNIX/X
ltn, knj = tk_split_simplelist(tk_call('font', 'configure',
'Mincho:Helvetica-12',
'-compound'))
else
# unknown Tcl/Tk-JP
platform = tk_call('set', 'tcl_platform(platform)')
case platform
when 'unix'
ltn = {'family'=>'Helvetica'.freeze, 'size'=>-12}
knj = 'k14'
#knj = '-misc-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0'
when 'windows'
ltn = {'family'=>'MS Sans Serif'.freeze, 'size'=>8}
knj = 'mincho'
when 'macintosh'
ltn = 'system'
knj = 'mincho'
else # unknown
ltn = 'Helvetica'
knj = 'mincho'
end
end
rescue
ltn = 'Helvetica'
knj = 'mincho'
end
else # not JAPANIZED_TK
begin
platform = tk_call('set', 'tcl_platform(platform)')
case platform
when 'unix'
ltn = {'family'=>'Helvetica'.freeze, 'size'=>-12}
knj = 'k14'
#knj = '-misc-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0'
when 'windows'
ltn = {'family'=>'MS Sans Serif'.freeze, 'size'=>8}
knj = 'mincho'
when 'macintosh'
ltn = 'system'
knj = 'mincho'
else # unknown
ltn = 'Helvetica'
knj = 'mincho'
end
rescue
ltn = 'Helvetica'
knj = 'mincho'
end
end
DEFAULT_LATIN_FONT_NAME = ltn.freeze
DEFAULT_KANJI_FONT_NAME = knj.freeze
else # unknown version
DEFAULT_LATIN_FONT_NAME = 'Helvetica'.freeze
DEFAULT_KANJI_FONT_NAME = 'mincho'.freeze
end
if $DEBUG
print "default latin font = "; p DEFAULT_LATIN_FONT_NAME
print "default kanji font = "; p DEFAULT_KANJI_FONT_NAME
end
###################################
# class methods
###################################
def TkFont.families(window=nil)
case (Tk::TK_VERSION)
when /^4\.*/
['fixed']
when /^8\.*/
if window
tk_split_simplelist(tk_call('font', 'families', '-displayof', window))
else
tk_split_simplelist(tk_call('font', 'families'))
end
end
end
def TkFont.names
case (Tk::TK_VERSION)
when /^4\.*/
r = ['fixed']
r += ['a14', 'k14'] if JAPANIZED_TK
Tk_FontNameTBL.each_value{|obj| r.push(obj)}
r | []
when /^8\.*/
tk_split_simplelist(tk_call('font', 'names'))
end
end
def TkFont.create_copy(font)
fail 'source-font need to be TkFont' unless font.kind_of? TkFont
keys = {}
font.configinfo.each{|key,value| keys[key] = value }
TkFont.new(font.latin_font, font.kanji_font, keys)
end
def TkFont.get_obj(name)
if name =~ /^(@font[0-9]+)(|c|l|k)$/
Tk_FontNameTBL[$1]
else
nil
end
end
def TkFont.init_widget_font(path, *args)
case (Tk::TK_VERSION)
when /^4\.*/
conf = tk_split_simplelist(tk_call(*args)).
find_all{|prop| prop[0..5]=='-font ' || prop[0..10]=='-kanjifont '}.
collect{|prop| tk_split_simplelist(prop)}
if font_inf = conf.assoc('-font')
ltn = font_inf[4]
ltn = nil if ltn == []
else
#ltn = nil
raise RuntimeError, "unknown option '-font'"
end
if font_inf = conf.assoc('-kanjifont')
knj = font_inf[4]
knj = nil if knj == []
else
knj = nil
end
TkFont.new(ltn, knj).call_font_configure(path, *(args + [{}]))
when /^8\.*/
font_prop = tk_split_simplelist(tk_call(*args)).find{|prop|
prop[0..5] == '-font '
}
unless font_prop
raise RuntimeError, "unknown option '-font'"
end
fnt = tk_split_simplelist(font_prop)[4]
if fnt == ""
TkFont.new(nil, nil).call_font_configure(path, *(args + [{}]))
else
begin
compound = tk_split_simplelist(
Hash[*tk_split_simplelist(tk_call('font', 'configure',
fnt))].collect{|key,value|
[key[1..-1], value]
}.assoc('compound')[1])
rescue
compound = []
end
if compound == []
#TkFont.new(fnt, DEFAULT_KANJI_FONT_NAME) \
#.call_font_configure(path, *(args + [{}]))
TkFont.new(fnt).call_font_configure(path, *(args + [{}]))
else
TkFont.new(compound[0], compound[1]) \
.call_font_configure(path, *(args + [{}]))
end
end
end
end
def TkFont.used_on(path=nil)
if path
Tk_FontUseTBL[path]
else
Tk_FontUseTBL.values | []
end
end
def TkFont.failsafe(font)
begin
if /^8\.*/ === Tk::TK_VERSION && JAPANIZED_TK
tk_call('font', 'failsafe', font)
end
rescue
end
end
###################################
private
###################################
def initialize(ltn=DEFAULT_LATIN_FONT_NAME, knj=nil, keys=nil)
@id = format("@font%.4d", Tk_FontID[0])
Tk_FontID[0] += 1
Tk_FontNameTBL[@id] = self
knj = DEFAULT_KANJI_FONT_NAME if JAPANIZED_TK && !knj
create_compoundfont(ltn, knj, keys)
end
def _get_font_info_from_hash(font)
font = _symbolkey2str(font)
foundry = (info = font['foundry'] .to_s)? info: '*'
family = (info = font['family'] .to_s)? info: '*'
weight = (info = font['weight'] .to_s)? info: '*'
slant = (info = font['slant'] .to_s)? info: '*'
swidth = (info = font['swidth'] .to_s)? info: '*'
adstyle = (info = font['adstyle'] .to_s)? info: '*'
pixels = (info = font['pixels'] .to_s)? info: '*'
points = (info = font['points'] .to_s)? info: '*'
resx = (info = font['resx'] .to_s)? info: '*'
resy = (info = font['resy'] .to_s)? info: '*'
space = (info = font['space'] .to_s)? info: '*'
avgWidth = (info = font['avgWidth'].to_s)? info: '*'
charset = (info = font['charset'] .to_s)? info: '*'
encoding = (info = font['encoding'].to_s)? info: '*'
[foundry, family, weight, slant, swidth, adstyle,
pixels, points, resx, resy, space, avgWidth, charset, encoding]
end
def create_latinfont_tk4x(font)
if font.kind_of? Hash
@latinfont = '-' + _get_font_info_from_hash(font).join('-') + '-'
elsif font.kind_of? Array
finfo = {}
finfo['family'] = font[0].to_s
if font[1]
fsize = font[1].to_s
if fsize != '0' && fsize =~ /^(|\+|-)([0-9]+)$/
if $1 == '-'
finfo['pixels'] = $2
else
finfo['points'] = $2
end
else
finfo['points'] = '13'
end
end
font[2..-1].each{|style|
case (style)
when 'normal'
finfo['weight'] = style
when 'bold'
finfo['weight'] = style
when 'roman'
finfo['slant'] = 'r'
when 'italic'
finfo['slant'] = 'i'
end
}
@latinfont = '-' + _get_font_info_from_hash(finfo).join('-') + '-'
elsif font.kind_of? TkFont
@latinfont = font.latin_font
else
if font
@latinfont = font
else
@latinfont = DEFAULT_LATIN_FONT_NAME
end
end
end
def create_kanjifont_tk4x(font)
unless JAPANIZED_TK
@kanjifont = ""
return
end
if font.kind_of? Hash
@kanjifont = '-' + _get_font_info_from_hash(font).join('-') + '-'
elsif font.kind_of? Array
finfo = {}
finfo['family'] = font[0].to_s
if font[1]
fsize = font[1].to_s
if fsize != '0' && fsize =~ /^(|\+|-)([0-9]+)$/
if $1 == '-'
finfo['pixels'] = $2
else
finfo['points'] = $2
end
else
finfo['points'] = '13'
end
end
font[2..-1].each{|style|
case (style)
when 'normal'
finfo['weight'] = style
when 'bold'
finfo['weight'] = style
when 'roman'
finfo['slant'] = 'r'
when 'italic'
finfo['slant'] = 'i'
end
}
@kanjifont = '-' + _get_font_info_from_hash(finfo).join('-') + '-'
elsif font.kind_of? TkFont
@kanjifont = font.kanji_font
else
if font
@kanjifont = font
else
@kanjifont = DEFAULT_KANJI_FONT_NAME
end
end
end
def create_compoundfont_tk4x(ltn, knj, keys)
create_latinfont(ltn)
create_kanjifont(knj)
if JAPANIZED_TK
@compoundfont = [[@latinfont], [@kanjifont]]
@fontslot = {'font'=>@latinfont, 'kanjifont'=>@kanjifont}
else
@compoundfont = @latinfont
@fontslot = {'font'=>@latinfont}
end
end
def create_latinfont_tk8x(font)
@latinfont = @id + 'l'
if JAPANIZED_TK
if font.kind_of? Hash
if font[:charset] || font['charset']
tk_call('font', 'create', @latinfont, *hash_kv(font))
else
tk_call('font', 'create', @latinfont,
'-charset', 'iso8859', *hash_kv(font))
end
elsif font.kind_of? Array
tk_call('font', 'create', @latinfont, '-copy', array2tk_list(font))
tk_call('font', 'configure', @latinfont, '-charset', 'iso8859')
elsif font.kind_of? TkFont
tk_call('font', 'create', @latinfont, '-copy', font.latin_font)
elsif font
tk_call('font', 'create', @latinfont, '-copy', font,
'-charset', 'iso8859')
else
tk_call('font', 'create', @latinfont, '-charset', 'iso8859')
end
else
if font.kind_of? Hash
tk_call('font', 'create', @latinfont, *hash_kv(font))
else
keys = {}
if font.kind_of? Array
actual_core(array2tk_list(font)).each{|key,val| keys[key] = val}
elsif font.kind_of? TkFont
actual_core(font.latin_font).each{|key,val| keys[key] = val}
elsif font
actual_core(font).each{|key,val| keys[key] = val}
end
tk_call('font', 'create', @latinfont, *hash_kv(keys))
end
if font && @compoundfont
keys = {}
actual_core(@latinfont).each{|key,val| keys[key] = val}
tk_call('font', 'configure', @compoundfont, *hash_kv(keys))
end
end
end
def create_kanjifont_tk8x(font)
@kanjifont = @id + 'k'
if JAPANIZED_TK
if font.kind_of? Hash
if font[:charset] || font['charset']
tk_call('font', 'create', @kanjifont, *hash_kv(font))
else
tk_call('font', 'create', @kanjifont,
'-charset', 'jisx0208.1983', *hash_kv(font))
end
elsif font.kind_of? Array
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)
elsif font
tk_call('font', 'create', @kanjifont, '-copy', font,
'-charset', 'jisx0208.1983')
else
tk_call('font', 'create', @kanjifont, '-charset', 'jisx0208.1983')
end
# end of JAPANIZED_TK
else
if font.kind_of? Hash
tk_call('font', 'create', @kanjifont, *hash_kv(font))
else
keys = {}
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}
elsif font
actual_core(font).each{|key,val| keys[key] = val}
end
tk_call('font', 'create', @kanjifont, *hash_kv(keys))
end
if font && @compoundfont
keys = {}
actual_core(@kanjifont).each{|key,val| keys[key] = val}
tk_call('font', 'configure', @compoundfont, *hash_kv(keys))
end
end
end
def create_compoundfont_tk8x(ltn, knj, keys)
create_latinfont(ltn)
create_kanjifont(knj)
@compoundfont = @id + 'c'
if JAPANIZED_TK
@fontslot = {'font'=>@compoundfont}
tk_call('font', 'create', @compoundfont,
'-compound', [@latinfont, @kanjifont], *hash_kv(keys))
else
tk_call('font', 'create', @compoundfont)
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
if knj
kanjikeys = {}
begin
actual_core(@kanjifont).each{|key,val| kanjikeys[key] = val}
rescue
kanjikeys {}
end
if kanjikeys != {}
tk_call('font', 'configure', @compoundfont, *hash_kv(kanjikeys))
end
end
@fontslot = {'font'=>@compoundfont}
tk_call('font', 'configure', @compoundfont, *hash_kv(keys))
end
end
def actual_core_tk4x(font, window=nil, option=nil)
# dummy
if option
""
else
[['family',[]], ['size',[]], ['weight',[]], ['slant',[]],
['underline',[]], ['overstrike',[]], ['charset',[]],
['pointadjust',[]]]
end
end
def actual_core_tk8x(font, window=nil, option=nil)
if option == 'compound'
""
elsif option
if window
tk_call('font', 'actual', font, "-displayof", window, "-#{option}")
else
tk_call('font', 'actual', font, "-#{option}")
end
else
l = tk_split_simplelist(if window
tk_call('font', 'actual', font,
"-displayof", window)
else
tk_call('font', 'actual', font)
end)
r = []
while key=l.shift
if key == '-compound'
l.shift
else
r.push [key[1..-1], l.shift]
end
end
r
end
end
def configure_core_tk4x(font, slot, value=None)
""
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.delete(@id)
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.delete(@id)
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.delete(w)
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.delete(w)
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)
self
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
self
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
self
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
self
end
def kanji_replace(knj)
kanji_replace_core(knj)
reset_pointadjust
self
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_metrics
end
module TkTreatTagFont
def font_configinfo
@parent.tagfont_configinfo(@id)
end
# alias font font_configinfo
def font_configure(slot)
@parent.tagfont_configure(@id, slot)
self
end
def latinfont_configure(ltn, keys=nil)
@parent.latintagfont_configure(@id, ltn, keys)
self
end
alias asciifont_configure latinfont_configure
def kanjifont_configure(knj, keys=nil)
@parent.kanjitagfont_configure(@id, ltn, keys)
self
end
def font_copy(window, wintag=nil)
@parent.tagfont_copy(@id, window, wintag)
self
end
def latinfont_copy(window, wintag=nil)
@parent.latintagfont_copy(@id, window, wintag)
self
end
alias asciifont_copy latinfont_copy
def kanjifont_copy(window, wintag=nil)
@parent.kanjitagfont_copy(@id, window, wintag)
self
end
end