#ifndef MOUSE_H_
#define MOUSE_H_

namespace system {
	class Picture;
	class Message;
	class Task;
}

namespace driver {
	struct MouseDecode {
		byte buf[4];
		int phase, x, y, button, scroll;
	};
	
	/*
	 * マウス初期化クラス
	 */
	class Mouse {
		static bool scroll_; // マウスがホイールを持っているかどうか
	public:
		static const dword KEYCMD_SENDTO_MOUSE = 0xd4;
		static const byte MOUSECMD_ENABLE = 0xf4;
		static const int XSIZE = 12;
		static const int YSIZE = 21;
		static MouseDecode mdec;
	public:
		static void init_cursor(system::Picture* cursor);
		/*
		 * マウス有効化
		 */
		static void enable(system::Task* task);
		
		/*
		 * マウスにデータを送る
		 */
		static void out(byte data);
		
		/*
		 * マウスからの情報を解析
		 * 
		 * 戻り値 : trueで１セットの解析が終了 phase1に戻る
		 */
		static bool decode(byte data);
		
		static bool scroll() { return scroll_; }
	};
}

#endif /*MOUSE_H_*/
