diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/ext/tk/lib/tkextlib/tkDND/shape.rb |
Fresh start
Diffstat (limited to 'jni/ruby/ext/tk/lib/tkextlib/tkDND/shape.rb')
-rw-r--r-- | jni/ruby/ext/tk/lib/tkextlib/tkDND/shape.rb | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/jni/ruby/ext/tk/lib/tkextlib/tkDND/shape.rb b/jni/ruby/ext/tk/lib/tkextlib/tkDND/shape.rb new file mode 100644 index 0000000..d44068e --- /dev/null +++ b/jni/ruby/ext/tk/lib/tkextlib/tkDND/shape.rb @@ -0,0 +1,125 @@ +# +# tkextlib/tkDND/shape.rb +# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) +# + +require 'tk' + +# call setup script for general 'tkextlib' libraries +require 'tkextlib/setup.rb' + +# call setup script +require 'tkextlib/tkDND/setup.rb' + +# TkPackage.require('Shape', '0.3') +TkPackage.require('Shape') + +module Tk + module TkDND + module Shape + extend TkCore + + PACKAGE_NAME = 'Shape'.freeze + def self.package_name + PACKAGE_NAME + end + +=begin + def self.package_version + begin + TkPackage.require('Shape') + rescue + '' + end + end +=end + class << self + def package_version + Tk.tk_call('set', 'shape_version') + end + alias shape_version package_version + + def package_patchlevel + Tk.tk_call('set', 'shape_patchLevel') + end + alias shape_patchlevel package_patchlevel + + def version + tk_call('shape', 'version') + end + alias xshape_version version + end + + ############################ + + def shape_bounds(kind=nil) + if kind + ret = tk_call('shape', 'bounds', @path, "-#{kind}") + else + ret = tk_call('shape', 'bounds', @path) + end + if ret == "" + nil + else + list(ret) + end + end + + def shape_get(kind=nil) + if kind + list(tk_call('shape', 'get', @path, "-#{kind}")) + else + list(tk_call('shape', 'get', @path)) + end + end + + def shape_offset(x, y, kind=nil) + if kind + tk_call('shape', 'get', @path, "-#{kind}", x, y) + else + tk_call('shape', 'get', @path, x, y) + end + self + end + + def _parse_shapespec_param(args) + cmd = [] + + kind_keys = ['bounding', 'clip', 'both'] + offset_keys = ['offset'] + srckind_keys = ['bitmap', 'rectangles', 'reset', 'test', 'window'] + + cmd << "-#{args.shift}" if kind_keys.member?(args[0].to_s) + + if offset_keys.member?(args[0].to_s) + cmd << "-#{args.shift}" + cmd << args.shift # xOffset + cmd << args.shift # yOffset + end + + if srckind_keys.member?(args[0].to_s) + cmd << "-#{args.shift}" + end + + cmd.concat(args) + + cmd + end + private :_parse_shapespec_param + + def shape_set(*args) # ?kind? ?offset <x> <y>? srckind ?arg ...? + tk_call('shape', 'set', @path, *(_parse_shapespec_param(args))) + self + end + + def shape_update(op, *args) # ?kind? ?offset <x> <y>? srckind ?arg ...? + tk_call('shape', 'update', @path, op, *(_parse_shapespec_param(args))) + self + end + end + end +end + +class TkWindow + include Tk::TkDND::Shape +end |