Class: Tk::Canvas

Inherits:
TkWindow show all
Includes:
Scrollable, TkCanvasItemConfig
Defined in:
lib/tk/canvas.rb,
lib/tkextlib/blt/eps.rb

Constant Summary collapse

TkCommandNames =
['canvas'.freeze].freeze
WidgetClassName =
'Canvas'.freeze

Constants included from TkUtil

TkUtil::None, TkUtil::RELEASE_DATE

Constants included from TkCore

TkCore::EventFlag, TkCore::INTERP, TkCore::INTERP_MUTEX, TkCore::INTERP_ROOT_CHECK, TkCore::INTERP_THREAD, TkCore::INTERP_THREAD_STATUS, TkCore::RUN_EVENTLOOP_ON_MAIN_THREAD, TkCore::WIDGET_DESTROY_HOOK, TkCore::WITH_ENCODING, TkCore::WITH_RUBY_VM

Constants included from TkComm

TkComm::GET_CONFIGINFO_AS_ARRAY, TkComm::GET_CONFIGINFOwoRES_AS_ARRAY, TkComm::TkExtlibAutoloadModule, TkComm::Tk_CMDTBL, TkComm::Tk_IDs, TkComm::Tk_WINDOWS, TkComm::USE_TCLs_LIST_FUNCTIONS, TkComm::WidgetClassNames

Constants included from Tk

AUTO_PATH, INTERP, JAPANIZED_TK, LIBRARY_PATH, MAINLOOP, PACKAGE_PATH, RELEASE_DATE, TCL_LIBRARY_PATH, TCL_MAJOR_VERSION, TCL_MINOR_VERSION, TCL_PACKAGE_PATH, TCL_PATCHLEVEL, TCL_PRECISION, TCL_VERSION, TK_MAJOR_VERSION, TK_MINOR_VERSION, TK_PATCHLEVEL, TK_VERSION, Tkextlib_RELEASE_DATE, TreeCtrl_Widget, X_Scrollable, Y_Scrollable

Constants included from Encoding

Encoding::BINARY, Encoding::BINARY_NAME, Encoding::DEFAULT_EXTERNAL_NAME, Encoding::DEFAULT_INTERNAL_NAME, Encoding::ENCODING_TABLE, Encoding::RubyEncoding, Encoding::UNKNOWN, Encoding::UTF8_NAME

Constants included from TkDND::Shape

TkDND::Shape::PACKAGE_NAME

Instance Method Summary collapse

Methods included from Scrollable

#autoscroll, #unautoscroll

Methods included from YScrollable

#yscrollbar, #yscrollcommand, #yview, #yview_moveto, #yview_scroll

Methods included from XScrollable

#xscrollbar, #xscrollcommand, #xview, #xview_moveto, #xview_scroll

Methods included from TkItemConfigMethod

__IGNORE_UNKNOWN_CONFIGURE_OPTION__, #__check_available_itemconfigure_options, #__current_itemconfiginfo, __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!, #current_itemconfiginfo, #itemcget, #itemcget_strict, #itemcget_tkstring, #itemconfiginfo, #itemconfigure

Methods included from TkItemConfigOptkeys

#__conv_item_keyonly_opts, #itemconfig_hash_kv

Methods included from TkUtil

#_conv_args, _conv_args, #_fromUTF8, #_get_eval_enc_str, _get_eval_enc_str, #_get_eval_string, _get_eval_string, _symbolkey2str, #_symbolkey2str, #_toUTF8, #bool, bool, callback, eval_cmd, #hash_kv, hash_kv, install_cmd, #num_or_nil, num_or_nil, num_or_str, #num_or_str, number, #number, string, #string, uninstall_cmd, untrust

Methods included from TkTreatItemFont

#kanjifont_copy, #kanjitagfont_configure, #latintagfont_configure, #latintagfont_copy, #tagfont_configinfo, #tagfont_configure, #tagfont_copy

Methods inherited from TkWindow

_widget_inspect_full_=, _widget_inspect_full_?, #bind_class, #bindtags, #bindtags=, #bindtags_shift, #bindtags_unshift, #caret, #colormodel, #command, #cursor_propagate, #cursor_restore, database_class, #database_class, #database_classname, database_classname, #destroy, #eventloop_wait_destroy, #eventloop_wait_visibility, #exist?, #grab, #grab_current, #grab_release, #grab_set, #grab_set_global, #grab_status, #grid, #grid_anchor, #grid_bbox, #grid_column, #grid_columnconfig, #grid_columnconfiginfo, #grid_config, #grid_forget, #grid_in, #grid_info, #grid_location, #grid_propagate, #grid_remove, #grid_row, #grid_rowconfig, #grid_rowconfiginfo, #grid_size, #grid_slaves, #initialize, #inspect, #pack, #pack_config, #pack_forget, #pack_in, #pack_info, #pack_propagate, #pack_slaves, #place, #place_config, #place_configinfo, #place_forget, #place_in, #place_info, #place_slaves, #set_focus, #thread_wait_destroy, #thread_wait_visibility, #tktrans_get_image, #tktrans_set_image, to_eval, #wait_destroy, #wait_visibility

Methods included from TkBindCore

#bind, #bind_append, #bind_remove, #bindinfo

Methods included from Busy

#busy, #busy_cget, #busy_configinfo, #busy_configure, #busy_current?, #busy_current_configinfo, #busy_forget, #busy_status, current, forget, hold, method_missing, status

Methods included from TkCore

#_tk_call_to_list_core, #after, #after_cancel, #after_idle, #appname, #appsend, #appsend_deny, #appsend_displayof, callback, #callback_break, #callback_continue, #callback_return, #chooseColor, #chooseDirectory, #do_one_event, #event_generate, #getMultipleOpenFile, #getMultipleSaveFile, #getOpenFile, #getSaveFile, #get_eventloop_tick, #get_eventloop_weight, #get_no_event_wait, #inactive, #inactive_displayof, #info, #ip_eval, #ip_eval_with_enc, #ip_eval_without_enc, #ip_invoke, #ip_invoke_with_enc, #ip_invoke_without_enc, #is_mainloop?, #load_cmd_on_ip, #mainloop, #mainloop_exist?, #mainloop_thread?, #mainloop_watchdog, #messageBox, #rb_appsend, #rb_appsend_displayof, #reset_inactive, #reset_inactive_displayof, #restart, #scaling, #scaling_displayof, #set_eventloop_tick, #set_eventloop_weight, #set_no_event_wait, #tk_call, #tk_call_to_list, #tk_call_to_list_with_enc, #tk_call_to_list_without_enc, #tk_call_to_simplelist, #tk_call_to_simplelist_with_enc, #tk_call_to_simplelist_without_enc, #tk_call_with_enc, #tk_call_without_enc, #windowingsystem

Methods included from TkComm

_at, _callback_entry?, _callback_entry_class?, _curr_cmd_id, _fromUTF8, _genobj_for_tkwidget, _next_cmd_id, _toUTF8, array2tk_list, #bind, #bind_all, #bind_append, #bind_append_all, #bind_remove, #bind_remove_all, #bindinfo, #bindinfo_all, bool, image_obj, #install_cmd, install_cmd, list, num_or_nil, num_or_str, number, procedure, simplelist, slice_ary, string, #subst, tk_tcl2ruby, uninstall_cmd, #uninstall_cmd, window

Methods included from TkEvent

#install_bind, #install_bind_for_event_class

Methods included from TkWinfo

appname, atom, atomname, cells, children, classname, colormapfull, containing, depth, exist?, fpixels, geometry, height, id, interps, manager, mapped?, parent, pixels, pointerx, pointerxy, pointery, reqheight, reqwidth, rgb, rootx, rooty, screen, screencells, screendepth, screenheight, screenmmheight, screenmmwidth, screenvisual, screenwidth, server, toplevel, viewable, visual, visualid, visualsavailable, vrootheight, vrootwidth, vrootx, vrooty, widget, width, #winfo_appname, #winfo_atom, #winfo_atomname, #winfo_cells, #winfo_children, #winfo_classname, #winfo_colormapfull, #winfo_containing, #winfo_depth, #winfo_exist?, #winfo_fpixels, #winfo_geometry, #winfo_height, #winfo_id, #winfo_interps, #winfo_manager, #winfo_mapped?, #winfo_parent, #winfo_pixels, #winfo_pointerx, #winfo_pointerxy, #winfo_pointery, #winfo_reqheight, #winfo_reqwidth, #winfo_rgb, #winfo_rootx, #winfo_rooty, #winfo_screen, #winfo_screencells, #winfo_screendepth, #winfo_screenheight, #winfo_screenmmheight, #winfo_screenmmwidth, #winfo_screenvisual, #winfo_screenwidth, #winfo_server, #winfo_toplevel, #winfo_viewable, #winfo_visual, #winfo_visualid, #winfo_visualsavailable, #winfo_vrootheight, #winfo_vrootwidth, #winfo_vrootx, #winfo_vrooty, #winfo_widget, #winfo_width, #winfo_x, #winfo_y, x, y

Methods included from Tk

BinaryString, EncodedString, #Grid, #Pack, #Place, UTF8_String, __create_widget_set__, __disable_toplevel_control__, __import_toplevel_aliases__, __regist_toplevel_aliases__, __remove_toplevel_aliases__, __reset_toplevel_owner__, __set_loaded_toplevel_aliases__, __set_toplevel_aliases__, __toplevel_alias_setup_proc__, add_kinsoku, bell, bell_on_display, const_missing, current_grabs, cursor_display, default_widget_set, default_widget_set=, delete_kinsoku, destroy, #encoding, #encoding=, errorCode, errorInfo, exit, focus, focus_lastfor, focus_next, focus_prev, focus_to, fromUTF8, grid, grid_forget, has_mainwindow?, load_tcllibrary, load_tclscript, load_tclscript_rsrc, load_tclscript_rsrcid, lower_window, pack, pack_forget, pkgconfig_get, pkgconfig_list, place, place_forget, raise_window, #root, show_kinsoku, sleep, strictMotif, subst_tk_backslash, subst_utf_backslash, tcl_pkgconfig_get, tcl_pkgconfig_list, thread_update, thread_update_idletasks, tk_pkgconfig_get, tk_pkgconfig_list, toUTF8, to_backslash_sequence, toplevel_aliases_on_widget_set, ungrid, unload_tcllibrary, unpack, unplace, update, #update, update_idletasks, utf_to_backslash, utf_to_backslash_sequence, wakeup, widget_set_symbols

Methods included from Encoding

#default_encoding=, #encoding=, #encoding_convertfrom, #encoding_convertto, #encoding_dirs, #encoding_dirs=, #encoding_name, #encoding_names, #encoding_obj, #encoding_objs, #encoding_system=, #encoding_system_name, #encoding_system_obj, #force_default_encoding, #force_default_encoding=, #force_default_encoding?, #tk_encoding_names

Methods included from TkDND::DND

#dnd_bindsource, #dnd_bindsource_info, #dnd_bindtarget, #dnd_bindtarget_info, #dnd_clearsource, #dnd_cleartarget, #dnd_drag, version

Methods included from TkDND::Shape

package_name, package_patchlevel, package_version, #shape_bounds, #shape_get, #shape_offset, #shape_set, #shape_update, version

Methods inherited from TkObject

#destroy, #epath, #event_generate, #method_missing, #path, #tk_send, #tk_send_to_list, #tk_send_to_list_with_enc, #tk_send_to_list_without_enc, #tk_send_to_simplelist, #tk_send_to_simplelist_with_enc, #tk_send_to_simplelist_without_enc, #tk_send_with_enc, #tk_send_without_enc, #to_eval

Methods included from TkConfigMethod

#[], #[]=, __IGNORE_UNKNOWN_CONFIGURE_OPTION__, #__check_available_configure_options, __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!, #cget, #cget_strict, #cget_tkstring, #config_hash_kv, #configinfo, #configure, #configure_cmd, #current_configinfo

Methods included from TkTreatFont

#font_configinfo, #font_configure, #font_copy, #kanjifont_configure, #kanjifont_copy, #latinfont_configure, #latinfont_copy

Methods inherited from TkKernel

new

Constructor Details

This class inherits a constructor from TkWindow

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class TkObject

Instance Method Details

#__BLT_EPS_item_boolval_optkeysObject



26
# File 'lib/tkextlib/blt/eps.rb', line 26

alias __BLT_EPS_item_boolval_optkeys __item_boolval_optkeys

#__BLT_EPS_item_strval_optkeysObject



18
# File 'lib/tkextlib/blt/eps.rb', line 18

alias __BLT_EPS_item_strval_optkeys __item_strval_optkeys

#__destroy_hook__Object



53
54
55
# File 'lib/tk/canvas.rb', line 53

def __destroy_hook__
  TkcItem::CItemID_TBL.delete(@path)
end

#addtag(tag, mode, *args) ⇒ Object



98
99
100
101
102
103
104
105
# File 'lib/tk/canvas.rb', line 98

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

#addtag_above(tagOrId, target) ⇒ Object



106
107
108
# File 'lib/tk/canvas.rb', line 106

def addtag_above(tagOrId, target)
  addtag(tagOrId, 'above', tagid(target))
end

#addtag_all(tagOrId) ⇒ Object



109
110
111
# File 'lib/tk/canvas.rb', line 109

def addtag_all(tagOrId)
  addtag(tagOrId, 'all')
end

#addtag_below(tagOrId, target) ⇒ Object



112
113
114
# File 'lib/tk/canvas.rb', line 112

def addtag_below(tagOrId, target)
  addtag(tagOrId, 'below', tagid(target))
end

#addtag_closest(tagOrId, x, y, halo = None, start = None) ⇒ Object



115
116
117
# File 'lib/tk/canvas.rb', line 115

def addtag_closest(tagOrId, x, y, halo=None, start=None)
  addtag(tagOrId, 'closest', x, y, halo, start)
end

#addtag_enclosed(tagOrId, x1, y1, x2, y2) ⇒ Object



118
119
120
# File 'lib/tk/canvas.rb', line 118

def addtag_enclosed(tagOrId, x1, y1, x2, y2)
  addtag(tagOrId, 'enclosed', x1, y1, x2, y2)
end

#addtag_overlapping(tagOrId, x1, y1, x2, y2) ⇒ Object



121
122
123
# File 'lib/tk/canvas.rb', line 121

def addtag_overlapping(tagOrId, x1, y1, x2, y2)
  addtag(tagOrId, 'overlapping', x1, y1, x2, y2)
end

#addtag_withtag(tagOrId, tag) ⇒ Object



124
125
126
# File 'lib/tk/canvas.rb', line 124

def addtag_withtag(tagOrId, tag)
  addtag(tagOrId, 'withtag', tagid(tag))
end

#bbox(tagOrId, *tags) ⇒ Object



128
129
130
131
# File 'lib/tk/canvas.rb', line 128

def bbox(tagOrId, *tags)
  list(tk_send_without_enc('bbox', tagid(tagOrId),
                           *tags.collect{|t| tagid(t)}))
end

#canvasx(screen_x, *args) ⇒ Object Also known as: canvas_x



172
173
174
175
# File 'lib/tk/canvas.rb', line 172

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

#canvasy(screen_y, *args) ⇒ Object Also known as: canvas_y



176
177
178
179
# File 'lib/tk/canvas.rb', line 176

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

#coords(tag, *args) ⇒ Object



183
184
185
186
187
188
189
190
# File 'lib/tk/canvas.rb', line 183

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(type, *args) ⇒ Object

create a canvas item without creating a TkcItem object



87
88
89
90
91
92
93
94
95
96
# File 'lib/tk/canvas.rb', line 87

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

#create_itemobj_from_id(idnum) ⇒ Object



613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
# File 'lib/tk/canvas.rb', line 613

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

#dchars(tag, first, last = None) ⇒ Object



192
193
194
195
196
# File 'lib/tk/canvas.rb', line 192

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

#delete(*args) ⇒ Object Also known as: remove



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'lib/tk/canvas.rb', line 198

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

#dtag(tag, tag_to_del = None) ⇒ Object Also known as: deltag



219
220
221
222
# File 'lib/tk/canvas.rb', line 219

def dtag(tag, tag_to_del=None)
  tk_send_without_enc('dtag', tagid(tag), tagid(tag_to_del))
  self
end

#find(mode, *args) ⇒ Object



225
226
227
228
229
# File 'lib/tk/canvas.rb', line 225

def find(mode, *args)
  list(tk_send_without_enc('find', mode, *args)).collect!{|id|
    TkcItem.id2obj(self, id)
  }
end

#find_above(target) ⇒ Object



230
231
232
# File 'lib/tk/canvas.rb', line 230

def find_above(target)
  find('above', tagid(target))
end

#find_allObject



233
234
235
# File 'lib/tk/canvas.rb', line 233

def find_all
  find('all')
end

#find_below(target) ⇒ Object



236
237
238
# File 'lib/tk/canvas.rb', line 236

def find_below(target)
  find('below', tagid(target))
end

#find_closest(x, y, halo = None, start = None) ⇒ Object



239
240
241
# File 'lib/tk/canvas.rb', line 239

def find_closest(x, y, halo=None, start=None)
  find('closest', x, y, halo, start)
end

#find_enclosed(x1, y1, x2, y2) ⇒ Object



242
243
244
# File 'lib/tk/canvas.rb', line 242

def find_enclosed(x1, y1, x2, y2)
  find('enclosed', x1, y1, x2, y2)
end

#find_overlapping(x1, y1, x2, y2) ⇒ Object



245
246
247
# File 'lib/tk/canvas.rb', line 245

def find_overlapping(x1, y1, x2, y2)
  find('overlapping', x1, y1, x2, y2)
end

#find_withtag(tag) ⇒ Object



248
249
250
# File 'lib/tk/canvas.rb', line 248

def find_withtag(tag)
  find('withtag', tag)
end

#gettags(tagOrId) ⇒ Object



266
267
268
269
270
# File 'lib/tk/canvas.rb', line 266

def gettags(tagOrId)
  list(tk_send_without_enc('gettags', tagid(tagOrId))).collect{|tag|
    TkcTag.id2obj(self, tag)
  }
end

#icursor(tagOrId, index) ⇒ Object



272
273
274
275
# File 'lib/tk/canvas.rb', line 272

def icursor(tagOrId, index)
  tk_send_without_enc('icursor', tagid(tagOrId), index)
  self
end

#imove(tagOrId, idx, x, y) ⇒ Object Also known as: i_move



277
278
279
280
# File 'lib/tk/canvas.rb', line 277

def imove(tagOrId, idx, x, y)
  tk_send_without_enc('imove', tagid(tagOrId), idx, x, y)
  self
end

#index(tagOrId, idx) ⇒ Object



283
284
285
# File 'lib/tk/canvas.rb', line 283

def index(tagOrId, idx)
  number(tk_send_without_enc('index', tagid(tagOrId), idx))
end

#insert(tagOrId, index, string) ⇒ Object



287
288
289
290
291
# File 'lib/tk/canvas.rb', line 287

def insert(tagOrId, index, string)
  tk_send_without_enc('insert', tagid(tagOrId), index,
                      _get_eval_enc_str(string))
  self
end

#itembind(tag, context, *args) ⇒ Object

def itembind(tag, context, cmd=Proc.new, *args)

_bind([path, "bind", tagid(tag)], context, cmd, *args)
self

end



137
138
139
140
141
142
143
144
145
146
# File 'lib/tk/canvas.rb', line 137

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

#itembind_append(tag, context, *args) ⇒ Object

def itembind_append(tag, context, cmd=Proc.new, *args)

_bind_append([path, "bind", tagid(tag)], context, cmd, *args)
self

end



152
153
154
155
156
157
158
159
160
161
# File 'lib/tk/canvas.rb', line 152

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

#itembind_remove(tag, context) ⇒ Object



163
164
165
166
# File 'lib/tk/canvas.rb', line 163

def itembind_remove(tag, context)
  _bind_remove([path, "bind", tagid(tag)], context)
  self
end

#itembindinfo(tag, context = nil) ⇒ Object



168
169
170
# File 'lib/tk/canvas.rb', line 168

def itembindinfo(tag, context=nil)
  _bindinfo([path, "bind", tagid(tag)], context)
end

#itemfocus(tagOrId = nil) ⇒ Object



252
253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/tk/canvas.rb', line 252

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

#itemtype(tag) ⇒ Object



609
610
611
# File 'lib/tk/canvas.rb', line 609

def itemtype(tag)
  TkcItem.type2class(tk_send('type', tagid(tag)))
end

#lower(tag, below = nil) ⇒ Object

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


532
533
534
535
536
537
538
539
# File 'lib/tk/canvas.rb', line 532

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

#move(tag, dx, dy) ⇒ Object



541
542
543
544
# File 'lib/tk/canvas.rb', line 541

def move(tag, dx, dy)
  tk_send_without_enc('move', tagid(tag), dx, dy)
  self
end

#moveto(tag, x, y) ⇒ Object Also known as: move_to



546
547
548
549
550
# File 'lib/tk/canvas.rb', line 546

def moveto(tag, x, y)
  # Tcl/Tk 8.6 or later
  tk_send_without_enc('moveto', tagid(tag), x, y)
  self
end

#postscript(keys) ⇒ Object



553
554
555
# File 'lib/tk/canvas.rb', line 553

def postscript(keys)
  tk_send("postscript", *hash_kv(keys))
end

#raise(tag, above = nil) ⇒ Object



557
558
559
560
561
562
563
564
# File 'lib/tk/canvas.rb', line 557

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

#rchars(tag, first, last, str_or_coords) ⇒ Object Also known as: replace_chars, replace_coords



566
567
568
569
570
571
# File 'lib/tk/canvas.rb', line 566

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

#scale(tag, x, y, xs, ys) ⇒ Object



575
576
577
578
# File 'lib/tk/canvas.rb', line 575

def scale(tag, x, y, xs, ys)
  tk_send_without_enc('scale', tagid(tag), x, y, xs, ys)
  self
end

#scan_dragto(x, y, gain = None) ⇒ Object



584
585
586
587
# File 'lib/tk/canvas.rb', line 584

def scan_dragto(x, y, gain=None)
  tk_send_without_enc('scan', 'dragto', x, y, gain)
  self
end

#scan_mark(x, y) ⇒ Object



580
581
582
583
# File 'lib/tk/canvas.rb', line 580

def scan_mark(x, y)
  tk_send_without_enc('scan', 'mark', x, y)
  self
end

#select(mode, *args) ⇒ Object



589
590
591
592
# File 'lib/tk/canvas.rb', line 589

def select(mode, *args)
  r = tk_send_without_enc('select', mode, *args)
  (mode == 'item')? TkcItem.id2obj(self, r): self
end

#select_adjust(tagOrId, index) ⇒ Object



593
594
595
# File 'lib/tk/canvas.rb', line 593

def select_adjust(tagOrId, index)
  select('adjust', tagid(tagOrId), index)
end

#select_clearObject



596
597
598
# File 'lib/tk/canvas.rb', line 596

def select_clear
  select('clear')
end

#select_from(tagOrId, index) ⇒ Object



599
600
601
# File 'lib/tk/canvas.rb', line 599

def select_from(tagOrId, index)
  select('from', tagid(tagOrId), index)
end

#select_itemObject



602
603
604
# File 'lib/tk/canvas.rb', line 602

def select_item
  select('item')
end

#select_to(tagOrId, index) ⇒ Object



605
606
607
# File 'lib/tk/canvas.rb', line 605

def select_to(tagOrId, index)
  select('to', tagid(tagOrId), index)
end