module Tkar
Constants
- DEGREES_TO_RADIANS
- RADIANS_TO_DEGREES
- VERSION
Public Class Methods
run(argv, opts)
click to toggle source
# File lib/tkar.rb 13 def self.run(argv, opts) 14 verbose = opts["v"] 15 title = argv.empty? ? "stdin" : argv.join(":") 16 root = TkRoot.new { title "Tkar @ #{title}"; iconname "Tkar" } 17 root.resizable true, true 18 window = Window.new(root, opts) 19 canvas = window.canvas 20 21 thread = Thread.new do 22 movie = false 23 if movie 24 win_id = root.winfo_id 25 pid = Process.pid 26 end 27 28 persist = opts["persist"] 29 30 f = MessageStream.for(argv, opts) 31 window.def_message_out do |msg| 32 begin 33 f.put_msg msg if f 34 $stderr.puts msg if verbose 35 rescue MessageStream::StreamClosed 36 rescue Errno::ECONNABORTED, Errno::ECONNRESET 37 raise unless persist 38 end 39 end 40 41 cmd = args = nil 42 43 update_count = 0 44 start_time = Time.now 45 46 j = 0 47 begin 48 loop do 49 cmd, *args = f.get_cmd 50 break if cmd == "done" 51 exit if cmd == "exit" 52 if cmd == "update" 53 f.put_msg "update" ## optional? 54 update_count += 1 55 if verbose and update_count % 100 == 0 56 rate = update_count / (Time.now - start_time) 57 $stderr.puts "update rate: %10.2f updates per second" % rate 58 update_count = 0 59 start_time = Time.now 60 end 61 end 62 r = canvas.send(cmd, *args) 63 # f.put_msg return_value if return_value ? 64 65 if movie and cmd == "update" 66 # add a frame to the movie 67 mcmd = 68 "import -window #{win_id} \"tmp/#{pid}_frame_%05d.miff\"" % j 69 j += 1 70 rslt = system(mcmd) 71 unless rslt 72 puts $? 73 exit 74 end 75 end 76 end 77 rescue MessageStream::StreamClosed 78 f.put_msg "stream closed" 79 exit unless persist 80 canvas.update 81 rescue Recoverable => ex 82 f.put_msg ex 83 retry 84 rescue Errno::ECONNABORTED, Errno::ECONNRESET 85 raise unless persist 86 rescue => ex 87 begin 88 f.put_msg ex 89 f.put_msg "exiting" 90 rescue Errno::ECONNABORTED, Errno::ECONNRESET 91 end 92 $stderr.puts "#{ex.class}: #{ex.message}", ex.backtrace.join("\n ") 93 raise unless persist 94 end 95 end 96 97 # if /mswin32/ =~ RUBY_PLATFORM 98 # 3.times do 99 # timer = TkTimer.new(1) do 100 # 3.times {thread.run} 101 # end 102 # 103 # timer.start 104 # end 105 # end 106 107 Tk.mainloop 108 end