Class: Tk::Canvas

Inherits:
TkWindow show all
Includes:
Scrollable, TkCanvasItemConfig
Defined in:
ext/lib/tk/canvas.rb,
ext/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

AUTO_PATH, Checkbutton, CloneMenu, 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 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 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, #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

_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 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, __set_toplevel_aliases__, add_kinsoku, bell, bell_on_display, const_missing, current_grabs, cursor_display, default_widget_set, default_widget_set=, 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, #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, ungrid, unload_tcllibrary, unpack, unplace, #update, update, update_idletasks, utf_to_backslash, utf_to_backslash_sequence, wakeup

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

Methods included from TkEvent

#install_bind, #install_bind_for_event_class

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, #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 'ext/lib/tkextlib/blt/eps.rb', line 26

alias __BLT_EPS_item_boolval_optkeys __item_boolval_optkeys

#__BLT_EPS_item_strval_optkeysObject



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

alias __BLT_EPS_item_strval_optkeys __item_strval_optkeys

#__destroy_hook__Object



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

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

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



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

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



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

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

#addtag_all(tagOrId) ⇒ Object



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

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

#addtag_below(tagOrId, target) ⇒ Object



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

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

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



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

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



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

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

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



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

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

#addtag_withtag(tagOrId, tag) ⇒ Object



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

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

#bbox(tagOrId, *tags) ⇒ Object



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

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



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

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



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

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



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

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



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

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

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



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

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



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

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



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

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

#find(mode, *args) ⇒ Object



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

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

#find_above(target) ⇒ Object



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

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

#find_allObject



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

def find_all
  find('all')
end

#find_below(target) ⇒ Object



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

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

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



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

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

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



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

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

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



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

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

#find_withtag(tag) ⇒ Object



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

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

#gettags(tagOrId) ⇒ Object



257
258
259
260
261
# File 'ext/lib/tk/canvas.rb', line 257

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

#icursor(tagOrId, index) ⇒ Object



263
264
265
266
# File 'ext/lib/tk/canvas.rb', line 263

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

#index(tagOrId, idx) ⇒ Object



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

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

#insert(tagOrId, index, string) ⇒ Object



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

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



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

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



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

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



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

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

#itembindinfo(tag, context = nil) ⇒ Object



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

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

#itemfocus(tagOrId = nil) ⇒ Object



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

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



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

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


517
518
519
520
521
522
523
524
# File 'ext/lib/tk/canvas.rb', line 517

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



526
527
528
529
# File 'ext/lib/tk/canvas.rb', line 526

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

#postscript(keys) ⇒ Object



531
532
533
# File 'ext/lib/tk/canvas.rb', line 531

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

#raise(tag, above = nil) ⇒ Object



535
536
537
538
539
540
541
542
# File 'ext/lib/tk/canvas.rb', line 535

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



544
545
546
547
# File 'ext/lib/tk/canvas.rb', line 544

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



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

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

#scan_mark(x, y) ⇒ Object



549
550
551
552
# File 'ext/lib/tk/canvas.rb', line 549

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

#select(mode, *args) ⇒ Object



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

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



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

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

#select_clearObject



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

def select_clear
  select('clear')
end

#select_from(tagOrId, index) ⇒ Object



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

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

#select_itemObject



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

def select_item
  select('item')
end

#select_to(tagOrId, index) ⇒ Object



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

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