/*Ko-Window Parts library v1.05 1992/10/26  by Goemon*/
/* goelib.h */

typedef	struct	{	/* スライドスイッチパターン構造体 */
	int	mode;		/* 0:横 1:縦 */
	Sheet	*Slider;		/*スライダーパターン*/
	Sheet	*Rale[2];	/*溝パターン*/
	Sheet	*Start;		/*溝の開始パターン*/
	Sheet	*End[2];	/*溝の終了パターン*/
}	GSliderPat;


typedef	struct	{	/* スライドスイッチ構造体 */
	int	num;	/* 番号 */
	int	x;	/* x座標 */
	int	y;	/* y座標 */
	int	max;	/* 最大 */
	int	nx;	/* 数値表示のｘ座標 */
	int	ny;	/* 数値表示のｙ座標 */
	int	nmin;	/* 数値の最小値 */
	int	nmax;	/* 数値の最大値 */
	int	nmode;	/* 数値表示モード(0は普通,1は反転) */
	int	npos;	/* 現在位置（相対位置）*/
	int	nc;	/* 表示桁数（符号は含まず）*/
	int	nsize;	/* 文字サイズ */
	char	nstr[16];/*数値表示用文字バッファ*/
	GSliderPat	*gspat;		/*スライダーパターン*/
}	GSlider;


typedef	struct	{	/* スライドスイッチ辞書構造体 */
	int	max;
	int	num;
	GSlider	*gs;
}	GSliderReg;

extern	GSliderPat	GSliderStPatX;
extern	GSliderPat	GSliderStPatY;

/*スライドスイッチの描画*/
extern	int	GSliderSetDraw( GSlider *,DrawBuf *);
/*スライドスイッチの移動*/
extern	int	GSliderSetPos( GSlider *,DrawBuf *, int );
/* マウス位置からPOS位置計算*/
extern	int	GSliderGetMPos( GSlider *, int, int, int, int, int );

/* マウスがスライダーの範囲内に入っているか */
#define	GSliderGetMPoint(gs,mx,my)	(((gs)->gspat->mode) ? \
	( (my) >= (gs)->y && (my) <= (gs)->y + (gs)->max \
	+ (gs)->gspat->Slider->v && (mx) >= (gs)->x && (mx) < (gs)->x \
	+ (gs)->gspat->Slider->h )\
	: ( (mx) >= (gs)->x && (mx) <= (gs)->x + (gs)->max \
	+ (gs)->gspat->Slider->h && (my) >= (gs)->y && (my) < (gs)->y \
	+ (gs)->gspat->Slider->v )) || \
	((gs)->nc > 0 && (mx) >= (gs)->nx && (mx) <= (gs)->nx \
	+ (gs)->nsize * ((gs)->nc + 1) / 2  && (my) >= (gs)->ny && \
	(my) < (gs)->ny + (gs)->nsize )
/* スライダーの現在位置を得る*/
#define	GSliderGetPos(gs)	(gs)->npos
/* 登録簿の作成 */
#define	GSRegOpen(gsr,mx)	\
	(gsr)->max = (mx);(gsr)->num = 0;\
	(gsr)->gs = (GSlider*)malloc(sizeof(GSlider) * (mx))
/* 登録簿の破棄 */
#define	GSRegClose(gsr)	free((gsr)->gs)

/* 登録 */
extern	void	GSRegSetGSlider(GSliderReg *,int,int,int,int,int,int,int,int,int,int,int,int,GSliderPat *);
/* 登録簿内のスライダーの描画*/
extern	int	GSRegSetDraw( GSliderReg *,DrawBuf *);
/* カーソル位置から任意のスライダーを選ぶ */
extern	int	GSRegSelectGSlider( GSliderReg *,int,int);
/* 登録簿検索 */
extern	GSlider	*GSRegGetGSlider(GSliderReg *,int);

/* スライダーの現在位置を得る*/
#define	GSRegGetPos(gsr,num)	\
	GSRegGetGSlider(gsr,num)->npos
/* マウス位置からPOS位置計算*/
#define	GSRegGetMPos(gsr,num,mx,my,stat1,stat2,stat3)	\
	GSliderGetMPos(GSRegGetGSlider(gsr,num),mx,my,stat1,stat2,stat3)
/*スライドスイッチの移動*/
#define	GSRegSetPos(gsr,pdbuf,num,pos)	\
	GSliderSetPos(GSRegGetGSlider(gsr,num),pdbuf,pos)


