summaryrefslogtreecommitdiff
path: root/ext/tk/lib/tk/itemfont.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ext/tk/lib/tk/itemfont.rb')
-rw-r--r--ext/tk/lib/tk/itemfont.rb185
1 files changed, 185 insertions, 0 deletions
diff --git a/ext/tk/lib/tk/itemfont.rb b/ext/tk/lib/tk/itemfont.rb
new file mode 100644
index 0000000000..6e92fc001c
--- /dev/null
+++ b/ext/tk/lib/tk/itemfont.rb
@@ -0,0 +1,185 @@
+#
+# tk/itemfont.rb : control font of widget items
+#
+require 'tk'
+
+module TkTreatItemFont
+ def __conf_cmd(idx)
+ raise NotImplementedError, "need to define `__conf_cmd'"
+ end
+ def __item_pathname(tagOrId)
+ raise NotImplementedError, "need to define `__item_pathname'"
+ end
+ private :__conf_cmd, :__item_pathname
+
+ def tagfont_configinfo(tagOrId, name = nil)
+ pathname = __item_pathname(tagOrId)
+ ret = TkFont.used_on(pathname)
+ if ret == nil
+=begin
+ if name
+ ret = name
+ else
+ ret = TkFont.init_widget_font(pathname, self.path,
+ __conf_cmd(0), __conf_cmd(1), tagOrId)
+ end
+=end
+ ret = TkFont.init_widget_font(pathname, self.path,
+ __conf_cmd(0), __conf_cmd(1), tagOrId)
+ end
+ ret
+ end
+ alias tagfontobj tagfont_configinfo
+
+ def tagfont_configure(tagOrId, slot)
+ pathname = __item_pathname(tagOrId)
+ slot = _symbolkey2str(slot)
+
+ if slot.key?('font')
+ fnt = slot.delete('font')
+ if fnt.kind_of? TkFont
+ return fnt.call_font_configure(pathname, self.path,
+ __conf_cmd(0), __conf_cmd(1),
+ tagOrId, slot)
+ else
+ 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
+
+ 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)
+ 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_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)
+ 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_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
+ fnt = window.tagfontobj(wintag).dup
+ else
+ fnt = window.fontobj.dup
+ end
+ 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_id)
+ else
+ 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_id)
+ else
+ tagfontobj(tagOrId).kanji_replace(window.fontobj.kanji_font_id)
+ end
+ self
+ end
+end