/*	
 *	clipsckb.h
 *
 *	オンスクリーンキーボード
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2013 Naoyuki Sawa
 *
 *	* Tue Dec 03 23:45:04 JST 2013 Naoyuki Sawa
 *	- 1st リリース。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 */
#ifndef __CLIP_SCKB_H__
#define __CLIP_SCKB_H__

#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus

/****************************************************************************
 *	構造体
 ****************************************************************************/

typedef struct _ST_ScrKbd {
	struct {
		unsigned char Caps_Lock:1;	/* Caps_Lock ロック中 */
		unsigned char Control  :1;	/* Control   押下中   */
		unsigned char Shift    :1;	/* Shift     押下中   */
		unsigned char Alt      :1;	/* Alt       押下中   */
	} Flag;
	unsigned char  iKey;			/* 0〜(SIZE_ScrKbd_Key-1) */
	         short x, y;			/* 表示位置 */
	unsigned char  Foreground;		/* 前景色 */
	unsigned char  Background;		/* 背景色 */
	unsigned char  ActiveColor;		/* 押下中orロック中色 */
} ST_ScrKbd;

/****************************************************************************
 *	アプリケーション用関数
 ****************************************************************************/

/* オンスクリーンキーボードを初期化します。
 * [in]
 *	無し
 * [out]
 *	無し
 * [note]
 *	- 最初に、オンスクリーンキーボードを使用する前に、呼び出してください。
 *	- オンスクリーンキーボードを連続的に使用する時は、呼び出す必要は有りません。
 */
void ScrKbd_Init();

/* オンスクリーンキーボードの表示位置を設定します。
 * [in]
 *	x,y		表示位置
 * [out]
 *	無し
 * [note]
 *	- この関数を呼び出さなければ、表示位置の初期値は(0,0)です。
 */
void ScrKbd_SetPos(int x, int y);

/* オンスクリーンキーボードの色を設定します。
 * [in]
 *	Foreground	前景色
 *	Background	背景色
 *	ActiveColor	押下中orロック中色
 * [out]
 *	無し
 * [note]
 *	- この関数を呼び出さなければ、色の初期値は(3,0,2)です。
 */
void ScrKbd_SetColor(int Foreground, int Background, int ActiveColor);

/* オンスクリーンキーボードを実行します。
 * [in]
 *	joy		入力状態。
 *			TRG_RI,TRG_LF,TRG_DN,TRG_UP,TRG_Aを参照します。
 *	state		今回の操作を行う直前の、修飾キーの論理的な状態を格納する変数へのポインタ。
 *			NULLを指定すると、格納しません。
 * [out]
 *	戻り値		キーイベント発生したら、キーシム(XK_*)を返します。
 *			キーイベントが発生しなければ、0を返します。
 *	*state		今回の操作を行う直前の、修飾キーの論理的な状態を格納します。
 *			ビット0 = Caps Lock
 *			ビット1 = Control
 *			ビット2 = Shift
 *			ビット3 = Alt
 */
int ScrKbd_Exec(int joy, int* state/*NULL可*/);

/* オンスクリーンキーボードを描画します。
 * [in]
 *	r		RENDER構造体。
 * [out]
 *	無し
 */
void ScrKbd_Draw(RENDER* r);

/****************************************************************************
 *	使用例
 ****************************************************************************/

//	void app_main() {
//	  int KeySym, state;
//	  ScrKbd_Init();          //初期化
//	  ScrKbd_SetPos(42,30);   //表示位置設定
//	  ScrKbd_SetColor(0,3,1); //色設定
//	  surface_clear(&surface, 3);
//	  for(;;) {
//	    schedule();
//	    KeySym = ScrKbd_Exec(joy, &state); //実行
//	    if(KeySym) { surface_clear(&surface, 3); }
//	    ScrKbd_Draw(&render);              //描画
//	    if(KeySym) { render_printf(&render,40,50,2,0,"%04X:%d:%d:%d:%d",
//	                 KeySym,!!(state&1),!!(state&2),!!(state&4),!!(state&8)); }
//	  }
//	}

#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus

#endif/*__CLIP_SCKB_H__*/
