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, Checkbutton, CloneMenu, Fontchooser, JAPANIZED_TK, LIBRARY_PATH, Labelframe, MenuButton, OptionMenuButton, PACKAGE_PATH, Panedwindow, RELEASE_DATE, Radiobutton, 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

__item_cget_cmd, __item_config_cmd, __item_confinfo_cmd, #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__, _replace_toplevel_aliases, add_kinsoku, backup_current_topdef, bell, bell_on_display, const_missing, current_grabs, cursor_display, default_widget_set, default_widget_set=, define_topalias, define_topobj, delete_kinsoku, destroy, 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, regist_sym_for_loaded_file, replace_topalias, replace_topobj, #root, set_topalias, 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, topalias_defined?, toplevel_aliases_on_widget_set, topobj_defined?, 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



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

alias __BLT_EPS_item_boolval_optkeys __item_boolval_optkeys

#__BLT_EPS_item_strval_optkeysObject



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

alias __BLT_EPS_item_strval_optkeys __item_strval_optkeys

#__destroy_hook__Object



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

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

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



99
100
101
102
103
104
105
106
# File '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

#addtag_above(tagOrId, target) ⇒ Object



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

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

#addtag_all(tagOrId) ⇒ Object



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

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

#addtag_below(tagOrId, target) ⇒ Object



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

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

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



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

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



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

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

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



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

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

#addtag_withtag(tagOrId, tag) ⇒ Object



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

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

#bbox(tagOrId, *tags) ⇒ Object



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

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



165
166
167
168
# File 'lib/tk/canvas.rb', line 165

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



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

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



176
177
178
179
180
181
182
183
# File 'lib/tk/canvas.rb', line 176

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



88
89
90
91
92
93
94
95
96
97
# File '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

#create_itemobj_from_id(idnum) ⇒ Object



606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
# File 'lib/tk/canvas.rb', line 606

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



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

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



191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/tk/canvas.rb', line 191

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



212
213
214
215
# File 'lib/tk/canvas.rb', line 212

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

#find(mode, *args) ⇒ Object



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

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

#find_above(target) ⇒ Object



223
224
225
# File 'lib/tk/canvas.rb', line 223

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

#find_allObject



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

def find_all
  find('all')
end

#find_below(target) ⇒ Object



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

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

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



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

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

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



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

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

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



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

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

#find_withtag(tag) ⇒ Object



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

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

#gettags(tagOrId) ⇒ Object



259
260
261
262
263
# File 'lib/tk/canvas.rb', line 259

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

#icursor(tagOrId, index) ⇒ Object



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

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



270
271
272
273
# File 'lib/tk/canvas.rb', line 270

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

#index(tagOrId, idx) ⇒ Object



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

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

#insert(tagOrId, index, string) ⇒ Object



280
281
282
283
284
# File 'lib/tk/canvas.rb', line 280

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

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



134
135
136
137
138
139
140
141
142
143
# File 'lib/tk/canvas.rb', line 134

def itembind(tag, context, *args, &block)
  # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
  if TkComm._callback_entry?(args[0]) || !block
    cmd = args.shift
  else
    cmd = block
  end
  _bind([path, "bind", tagid(tag)], context, cmd, *args)
  self
end

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



145
146
147
148
149
150
151
152
153
154
# File 'lib/tk/canvas.rb', line 145

def itembind_append(tag, context, *args, &block)
  # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
  if TkComm._callback_entry?(args[0]) || !block
    cmd = args.shift
  else
    cmd = block
  end
  _bind_append([path, "bind", tagid(tag)], context, cmd, *args)
  self
end

#itembind_remove(tag, context) ⇒ Object



156
157
158
159
# File 'lib/tk/canvas.rb', line 156

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

#itembindinfo(tag, context = nil) ⇒ Object



161
162
163
# File 'lib/tk/canvas.rb', line 161

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

#itemfocus(tagOrId = nil) ⇒ Object



245
246
247
248
249
250
251
252
253
254
255
256
257
# File 'lib/tk/canvas.rb', line 245

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



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

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


525
526
527
528
529
530
531
532
# File 'lib/tk/canvas.rb', line 525

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



534
535
536
537
# File 'lib/tk/canvas.rb', line 534

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



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

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



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

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

#raise(tag, above = nil) ⇒ Object



550
551
552
553
554
555
556
557
# File 'lib/tk/canvas.rb', line 550

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



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

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.kind_of? Array
  tk_send_without_enc('rchars', tagid(tag), first, last, str_or_coords)
  self
end

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



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

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



577
578
579
580
# File 'lib/tk/canvas.rb', line 577

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

#scan_mark(x, y) ⇒ Object



573
574
575
576
# File 'lib/tk/canvas.rb', line 573

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

#select(mode, *args) ⇒ Object



582
583
584
585
# File 'lib/tk/canvas.rb', line 582

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



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

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

#select_clearObject



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

def select_clear
  select('clear')
end

#select_from(tagOrId, index) ⇒ Object



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

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

#select_itemObject



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

def select_item
  select('item')
end

#select_to(tagOrId, index) ⇒ Object



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

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