Creating ruby gui applications – an introduction to ruby shoes

As part of my effort to detect objects using opencvI have found myself performing a mind numbing task and as every lazy programmer knows this is the time to build a tool.

After a bit of investigation into the various gui libraries for ruby I have found one that seems pretty good called Ruby Shoes. There seem to be a few variants of this particular library. Strangely the classic Red Ruby Shoes version does not act like a regular ruby library. It seems to be a runtime that uses ruby. The Green Shoes variant however is a straightforward ruby library. You can gem install green_shoes and get up and running straight away.

A gui application in Ruby Shoes is called a shoe app and is started by calling:

  Shoes.app do
    # application code goes here
    title "Hello World!"
  end

As I want to create an image selection tool I need to be able to track mouse clicks, movements and releases and then draw a rectangle as this is going on.

After playing around for a while I came up with this:

  require 'green_shoes'
  Shoes.app  do
    title "Selection tool"
    image("your_image.jpg").click do |button, click_left, click_top|
      mouse_down = true
      release do
        mouse_down = false
      end

      nofill
      @selection = rect :left => mouse[1], :top => mouse[2], :width => 1, :height => 1

      motion do |move_left, move_top|
        if mouse_down
          width =  move_left - click_left
          height =  move_top - click_top

          width = 1 if width < 1
          height = 1 if height < 1

          @selection.style(:width => width, :height => height)
        end
      end
    end
  end

There are probably more efficient ways to handle the release but this was the best I could come up with in half an hour.

I found the manual quite helpful to figure all this out.