# File tk/lib/tk/canvas.rb, line 54
def __destroy_hook__
TkcItem::CItemID_TBL.delete(@path)
end
# File tk/lib/tk/canvas.rb, line 99
def addtag(tag, mode, *args)
mode = mode.to_s
if args[0] && mode =~ /^(above|below|with(tag)?)$/
args[0] = tagid(args[0])
end
tk_send_without_enc('addtag', tagid(tag), mode, *args)
self
end
# File tk/lib/tk/canvas.rb, line 107
def addtag_above(tagOrId, target)
addtag(tagOrId, 'above', tagid(target))
end
# File tk/lib/tk/canvas.rb, line 110
def addtag_all(tagOrId)
addtag(tagOrId, 'all')
end
# File tk/lib/tk/canvas.rb, line 113
def addtag_below(tagOrId, target)
addtag(tagOrId, 'below', tagid(target))
end
# File tk/lib/tk/canvas.rb, line 116
def addtag_closest(tagOrId, x, y, halo=None, start=None)
addtag(tagOrId, 'closest', x, y, halo, start)
end
# File tk/lib/tk/canvas.rb, line 119
def addtag_enclosed(tagOrId, x1, y1, x2, y2)
addtag(tagOrId, 'enclosed', x1, y1, x2, y2)
end
# File tk/lib/tk/canvas.rb, line 122
def addtag_overlapping(tagOrId, x1, y1, x2, y2)
addtag(tagOrId, 'overlapping', x1, y1, x2, y2)
end
# File tk/lib/tk/canvas.rb, line 125
def addtag_withtag(tagOrId, tag)
addtag(tagOrId, 'withtag', tagid(tag))
end
# File tk/lib/tk/canvas.rb, line 129
def bbox(tagOrId, *tags)
list(tk_send_without_enc('bbox', tagid(tagOrId),
*tags.collect{|t| tagid(t)}))
end
# File tk/lib/tk/canvas.rb, line 173
def canvasx(screen_x, *args)
#tk_tcl2ruby(tk_send_without_enc('canvasx', screen_x, *args))
number(tk_send_without_enc('canvasx', screen_x, *args))
end
# File tk/lib/tk/canvas.rb, line 177
def canvasy(screen_y, *args)
#tk_tcl2ruby(tk_send_without_enc('canvasy', screen_y, *args))
number(tk_send_without_enc('canvasy', screen_y, *args))
end
# File tk/lib/tk/canvas.rb, line 184
def coords(tag, *args)
if args.empty?
tk_split_list(tk_send_without_enc('coords', tagid(tag)))
else
tk_send_without_enc('coords', tagid(tag), *(args.flatten))
self
end
end
create a canvas item without creating a TkcItem object
# File tk/lib/tk/canvas.rb, line 88
def create(type, *args)
if type.kind_of?(Class) && type < TkcItem
# do nothing
elsif TkcItem.type2class(type.to_s)
type = TkcItem.type2class(type.to_s)
else
fail ArgumentError, "type must a subclass of TkcItem class, or a string in CItemTypeToClass"
end
type.create(self, *args)
end
# File tk/lib/tk/canvas.rb, line 614
def create_itemobj_from_id(idnum)
id = TkcItem.id2obj(self, idnum.to_i)
return id if id.kind_of?(TkcItem)
typename = tk_send('type', id)
unless type = TkcItem.type2class(typename)
(itemclass = typename.dup)[0,1] = typename[0,1].upcase
type = TkcItem.const_set(itemclass, Class.new(TkcItem))
type.const_set("CItemTypeName", typename.freeze)
TkcItem::CItemTypeToClass[typename] = type
end
canvas = self
(obj = type.allocate).instance_eval{
@parent = @c = canvas
@path = canvas.path
@id = id
TkcItem::CItemID_TBL.mutex.synchronize{
TkcItem::CItemID_TBL[@path] = {} unless TkcItem::CItemID_TBL[@path]
TkcItem::CItemID_TBL[@path][@id] = self
}
}
end
# File tk/lib/tk/canvas.rb, line 193
def dchars(tag, first, last=None)
tk_send_without_enc('dchars', tagid(tag),
_get_eval_enc_str(first), _get_eval_enc_str(last))
self
end
# File tk/lib/tk/canvas.rb, line 199
def delete(*args)
tbl = nil
TkcItem::CItemID_TBL.mutex.synchronize{
tbl = TkcItem::CItemID_TBL[self.path]
}
if tbl
args.each{|tag|
find('withtag', tag).each{|item|
if item.kind_of?(TkcItem)
TkcItem::CItemID_TBL.mutex.synchronize{
tbl.delete(item.id)
}
end
}
}
end
tk_send_without_enc('delete', *args.collect{|t| tagid(t)})
self
end
# File tk/lib/tk/canvas.rb, line 220
def dtag(tag, tag_to_del=None)
tk_send_without_enc('dtag', tagid(tag), tagid(tag_to_del))
self
end
# File tk/lib/tk/canvas.rb, line 226
def find(mode, *args)
list(tk_send_without_enc('find', mode, *args)).collect!{|id|
TkcItem.id2obj(self, id)
}
end
# File tk/lib/tk/canvas.rb, line 231
def find_above(target)
find('above', tagid(target))
end
# File tk/lib/tk/canvas.rb, line 237
def find_below(target)
find('below', tagid(target))
end
# File tk/lib/tk/canvas.rb, line 240
def find_closest(x, y, halo=None, start=None)
find('closest', x, y, halo, start)
end
# File tk/lib/tk/canvas.rb, line 243
def find_enclosed(x1, y1, x2, y2)
find('enclosed', x1, y1, x2, y2)
end
# File tk/lib/tk/canvas.rb, line 246
def find_overlapping(x1, y1, x2, y2)
find('overlapping', x1, y1, x2, y2)
end
# File tk/lib/tk/canvas.rb, line 249
def find_withtag(tag)
find('withtag', tag)
end
# File tk/lib/tk/canvas.rb, line 273
def icursor(tagOrId, index)
tk_send_without_enc('icursor', tagid(tagOrId), index)
self
end
# File tk/lib/tk/canvas.rb, line 278
def imove(tagOrId, idx, x, y)
tk_send_without_enc('imove', tagid(tagOrId), idx, x, y)
self
end
# File tk/lib/tk/canvas.rb, line 284
def index(tagOrId, idx)
number(tk_send_without_enc('index', tagid(tagOrId), idx))
end
# File tk/lib/tk/canvas.rb, line 288
def insert(tagOrId, index, string)
tk_send_without_enc('insert', tagid(tagOrId), index,
_get_eval_enc_str(string))
self
end
def itembind(tag, context, cmd=Proc.new, *args)
_bind([path, "bind", tagid(tag)], context, cmd, *args) self
end
# File tk/lib/tk/canvas.rb, line 138
def itembind(tag, context, *args)
# if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
if TkComm._callback_entry?(args[0]) || !block_given?
cmd = args.shift
else
cmd = Proc.new
end
_bind([path, "bind", tagid(tag)], context, cmd, *args)
self
end
def #itembind_append(tag, context, cmd=Proc.new, *args)
_bind_append([path, "bind", tagid(tag)], context, cmd, *args) self
end
# File tk/lib/tk/canvas.rb, line 153
def itembind_append(tag, context, *args)
# if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
if TkComm._callback_entry?(args[0]) || !block_given?
cmd = args.shift
else
cmd = Proc.new
end
_bind_append([path, "bind", tagid(tag)], context, cmd, *args)
self
end
# File tk/lib/tk/canvas.rb, line 164
def itembind_remove(tag, context)
_bind_remove([path, "bind", tagid(tag)], context)
self
end
# File tk/lib/tk/canvas.rb, line 169
def itembindinfo(tag, context=nil)
_bindinfo([path, "bind", tagid(tag)], context)
end
# File tk/lib/tk/canvas.rb, line 253
def itemfocus(tagOrId=nil)
if tagOrId
tk_send_without_enc('focus', tagid(tagOrId))
self
else
ret = tk_send_without_enc('focus')
if ret == ""
nil
else
TkcItem.id2obj(self, ret)
end
end
end
# File tk/lib/tk/canvas.rb, line 610
def itemtype(tag)
TkcItem.type2class(tk_send('type', tagid(tag)))
end
def itemcget(tagOrId, option) case option.to_s when 'dash', 'activedash', 'disableddash' conf = tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}") if conf =~ /^[0-9]/ list(conf) else conf end when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' _fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}")) when 'font', 'kanjifont' #fnt = tk_tcl2ruby(tk_send('itemcget', tagid(tagOrId), "-#{option}")) fnt = tk_tcl2ruby(_fromUTF8(tk_send_with_enc('itemcget', tagid(tagOrId), '-font'))) unless fnt.kind_of?(TkFont) fnt = tagfontobj(tagid(tagOrId), fnt) end if option.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ # obsolete; just for compatibility fnt.kanji_font else fnt end else tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}"))) end end def itemconfigure(tagOrId, key, value=None) if key.kind_of? Hash key = _symbolkey2str(key) coords = key.delete('coords') self.coords(tagOrId, coords) if coords if ( key['font'] || key['kanjifont'] || key['latinfont'] || key['asciifont'] ) tagfont_configure(tagid(tagOrId), key.dup) else _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), *hash_kv(key, true))) end else if ( key == 'coords' || key == :coords ) self.coords(tagOrId, value) elsif ( key == 'font' || key == :font || key == 'kanjifont' || key == :kanjifont || key == 'latinfont' || key == :latinfont || key == 'asciifont' || key == :asciifont ) if value == None tagfontobj(tagid(tagOrId)) else tagfont_configure(tagid(tagOrId), {key=>value}) end else _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}", _get_eval_enc_str(value))) end end self end
# def itemconfigure(tagOrId, key, value=None) # if key.kind_of? Hash # tk_send ‘itemconfigure’, tagid(tagOrId), *hash_kv(key) # else # tk_send ‘itemconfigure’, tagid(tagOrId), “-#{key}”, value # end # end # def itemconfigure(tagOrId, keys) # tk_send ‘itemconfigure’, tagid(tagOrId), *hash_kv(keys) # end
def itemconfiginfo(tagOrId, key=nil) if TkComm::GET_CONFIGINFO_AS_ARRAY if key case key.to_s when 'coords' return ['coords', '', '', '', self.coords(tagOrId)] when 'dash', 'activedash', 'disableddash' conf = tk_split_simplelist(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")) if conf[3] && conf[3] =~ /^[0-9]/ conf[3] = list(conf[3]) end if conf[4] && conf[4] =~ /^[0-9]/ conf[4] = list(conf[4]) end when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))) when 'font', 'kanjifont' conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}"))) conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4]) else conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))) end conf[0] = conf[0][1..-1] conf else ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).collect{|conflist| conf = tk_split_simplelist(conflist) conf[0] = conf[0][1..-1] case conf[0] when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' when 'dash', 'activedash', 'disableddash' if conf[3] && conf[3] =~ /^[0-9]/ conf[3] = list(conf[3]) end if conf[4] && conf[4] =~ /^[0-9]/ conf[4] = list(conf[4]) end else if conf[3] if conf[3].index('{') conf[3] = tk_split_list(conf[3]) else conf[3] = tk_tcl2ruby(conf[3]) end end if conf[4] if conf[4].index('{') conf[4] = tk_split_list(conf[4]) else conf[4] = tk_tcl2ruby(conf[4]) end end end conf[1] = conf[1][1..-1] if conf.size == 2 # alias info conf } fontconf = ret.assoc('font') if fontconf ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'} fontconf[4] = tagfont_configinfo(tagid(tagOrId), fontconf[4]) ret.push(fontconf) end ret << ['coords', '', '', '', self.coords(tagOrId)] end else # ! TkComm::GET_CONFIGINFO_AS_ARRAY if key case key.to_s when 'coords' {'coords' => ['', '', '', self.coords(tagOrId)]} when 'dash', 'activedash', 'disableddash' conf = tk_split_simplelist(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")) if conf[3] && conf[3] =~ /^[0-9]/ conf[3] = list(conf[3]) end if conf[4] && conf[4] =~ /^[0-9]/ conf[4] = list(conf[4]) end when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))) when 'font', 'kanjifont' conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}"))) conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4]) else conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))) end key = conf.shift[1..-1] { key => conf } else ret = {} tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).each{|conflist| conf = tk_split_simplelist(conflist) key = conf.shift[1..-1] case key when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' when 'dash', 'activedash', 'disableddash' if conf[2] && conf[2] =~ /^[0-9]/ conf[2] = list(conf[2]) end if conf[3] && conf[3] =~ /^[0-9]/ conf[3] = list(conf[3]) end else if conf[2] if conf[2].index('{') conf[2] = tk_split_list(conf[2]) else conf[2] = tk_tcl2ruby(conf[2]) end end if conf[3] if conf[3].index('{') conf[3] = tk_split_list(conf[3]) else conf[3] = tk_tcl2ruby(conf[3]) end end end if conf.size == 1 ret[key] = conf[0][1..-1] # alias info else ret[key] = conf end } fontconf = ret['font'] if fontconf ret.delete('font') ret.delete('kanjifont') fontconf[3] = tagfont_configinfo(tagid(tagOrId), fontconf[3]) ret['font'] = fontconf end ret['coords'] = ['', '', '', self.coords(tagOrId)] ret end end end def current_itemconfiginfo(tagOrId, key=nil) if TkComm::GET_CONFIGINFO_AS_ARRAY if key conf = itemconfiginfo(tagOrId, key) {conf[0] => conf[4]} else ret = {} itemconfiginfo(tagOrId).each{|conf| ret[conf[0]] = conf[4] if conf.size > 2 } ret end else # ! TkComm::GET_CONFIGINFO_AS_ARRAY ret = {} itemconfiginfo(tagOrId, key).each{|k, conf| ret[k] = conf[-1] if conf.kind_of?(Array) } ret end end
# File tk/lib/tk/canvas.rb, line 533
def lower(tag, below=nil)
if below
tk_send_without_enc('lower', tagid(tag), tagid(below))
else
tk_send_without_enc('lower', tagid(tag))
end
self
end
# File tk/lib/tk/canvas.rb, line 542
def move(tag, dx, dy)
tk_send_without_enc('move', tagid(tag), dx, dy)
self
end
# File tk/lib/tk/canvas.rb, line 547
def moveto(tag, x, y)
# Tcl/Tk 8.6 or later
tk_send_without_enc('moveto', tagid(tag), x, y)
self
end
# File tk/lib/tk/canvas.rb, line 554
def postscript(keys)
tk_send("postscript", *hash_kv(keys))
end
# File tk/lib/tk/canvas.rb, line 558
def raise(tag, above=nil)
if above
tk_send_without_enc('raise', tagid(tag), tagid(above))
else
tk_send_without_enc('raise', tagid(tag))
end
self
end
# File tk/lib/tk/canvas.rb, line 567
def rchars(tag, first, last, str_or_coords)
# Tcl/Tk 8.6 or later
str_or_coords = str_or_coords.flatten if str_or_coords.kinad_of? Array
tk_send_without_enc('rchars', tagid(tag), first, last, str_or_coords)
self
end
# File tk/lib/tk/canvas.rb, line 576
def scale(tag, x, y, xs, ys)
tk_send_without_enc('scale', tagid(tag), x, y, xs, ys)
self
end
# File tk/lib/tk/canvas.rb, line 585
def scan_dragto(x, y, gain=None)
tk_send_without_enc('scan', 'dragto', x, y, gain)
self
end
# File tk/lib/tk/canvas.rb, line 581
def scan_mark(x, y)
tk_send_without_enc('scan', 'mark', x, y)
self
end
# File tk/lib/tk/canvas.rb, line 590
def select(mode, *args)
r = tk_send_without_enc('select', mode, *args)
(mode == 'item')? TkcItem.id2obj(self, r): self
end
# File tk/lib/tk/canvas.rb, line 594
def select_adjust(tagOrId, index)
select('adjust', tagid(tagOrId), index)
end
# File tk/lib/tk/canvas.rb, line 597
def select_clear
select('clear')
end
# File tk/lib/tk/canvas.rb, line 600
def select_from(tagOrId, index)
select('from', tagid(tagOrId), index)
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.