Идея Shoes о размерах окон нарушена на Mac, или я сумасшедший? - PullRequest
2 голосов
/ 03 февраля 2009

Полное раскрытие: я очень новичок в Ruby.

Следующий код выглядит так, как будто он должен обновлять текст параграфа с текущими размерами приложения по мере его изменения.

Shoes.app do  
    stack do  
        @para = para  
    end  
    animate 1 do  
        @para.text = "%d x %d" % [ app.width, app.height]  
    end  
end  

Но это никогда не меняется. Я знаю, что анимация блокируется во время фактической операции изменения размера, но когда вы отпускаете мышь, она догоняет. Итак, я делаю что-то не так или это просто еще не реализовано в OS X?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2009

Я не очень хорошо знаю Shoes, но похоже, что это проблема с изменением размеров приложения. Ваша анимация обновляется, но ширина и высота приложения не обновляются. Следующий код показывает, что он анимирует (номер кадра изменится):

Shoes.app do
    stack do
        @para = para
    end
    animate 1 do |f|
        @para.text = "%d x %d #{f}" % [ app.width, app.height]
    end
end

Кроме того, кажется, что другие примеры программ, которые поставляются с Shoes, не работают при изменении размера окна. simple-bounce.rb, который анимирует прыгающий шар с логотипом Shoes, продолжает прыгать в оригинальной коробке даже при изменении размера окна.

Похоже, это ошибка в коде Обуви.

0 голосов
/ 08 марта 2009

Я посмотрел исходный код Shoes, и кажется, что он не перехватывает события изменения размера собственного окна, чтобы обновить переменные внутри объекта App Shoes (по крайней мере для OS X). Таким образом, хотя Shoes отправляет события изменения размера в Cocoa, они не получают в другом направлении.

Тем временем что-то вроде этого будет работать немного лучше:

Shoes.app do
    @stack = stack :width => 1.0, :height => 1.0 do
        @para = para 
    end  
    animate 1 do |f| 
        @para.text = "%d x %d #{f}" % [ @stack.width, @stack.height ]   
    end  
end

Но размер стека все равно не изменится так, как вы ожидаете. Тестирование показывает, что ширина обновляется правильно, но высота может только увеличиваться ...

...