class Tool{
public:
	virtual void ButtonPressed( int button, int x, int y, bool shift = false ) = 0;
	virtual void ButtonReleased( int button, int x, int y, bool shift = false ) = 0;
	virtual void Motion( int x, int y, int button, bool shift = false ) = 0;
};

class ToolArrow : public Tool
{
public:
	void ButtonPressed( int button, int x, int y, bool shift = false );
	void ButtonReleased( int button, int x, int y, bool shift = false );
	void Motion( int x, int y, int button, bool shift = false );
};

class ToolRectangle : public Tool
{
public:
	void ButtonPressed( int button, int x, int y, bool shift = false );
	void ButtonReleased( int button, int x, int y, bool shift = false );
	void Motion( int x, int y, int button, bool shift = false );
};

class Painter
{
private:
	Tool *tool;
public:
	void ButtonPressed( int button, int x, int y, bool shift = false )
	{ tool->ButtonPressed( button, x, y, shift ); }
	void ButtonReleased( int button, int x, int y, bool shift = false )
	{ tool->ButtonReleased( button, x, y, shift ); }
	void Motion( int x, int y, int button, bool shift = false )
	{ tool->Motion( x, y, button, shift ); }
}
