virtual void on_key(int x, int y, unsigned key, unsigned flags) { if(key == ' ') { m_shape.read_next(); m_shape.scale(width(), height()); force_redraw(); } if(key == '+' || key == agg::key_kp_plus) { m_scale *= agg::trans_affine_translation(-x, -y); m_scale *= agg::trans_affine_scaling(1.1); m_scale *= agg::trans_affine_translation(x, y); force_redraw(); } if(key == '-' || key == agg::key_kp_minus) { m_scale *= agg::trans_affine_translation(-x, -y); m_scale *= agg::trans_affine_scaling(1/1.1); m_scale *= agg::trans_affine_translation(x, y); force_redraw(); } if(key == agg::key_left) { m_scale *= agg::trans_affine_translation(-x, -y); m_scale *= agg::trans_affine_rotation(-agg::pi / 20.0); m_scale *= agg::trans_affine_translation(x, y); force_redraw(); } if(key == agg::key_right) { m_scale *= agg::trans_affine_translation(-x, -y); m_scale *= agg::trans_affine_rotation(agg::pi / 20.0); m_scale *= agg::trans_affine_translation(x, y); force_redraw(); } }
void read_next() { m_shape.read_next(); m_shape.scale(width(), height()); }