Exactly. I cannot guess whether is it desirable for some reasons to have the ability of passing internal opts to the method generated for a custom widget. But anyway it seems there should be a chapter in docs about customizing widgets in general.
Two gotchas more and I'll write a tutorial ;).

thank you for the reply

sw

Wiadomość napisana w dniu 2009-01-24, o godz. 18:12, przez Kevin Ball:

Hi Szymon,

You appear to have stumbled on a really fascinating bug. From what I can tell, shoes is trying to use your opts hash for its internal layout stuff, and getting confused between your x/y/width/ height and its own. You can work around the problem by using opts[:x1], opts[:y1], opts[:width1], and opts[:height1].

My guess is this is happening because _why wanted to enable widgets in general to just invisibly have all of the typical Shoes layout options, but in this case it seems to have backfired.

-Kevin

On Sat, Jan 24, 2009 at 8:23 AM, Szymon Wrozynski sw <[email protected]> wrote:
Hello,

Could you point me what's wrong here?

The code:

class Cell1 < Shoes::Widget
 def initialize(opts={})
   @x = opts[:x]
   @y = opts[:y]
   @width = opts[:width]
   @height = opts[:height]
   paint
 end

 def paint
   fill(white)
   rect(@x, @y, @width, @height)
   line(@x, @y, @x + @width, @y)
   line(@x, @y, @x, @y + @height)
   line(@x + @width, @y, @x + @width, @y + @height)
   line(@x, @y + @height, @x + @width, @y + @height)
 end
end

class Cell2 < Shoes::Widget
 def initialize(x, y, width, height)
   @x = x
   @y = y
   @width = width
   @height = height
   paint
 end

 def paint
   fill(white)
   rect(@x, @y, @width, @height)
   line(@x, @y, @x + @width, @y)
   line(@x, @y, @x, @y + @height)
   line(@x + @width, @y, @x + @width, @y + @height)
   line(@x, @y + @height, @x + @width, @y + @height)
 end
end

Shoes.app do
 cell1(:x=>100, :y=>100, :width=>100, :height=>100) # doesn't work!!
 cell2(100, 100, 100, 100) # works ok
end


The paint methods are the same.
Is it a bug? Why it doesn't work while passing a hash? The console says nothing.

As usually any help will be blessed.

kind regards

sw


Reply via email to