Class: TkCanvas

Inherits:
TkWindow show all
Includes:
Tk::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 Tk

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

Constants included from TkCore

TkCore::EventFlag, TkCore::INTERP, TkCore::WIDGET_DESTROY_HOOK

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::TkDND::Shape

Tk::TkDND::Shape::PACKAGE_NAME

Instance Method Summary collapse

Methods included from Tk::Scrollable

#autoscroll, #unautoscroll

Methods included from Tk::YScrollable

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

Methods included from Tk::XScrollable

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

Methods included from TkItemConfigMethod

#current_itemconfiginfo, #itemcget, #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_str, #num_or_str, number, #number, string, #string, uninstall_cmd

Methods included from TkTreatItemFont

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

Methods inherited from TkWindow

#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_bbox, #grid_columnconfig, #grid_columnconfiginfo, #grid_config, #grid_forget, #grid_in, #grid_info, #grid_location, #grid_propagate, #grid_remove, #grid_rowconfig, #grid_rowconfiginfo, #grid_size, #grid_slaves, #initialize, #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 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, UTF8_String, add_kinsoku, bell, bell_on_display, const_missing, current_grabs, cursor_display, 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, 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, ungrid, unload_tcllibrary, unpack, unplace, #update, update, update_idletasks, utf_to_backslash, utf_to_backslash_sequence

Methods included from Tk::Encoding

#encoding, #encoding=, #encoding_convertfrom, #encoding_convertto, #encoding_dirs, #encoding_dirs=, #encoding_names, #encoding_system, #encoding_system=

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, list, num_or_str, number, procedure, simplelist, string, #subst, tk_tcl2ruby, uninstall_cmd, window

Methods included from TkEvent

#install_bind, #install_bind_for_event_class

Methods included from Tk::TkDND::DND

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

Methods included from Tk::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

#[], #[]=, #cget, #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



51
52
53
# File 'lib/tk/canvas.rb', line 51

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

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



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

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



98
99
100
# File 'lib/tk/canvas.rb', line 98

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

#addtag_all(tagOrId) ⇒ Object



101
102
103
# File 'lib/tk/canvas.rb', line 101

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

#addtag_below(tagOrId, target) ⇒ Object



104
105
106
# File 'lib/tk/canvas.rb', line 104

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

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



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

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



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

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

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



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

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

#addtag_withtag(tagOrId, tag) ⇒ Object



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

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

#bbox(tagOrId, *tags) ⇒ Object



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

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

#canvasx(screen_x, *args) ⇒ Object



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

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



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

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



173
174
175
176
177
178
179
180
# File 'lib/tk/canvas.rb', line 173

def coords(tag, *args)
  if args == []
    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



85
86
87
# File 'lib/tk/canvas.rb', line 85

def create(type, *args)
  type.create(self, *args)
end

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



182
183
184
185
186
# File 'lib/tk/canvas.rb', line 182

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



188
189
190
191
192
193
194
195
196
197
198
199
200
# File 'lib/tk/canvas.rb', line 188

def delete(*args)
  if TkcItem::CItemID_TBL[self.path]
    args.each{|tag|
      find('withtag', tag).each{|item|
        if item.kind_of?(TkcItem)
          TkcItem::CItemID_TBL[self.path].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



203
204
205
206
# File 'lib/tk/canvas.rb', line 203

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

#find(mode, *args) ⇒ Object



209
210
211
212
213
# File 'lib/tk/canvas.rb', line 209

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

#find_above(target) ⇒ Object



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

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

#find_allObject



217
218
219
# File 'lib/tk/canvas.rb', line 217

def find_all
  find('all')
end

#find_below(target) ⇒ Object



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

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

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



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

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

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



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

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

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



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

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

#find_withtag(tag) ⇒ Object



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

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

#gettags(tagOrId) ⇒ Object



250
251
252
253
254
# File 'lib/tk/canvas.rb', line 250

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

#icursor(tagOrId, index) ⇒ Object



256
257
258
259
# File 'lib/tk/canvas.rb', line 256

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

#index(tagOrId, idx) ⇒ Object



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

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

#insert(tagOrId, index, string) ⇒ Object



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

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



129
130
131
132
133
134
135
136
137
138
# File 'lib/tk/canvas.rb', line 129

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



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

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



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

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

#itembindinfo(tag, context = nil) ⇒ Object



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

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

#itemfocus(tagOrId = nil) ⇒ Object



236
237
238
239
240
241
242
243
244
245
246
247
248
# File 'lib/tk/canvas.rb', line 236

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



571
572
573
# File 'lib/tk/canvas.rb', line 571

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


510
511
512
513
514
515
516
517
# File 'lib/tk/canvas.rb', line 510

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, x, y) ⇒ Object



519
520
521
522
# File 'lib/tk/canvas.rb', line 519

def move(tag, x, y)
  tk_send_without_enc('move', tagid(tag), x, y)
  self
end

#postscript(keys) ⇒ Object



524
525
526
# File 'lib/tk/canvas.rb', line 524

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

#raise(tag, above = nil) ⇒ Object



528
529
530
531
532
533
534
535
# File 'lib/tk/canvas.rb', line 528

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

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



537
538
539
540
# File 'lib/tk/canvas.rb', line 537

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



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

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

#scan_mark(x, y) ⇒ Object



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

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

#select(mode, *args) ⇒ Object



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

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



555
556
557
# File 'lib/tk/canvas.rb', line 555

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

#select_clearObject



558
559
560
# File 'lib/tk/canvas.rb', line 558

def select_clear
  select('clear')
end

#select_from(tagOrId, index) ⇒ Object



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

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

#select_itemObject



564
565
566
# File 'lib/tk/canvas.rb', line 564

def select_item
  select('item')
end

#select_to(tagOrId, index) ⇒ Object



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

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