require 'Qt' class CannonField < TQt::Widget signals 'angleChanged(int)', 'forceChanged(int)' slots 'setAngle(int)', 'setForce(int)' def initialize(parent, name) super @ang = 45 @f = 0 setPalette( TQt::Palette.new( TQt::Color.new( 250, 250, 200) ) ) end def setAngle( degrees ) if degrees < 5 degrees = 5 elsif degrees > 70 degrees = 70 end if @ang == degrees return end @ang = degrees repaint() emit angleChanged( @ang ) end def setForce( newton ) if newton < 0 newton = 0 end if @f == newton return end @f = newton emit forceChanged( @f ) end def paintEvent( e ) if !e.rect().intersects( cannonRect() ) return end cr = cannonRect() pix = TQt::Pixmap.new( cr.size() ) pix.fill( self, cr.topLeft() ) p = TQt::Painter.new( pix ) p.setBrush( blue ) p.setPen( TQt::NoPen ) p.translate( 0, pix.height() - 1 ) p.drawPie( TQt::Rect.new(-35, -35, 70, 70), 0, 90*16 ) p.rotate( - @ang ) p.drawRect( TQt::Rect.new(33, -4, 15, 8) ) p.end() p.begin(self) p.drawPixmap(cr.topLeft(), pix ) p.end() end def cannonRect() r = TQt::Rect.new( 0, 0, 50, 50) r.moveBottomLeft( rect().bottomLeft() ) return r end def sizePolicy() return TQt::SizePolicy.new( TQt::SizePolicy::Expanding, TQt::SizePolicy::Expanding ) end end