/* # skkinput (Simple Kana-Kanji Input)
 * OffWinP.h --- Off The Spot Window Style
 * This file is part of skkinput.
 * Copyright (C) 1997
 * Takashi SAKAMOTO (sakamoto@yajima.kuis.kyoto-u.ac.jp)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with skkinput; see the file COPYING.  If not, write to
 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#ifndef OffWinP_h
#define OffWinP_h

#include "commondef.h"
#include "buffers.h"
#include "skkbuf.h"
#include "skkkey.h"
#include "OffWin.h"
#include "HistMgr.h"
#include "FontMgr.h"
#include "attrs.h"
#include <X11/CoreP.h>

typedef struct {
	Pixel		puppixel ;	/* foreground pixel */
	/* fontset の名前が入る文字列。こいつを convert して fontset に叩き
	 * 込むことになる。 */
	String	fontset_string ;
	String	minibuf_fontset_string ;
	/* 利用しているフォント。補助漢字も入れるのかなあ？ */
	struct skkinputManagedFont	*fontset[ NUMBER_OF_CHARSET ] ;
	struct skkinputManagedFont	*minibuf_fontset[ NUMBER_OF_CHARSET ] ;
	/* 画面を描画するのに用いる GC */
	GC		gc, rgc ;
	GC		minibuf_gc, minibuf_rgc ;
	/* フォントの情報…毎回抜き出しているのはしんどいので。*/
	int		font_height, font_ascent ;
	int		mfont_height, mfont_ascent ;
	/* カーソルの大きさ。下に文字があるときは、その文字の大きさにあわせ
	 * るが、それが無かった場合にどの程度の幅にするのかを指定。 */
	int		cursor_width ;
	/* minibuffer の横幅。*/
	Dimension	minibuf_width ;
	/* 反転表示するか否か */
	Boolean	reverse_video ;
	/* kterm などのフォントのサイズ変更によりミニバッファのフォントサイ *
	 * ズも修正するか否か。*/
	Boolean	change_minibuffer_font ;
	Boolean	overthespotLikeInput ;
	Colormap	colormap ;
	Pixel		foreground, background ;
	Pixel		oforeground, obackground ;
	Boolean	clearMinibuffer ;
	Boolean	south_cursor ;
	
	Window	client_window ;
	/* フォーカスの当たっているウィンドウ。*/
	Window	focus_window ;
	/* この窓にマウスカーソルがあるとフォーカスしていると判断する根拠 *
	 * となるウィンドウ。*/
	Window	input_focus_window ;
	Window	probe_window ;
	/* テキストを表示開始すべき位置(ただし、フォーカスウィンドウ内での *
	 * 相対位置である。*/
	Position	spot_x, spot_y ;
	/* 変換クライアントの表示領域。*/
	XRectangle	client_area ;
	/* 変換クライアントのステータスエリアの領域。*/
	XRectangle	status_area ;
	/* 変換クライアントのルートウィンドウでの絶対位置…ということにし *
	 * ておく。*/
	Position	focus_offset_x, focus_offset_y ;
	Position	client_x, client_y ;
	unsigned long attribute_mask ;
	int		conversion_set_focus, conversion_unset_focus ;

	/* 文字列(バッファの中身)を表示するのに使う Window。*/
	Window	canvas_win ;
	int		canvas_probe ;
	
	/* 現在の漢字入力モードを表示するウィンドウ。*/
	Window	modeshell_win ;
	int		modeshell_probe ;
	int		modeshell_width, modeshell_height ;
	int		modeshell_border_width ;
	unsigned long	prevModeStatus ;
	
	Widget	minibuffer_popup, minibuffer_canvas ;
	int		minibuffer_probe ;
	Boolean	m_fInputFocus ;
	
	/* 表示位置、サイズの初期化が必要か否か。*/
	int		iposflag ;
	/* フォーカスが合っているかどうか。*/
	int		is_focus ;

	/* クライアントから送られてきた情報を受ける変数。*/
	struct ConvAttrsMesg *camsg ;

	/* Callback …こんなに一杯ある…。*/
	XtCallbackList endcallback ;	/* Widget を破壊する時に利用。*/
	XtCallbackList fixcallback ;	/* 変換後の文字列を送るのに利用。*/
	XtCallbackList keybackcallback ;	/* キーを押し戻すのに利用。*/
	XtCallbackList			m_lstTextCallback ;

	/* 履歴情報の受渡しに使う変数(ポインタ)。*/
	HistoryListNode *historyAttribute ;

	/* skkinput の buffer */
	struct skkinputBuffer	buffer ;
} OffthespotWinPart ;

typedef struct _OffthespotWinRec {
	CorePart 		core ;
	OffthespotWinPart	offthespotWin ;
} OffthespotWinRec ;

/* New fields for the My widget class record */
typedef struct {
	int dummy ;
} OffthespotWinClassPart ;

typedef struct _OffthespotWinClassRec {
	CoreClassPart			core_class ;
	OffthespotWinClassPart	offthespotWin_class ;
} OffthespotWinClassRec ;

extern OffthespotWinClassRec	offthespotWinClassRec ;

#endif
