/*****************************************************************************/
/* EyeClock - A clock application for X. The eyes follow the mouse pointer.  */
/*                                                                           */
/* EyeClock Copyright (C) 1998-1999 Sakai Hiroaki.                           */
/* All Rights Reserved.                                                      */
/*                                                                           */
/* EyeClock is a simple clock application for X11. You can put your favorite */
/* picture on the face of the clock. And you can move the eyes of the        */
/* picture following the mouse pointer.                                      */
/*                                                                           */
/* This file is a part of EyeClock.                                          */
/* EyeClock is FREE SOFTWARE. You can use, copy, modify, and/or redistribute */
/* it freely under the terms in the COPYRIGHT.                               */
/* See the COPYRIGHT for more details.                                       */
/*****************************************************************************/

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■ EyeClock 製作 坂井弘亮                                                   ■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

サンプルの画像＆データをつくってくれる人，募集します!

ぜひぜひぜひぜひ
E-Mail:sakai@seki.ee.kagu.sut.ac.jp
まで，ご意見ご感想を送ってください! (反応が無いと，さみしいのです)

■■ EyeClockとは？

EyeClock は好みの画像を文字盤にして，気軽に時計が作れるアプリケーションです．
また，画像が人物のばあいには，マウスの動きを追って目玉が動くようにもできます．
好きなタレントや，漫画のキャラクターや，知人や上司を文字盤にして，
目玉が動くオリジナルの時計を作ろう!

■■ このドキュメントの注意

「目」「目玉」「白目」という単語がたくさん出てきます．
「目玉」(core)は目の黒目の部分を示します．
「目」(eye)は「目玉」と「白目」を合わせた，目の全体を示します．

時計の文字盤の，1〜12の数字のことは，「数文字」と呼んでいます．

また，ソースリスト中では，
core   ... 「目玉」
eye    ... 「目」
figure ... ピックスマップ画像
mask   ... マスク画像
face   ... 時計の文字板
を表しています．

■■ 前作からの変更点

EyeClock-2.0 は，前作 EyeClock-1.xx からほとんどの部分を書き直したため，
前作の EyeClock-1.xx とは「まったく違う」アプリケーションになっています．
したがって，EyeClock-1.xx 用のデータファイルは使えません．
EyeClock-1.xx に対する主な変更点は，以下の通りです．

・時計，腕，数文字，目を独自ヴィジェットとして設計した．
・すべての設定をリソースで行えるようにした．
・それにともなって，オプションを全般的に変更した．
・目玉を楕円でなく，ピックスマップで処理するようにした．
・サンプルの時計を大幅に増やした．

■■ 著作権について

EyeClock の著作権に関しては，COPYRIGHT を参照してください．

EyeClock には多数のサンプル画像(xpm ディレクトリ以下にある)が
付属していますが，各々の画像の著作権は，各々の画像の作者が保有しています．
詳しくは，サンプル画像ファイル中のコメントを参照してください．

サンプル画像 daemon_face.xpm とアイコン画像 daemon_icon_face.xpm は，
BSD の環境で利用するようにしてください．
もしもあなたの環境が，BSD の環境でないならば，daemon_face.xpm と
daemon_icon_face.xpm は利用しないでください．
(the BSD daemon の著作権に関しては，daemon_face.xpm 内のコメントを
 参照してください)

■■ EyeClock のインストール

EyeClock の動作環境は，UNIX + X Window System です．
開発環境は，FreeBSD-2.2.8 + XFree86-3.3.3 です．
FreeBSD-3.x と Linux での動作確認はしています．

■ 必要なライブラリ

EyeClock のコンパイルには，Xpm ライブラリが必要です．
(ピックスマップ画像ファイルの読み込みのため，etc.c 内の
 MakePixmapFromFile() 内で，XpmReadFileToPixmap() を呼び出しています)
まずはこれがインストールされていることを確認してください．
Xpm ライブラリは，
ftp://avahi.inria.fr/pub/xpm/
から入手できます．FreeBSD では，すでにパッケージになっているので，
パッケージインストールできます．

■ インストール

圧縮ファイルを解凍し，
# make
# make install
で，インストールできます．その他の UNIX だと，一部修正が必要かもしれません．

画像に応じて，
eyeclock        (時計の本体)
daemonclock     (eyeclock へのリンク)
penguinclock    (eyeclock へのリンク)
umeharaclock    (eyeclock へのリンク)
taroclock       (eyeclock へのリンク)
boyclock        (eyeclock へのリンク)
girlclock       (eyeclock へのリンク)
henohenoclock   (eyeclock へのリンク)
silicagelclock  (eyeclock へのリンク)
punpunclock     (eyeclock へのリンク)
margueriteclock (eyeclock へのリンク)
octopusclock    (eyeclock へのリンク)
などの，たくさんの種類の時計が作成されます．
(eyeclock 以外は，すべて eyeclock へのリンクになっていますが，
 実行時のファイル名が違うので，実行時には，それぞれに違ったリソースが
 読み込まれ，違った時計になる，という仕組みになっています)

make install すると，以下のものがインストールされます．
・上記の実行ファイル → /usr/X11R6/bin
・各種画像ファイル，コピーライト → /usr/X11R6/lib/X11/EyeClock
・デフォルトのリソースファイル → /usr/X11R6/lib/X11/app-defaults/EyeClock
・マニュアルページ → /usr/X11R6/man/man1/eyeclock.1.gz

インストール先を変更したい場合には，Makefile の PREFIX を修正してください．

Makefile 中の，
DEFAULT_FACE
DEFAULT_RESOURCE
を修正することにより，デフォルトの文字盤の画像を変更できます．
(目の位置情報は，リソースファイル中に格納されているので，
 DEFAULT_FACE を変更した場合には，DEFAULT_RESOURCE の変更も必要)
Linux の場合は，ペンギンにするといいでしょう．

DEFAULT_ICON を修正すれば，デフォルトのアイコン画像を変更できます．

デフォルト画像は，converter.c 内の，
static struct {
  char * name;
  char ** data;
} default_pixmaps[];
で指定してあるので，別の画像をデフォルト画像にしたい場合には，
ここを修正してください．

■ アンインストール

# make uninstall
で，アンインストールできます．
インストール時に Makefile が /usr/X11R6/lib/X11/EyeClock に
保存されるので，それを利用してアンインストールできます．
手動でアンインストールしたい場合には，以下のファイルを削除します．

・/usr/X11R6/bin の，各種実行ファイル．
  (eyeclock の本体と，ls -l したときに，eyeclock へのリンクになっている
   ファイル)
・/usr/X11R6/lib/X11/EyeClock をぜんぶ．
・/usr/X11R6/lib/X11/app-defaults/EyeClock
・/usr/X11R6/man/man1/eyeclock.1.gz

■■ EyeClock の使いかた

■ 使いかたその１

% eyeclock [オプション]
% daemonclock [オプション]
などのようにして起動します．パラメータ無しで起動すると，デフォルトの画像に
なります．

■ 使いかたその２

% eyeclock -face filename.xpm -eyes-no-active
のようにして，XPM 形式の画像を指定して起動すれば，てっとりばやく好きな画像を
文字盤にすることができます．
ただし，目は動きません．目を動かすには，目玉などの画像データを作成する
必要があります．

■ 使いかたその３

% eyeclock -face none -background blue -eyes-no-active
		-numbers-figure DefaultNumberSmall
		-number3-figure DefaultNumberBig
		-number6-figure DefaultNumberBig
		-number9-figure DefaultNumberBig
		-number12-figure DefaultNumberBig
のようにすれば，ただの時計としても使えます．

■■ リソース

デフォルトのリソースファイルは，
/usr/X11R6/lib/X11/app-defaults/EyeClock
にインストールされます．
このファイルを自分のホームディレクトリにコピーするか，もしくは
.Xdefaults などに書き込んで，カスタマイズすることができます．

EyeClock は，以下のリソースでカスタマイズできます．
()内の値は，デフォルト値です．
具体的な使用例は，リソースファイル EyeClock を参照してください．
デフォルト値は，Clock.c Hand.c Number.c Eye.c の，
static XtResource resources[];
で，指定されています．

■ トップレベルヴィジェットのリソース

X ツールキットリソース

	ツールキットの標準のリソースが使用できます．

eyeclock.geometry : [WxH+X+Y]

	時計のサイズと表示位置．

eyeclock.title : [titlename]

	時計のタイトル．(タイトルバーに表示される)

eyeclock.iconName : [titlename]

	アイコンのタイトル．(アイコンのタイトルバーに表示される)

eyeclock.iconPixmap : [XPM file]

	アイコンの画像．

eyeclock.iconMask : [XPM file]

	アイコンのマスク画像．(無指定のときには，自動的に生成する)

eyeclock.background : [color]

	時計の背景色．(画像を指定しない場合に有効)

■ Clock ヴィジェットのリソース

eyeclock.clock.geometry : [WxH+X+Y]

	時計のサイズと表示位置．

eyeclock.clock.root : [True : False]

	時計をルートウインドウに張り付けるかどうか．(False)

eyeclock.clock.face : [XPM file]

	文字盤の画像を指定する．

eyeclock.clock.interval : [milli seconds]

	時計のインターバルをミリ秒で指定する．(100)

■ Hand ヴィジェットのリソース

eyeclock.clock.Hand.geometry : [TxL+X+Y]

	時計の腕の長さ，太さ，位置を指定する．
	時計の腕の長さ，太さ，位置は，すべて時計のサイズ(「幅」と「高さ」の，
	小さいほう)に対する百分率で指定されます．
	たとえば，3x70+50+50 と指定すると，太さは時計の幅の3%，
	長さは時計の幅の70%となり，時計の中心より
	右下に50%の位置に，腕の中心を設定します．
	詳しくは，Hand.c の HandDraw() を参照．

eyeclock.clock.Hand.active : [True : False]

	時計の腕を表示するかどうか．(True)

eyeclock.clock.Hand.foreground : [color]

	時計の腕の色を指定します．(Brown)

eyeclock.clock.Hand.borderColor : [color]

	時計の腕の縁の色を指定します．(Black)

eyeclock.clock.Hand.borderWidth : [percent]

	時計の腕の縁の幅を指定します．(1)
	(時計のサイズに対する百分率で指定)

eyeclock.clock.Hand.width : [percent]

	時計の腕の幅．(時計のサイズに対する百分率で指定)

eyeclock.clock.Hand.length : [percent]

	時計の腕の長さ．(時計のサイズに対する百分率で指定)

(以下，eyeclock.clock.hour.XXXXXXXX eyeclock.clock.minute.XXXXXXXX
 eyeclock.clock.second.XXXXXXXX についても同様．
 eyeclock.clock.Hand.XXXXXXXX のようなリソースは，すべての腕に対して作用する．
 eyeclock.clock.hour.XXXXXXXX eyeclock.clock.minute.XXXXXXXX
 eyeclock.clock.second.XXXXXXXX のようなリソースは，それぞれの腕に対して
 作用する)

■ Number ヴィジェットのリソース

eyeclock.clock.Number.geometry [WxH+X+Y]

	数文字の位置とサイズを指定する．
	数文字の位置は，時計のサイズ(「幅」と「高さ」の，小さいほう)に対する
	百分率で指定されます．
	たとえば，-numbers-geometry 20x20+50+50 と指定すると，
	数文字のサイズは 20x20 (自動的に拡大縮小する)となり，
	時計の中心より右下に50%の位置を中心として，-numbers-length で
	指定した距離だけ離れた位置に，数文字の中心を設定します．
	詳しくは，Number.c の NumberDraw() を参照．

eyeclock.clock.Number.active : [True : False]

	数文字を表示するかどうか．(True)

eyeclock.clock.Number.length : [percent]

	中心からの距離を設定します．(85)

eyeclock.clock.Number.figure : [XPM file]

	数文字の画像を指定します．

eyeclock.clock.Number.mask : [XPM file]

	数文字のマスク画像を指定します．
	マスク画像を指定しなかった場合には，マスク画像は自動的に作成されます．

eyeclock.clock.Number.size : [WxH]

	数文字のサイズを指定します．

(以下，eyeclock.clock.number1.XXXXXXXX 〜 eyeclock.clock.number12.XXXXXXXX
 についても同様．
 eyeclock.clock.Number.XXXXXXXX のようなリソースは，すべての数文字に対して
 作用する．
 eyeclock.clock.number1.XXXXXXXX 〜 eyeclock.clock.number12.XXXXXXXX
 のようなリソースは，それぞれの数文字に対して作用する)

■ Eye ヴィジェットのリソース

eyeclock.clock.Eye.geometry : [WxH+X+Y]

	目のサイズと位置を指定する．
	WxH で目のサイズを指定する．(自動的に拡大縮小する)
	+X+Y で，目の位置を指定する．これは，時計の右上からの絶対座標で
	指定する．

eyeclock.clock.Eye.active : [True : False]

	目を表示するかどうか．(True)

eyeclock.clock.Eye.fillColor : [True : False]

	目をバックグラウンドカラーで塗りつぶすかどうか．(False)

eyeclock.clock.Eye.fillPixmap : [True : False]

	目をピックスマップで塗りつぶすかどうか．(False)

eyeclock.clock.Eye.background : [color]

	目のバックグラウンドカラーを指定する．(White)
	-eyes-fill-color を指定すると，白目の部分をバックグラウンドカラーで
	塗りつぶす．

eyeclock.clock.Eye.move [XxY]

	目玉の移動率．百分率で指定する．(100x100)

eyeclock.clock.Eye.limit [XxY]

	目玉の移動の制限．百分率で指定する．(75x75)

eyeclock.clock.Eye.offset [XxY]

	目玉の位置のオフセット．(0x0)

eyeclock.clock.Eye.coreFigure [XPM file]

	目玉の画像を指定する．

eyeclock.clock.Eye.coreMask [XPM file]

	目玉のマスク画像を指定する．

eyeclock.clock.Eye.eyeFigure [XPM file]

	目の画像を指定する．

eyeclock.clock.Eye.eyeMask [XPM file]

	目のマスク画像を指定する．

eyeclock.clock.Eye.coreSize [WxH]

	目玉のサイズ．

eyeclock.clock.Eye.eyeSize [WxH]

	目のサイズ．

(以下，eyeclock.clock.left.XXXXXXXX eyeclock.clock.right.XXXXXXXX
 eyeclock.clock.eye3.XXXXXXXX 〜 eyeclock.clock.eye8.XXXXXXXX
 についても同様．
 eyeclock.clock.Eye.XXXXXXXX のようなリソースは，すべての目に対して
 作用する．
 eyeclock.clock.left.XXXXXXXX eyeclock.clock.right.XXXXXXXX
 eyeclock.clock.eye3.XXXXXXXX 〜 eyeclock.clock.eye8.XXXXXXXX
 のようなリソースは，それぞれの目に対して作用する)

EyeClock で画像を扱う際には，XPM 形式が，ビットマップ形式が利用できます．
このドキュメント中で，[XPM file] のようになっているところには，
XPM 形式のファイルか，ビットマップ形式のファイルを指定することができます．
(指定したファイルが XPM 形式かビットマップかは，EyeClock が自動判別します．
 詳しくは，etc.c の，MakePixmapFromFile() を参照してください)

■■ オプション

オプションは，以下の通りです．
オプションは，基本的にはリソースに対応しています．
オプションとリソースの対応については，main.c の，
static XrmOptionDescRec options[];
を，参照してください．

■ 時計の設定に関するオプション

X ツールキットオプション	ツールキットの標準のオプションが使えます．

-display [displayname]		ディスプレイを指定する．
-geometry [WxH+X+Y]		リソース geometry と同じ．
-title [titlename]		リソース title と同じ．
-name [name]			時計の名前．
-background [color], -bg [color]
				リソース background と同じ．
-icon-pixmap			リソース iconPixmap と同じ．
-icon-mask			リソース iconMask と同じ．

■ 時計の設定に関するオプション

-clock-geometry [WxH+X+Y]	リソース clock.geometry と同じ．
-root				時計をルートウインドウに張り付ける．
-no-root			ルートウインドウに張り付けない．(デフォルト)
-face [XPM file]		リソース clock.face と同じ．
-interval [milli seconds]	リソース clock.intetrval と同じ．

■ 時計の腕の設定に関するオプション

-hands-geometry [TxL+X+Y]	リソース clock.Hand.geometry と同じ．
-hands-active			時計の腕を表示する．
-hands-no-active		時計の腕を表示しない．
-hands-foreground [color], -hands-fg [color]
				リソース clock.Hand.foreground と同じ．
-hands-bordercolor [color], -hands-bc [color]
				リソース clock.Hand.borderColor と同じ．
-hands-borderwidth [x], -hands-bw [x]
				リソース clock.Hand.borderWidth と同じ．
-hands-width [x]		リソース clock.Hand.width と同じ．
-hands-length [x]		リソース clock.Hand.length と同じ．

(以下，-hour-xxx, -minute-xxx, -second-xxx についても同様．
 -hands-xxx のようなオプションは，すべての腕に対して作用する．
 -hour-xxx, -minute-xxx, -second-xxx は，それぞれの腕に対して作用する)

■ 時計の数文字(1〜12の文字のこと)の設定に関するオプション

-numbers-geometry [WxH+X+Y]	リソース clock.Number.geometry と同じ．
-numbers-active			数文字を表示する．
-numbers-no-active		数文字を表示しない．
-numbers-length [x]		リソース clock.Number.length と同じ．
-numbers-figure [XPM file]	リソース clock.Number.figure と同じ．
-numbers-mask [XPM file]	リソース clock.Number.mask と同じ．
-numbers-size [WxH]		リソース clock.Number.size と同じ．

(以下，-number1-xxx, -number2-xxx, ..., -number12-xxx についても同様．
 -numbers-xxx のようなオプションは，すべての数文字に対して作用する．
 -number1-xxx, -number2-xxx のようなオプションは，それぞれの数文字に対して
 作用する)

■ 目と目玉の設定に関するオプション

-eyes-geometry [WxH+X+Y]	リソース clock.Eye.geometry と同じ．
-eyes-active			目を表示する．
-eyes-no-active			目を表示しない．
-eyes-fill-color		目をバックグラウンドカラーで塗りつぶす．
-eyes-no-fill-color		目をバックグラウンドカラーで塗りつぶさない．
-eyes-fill-pixmap		目をピックスマップで塗りつぶす．
-eyes-no-fill-pixmap		目をピックスマップで塗りつぶさない．
-eyes-background [color], -eyes-bg [color]
				リソース clock.Eye.background と同じ．
-eyes-move [XxY]		リソース clock.Eye.move と同じ．
-eyes-limit [XxY]		リソース clock.Eye.limit と同じ．
-eyes-offset [XxY]		リソース clock.Eye.offset と同じ．
-eyes-core-figure [XPM file]	リソース clock.Eye.coreFigure と同じ．
-eyes-core-mask [XPM file]	リソース clock.Eye.coreMask と同じ．
-eyes-eye-figure [XPM file]	リソース clock.Eye.eyeFigure と同じ．
-eyes-eye-mask [XPM file]	リソース clock.Eye.eyeMask と同じ．
-eyes-core-size [WxH]		リソース clock.Eye.coreSize と同じ．
-eyes-eye-size [WxH]		リソース clock.Eye.eyeSize と同じ．

(以下，-left-xxx, -right-xxx, -eye3-xxx, -eye4-xxx, ..., -eye8-xxx
 についても同様．
 -eyes-xxx のようなオプションは，すべての目に対して作用する．
 -left-xxx, -right-xxx, -eye3-xxx のようなオプションは，それぞれの目に対して
 作用する)

■■ 画像

■ 画像ファイル

リソースやオプションで画像ファイルを指定すると，以下の順に検索されます．
(1) デフォルトの画像なら，それを読み込む．
(2) ファイル名をそのまま検索．
(3) カレントディレクトリを検索．
(4) ./xpm を検索．
(5) $HOME を検索．
(6) /usr/X11R6/lib/X11/EyeClock を検索．
(7) /usr/X11R6/lib/X11/EyeClock/xpm を検索．

詳しくは，etc.c の，
Pixmap MakePixmapFromFile();
を，参考にしてください．

■ デフォルトの画像

リソースやオプション中で，画像に以下のものを指定すると，
デフォルトの画像を用いることができます．

DefaultIconFace ... デフォルトのアイコン画像

DefaultFace ... デフォルトの文字盤の画像

DefaultLeftCore  ... デフォルトの左の目玉
DefaultRightCore ... デフォルトの右の目玉
DefaultLeftEye   ... デフォルトの左の目
DefaultRightEye  ... デフォルトの右の目

DefaultNumber1  〜 DefaultNumber12  ... デフォルトの数文字
DefaultNumberR1 〜 DefaultNumberR12 ... デフォルトの数文字(ローマ数字)
DefaultNumberBig   ... デフォルトの数文字(大きな丸)
DefaultNumberSmall ... デフォルトの数文字(小さな丸)
DefaultNumberNeedle0 〜 DefaultNumberNeedle5 デフォルトの数文字(針)

デフォルトの画像については，converter.c の，
static struct {
  char * name;
  char ** pixmap_data;
} default_pixmaps[];
を参照してください．

EyeClock のコンパイル時には，デフォルトのリソースファイル
(Makefile中の DEFAULT_RESOURCE で指定されているリソースファイル)から，
予備リソース(Fallback Resource)を作成します．
予備リソースは eyeclock のバイナリ中に埋め込まれ，
リソースファイルが存在しないばあいには，予備リソースが参照されます．
また，デフォルトの画像はバイナリ中に埋め込まれ，
DefaultFace のようにして指定すれば，呼び出すことができます．
これらにより，eyeclock は，リソースファイルや画像ファイルが無くても，
eyeclock 単体でもある程度の動作はするようになっています．

■■ キー操作

キー操作は，以下の通りです．

i         ... アイコン化．
r         ... ウインドウをデフォルトのサイズに戻す．
q, Ctrl-c ... 終了．

これらは main.c の，
static XtActionsRec actions[];
static char * translations;
で，定義されています．

■■ シグナル

EyeClock は，以下のシグナルをトラップします．

SIGINT ... 終了する．
SIGHUP ... ウインドウを一番上にもってくる．

これらは main.c 内で処理しています．

■■ 時計の作り方

ぜひ，自分のオリジナルの時計を作ってみてください．

■ 準備するもの

最低限，以下の画像が必要です．

・顔の画像
・左の目の画像
・右の目の画像
・左の目玉の画像
・右の目玉の画像

オリジナルの時計を作る場合には，リソースファイルを参考にして，
.Xdefaults などにリソースの項目を作って，画像ファイルや目の座標などを
指定してやる必要があります．
詳しくは，リソースファイル EyeClock と，ディレクトリ xpm 以下の画像データを
参考にしてください．具体的な使いかたの例は，リソースファイル EyeClock を
参照すれば，だいたいわかると思います．

以下のことを注意してください．
・時計の腕と数文字の座標の指定は，基本的には時計の大きさに対する百分率で
  指定する．
・時計の腕と数文字の座標は，「時計の中心」の座標を指定する．
  数文字の座標を eyeclock.clock.Number.geometry リソースで指定した場合には，
  指定した座標に数文字が表示されるのではなく，指定した座標を*中心として*
  length の長さだけ離れた位置に数文字が表示されます．
  また，座標の指定は，時計の中心を (0,0) として，時計の中心から
  一番近い端までの距離を 100 とする，「百分率」で指定します．
  具体的な計算方法については，Hand.c の HandDraw() と，Number.c の
  NumberDraw() を参照してください．
・それに対して，目の位置を eyeclock.clock.Eye.geometry リソースで指定する
  場合には，座標は時計の左上からの絶対座標で指定されます．
・時計の腕の太さなど，多くのパラメータは，このようにして，時計の大きさに
  対する百分率で指定されます．
  (時計の中心から一番近い端までの距離を 100 とする)
・fillColor と fillPixmap の両方を指定した場合には，OR 論理で結合されます．
  リソースで fillColor を True に指定しているときなどは，
  オプション -eyes-fill-pixmap の指定時には，
  -eyes-no-fill-color も指定して，fillColor を無効にしないと，
  期待していない結果になるかもしれません．

百聞は一見にしかず，ということで，サンプルデータを多めにつけておいたので，
あとはサンプルデータを参考にしてください．

データがうまく作れるか，不気味な妖怪画になってしまうかは，すべてあなたの
腕次第です!

■ マスク画像について

マスク画像が指定されていない場合(アイコンマスクも含む)には，
以下の規則で自動的に作成します．
・元のピックスマップ画像の４隅(左上，右上，左下，右下)のピクセルを調べる．
・４つのピクセル値のうちの，もっとも多く使われているピクセル値を
  バックグラウンドピクセルとみなす．
・バックグラウンドピクセルの部分は背景とし，それ以外の部分はマスクとして，
  マスク画像を作成する．

具体的な処理は，etc.c の，CreateMaskPixmap() を参照してください．

なお，マスク画像を自作して，リソースファイルでマスク画像を指定することも
できます．このばあいには，基本的には，「白地に黒」という規則で，
マスク画像を作ります．
(clock.Number.mask, clock.Eye.coreMask, clock.Eye.eyeMask 等のリソースです)
しかしほとんどの場合には，マスク画像を自作する必要は無いでしょう．

■■ プログラミング的な話

今回，独自ヴィジェットの作成に挑戦してみました．
具体的な資料があまり無くて，ほかのプログラムのソースとかを参考にして，
見よう見まねで書いたので，きれいなのやら，きたないのやらといったカンジです．

X ツールキットの，Clock ヴィジェットとして作成したので，
X ツールキットで書かれているアプリケーションなら，EyeClock を組みこむ
ことができるはずです．

■■ Q&A

Q. リソース eyeclock.geometry と eyeclock.clock.geometry は，どう違うの？
   オプション -geometry と -clock-geometry の違いは？
A. EyeClock をアプリケーションとして使うぶんには，いまのところは同じです．
   プログラム的には，eyeclock.geometry はトップレベルヴィジェットに作用し，
   eyeclock.clock.geometry は Clock ヴィジェットに作用します．
   Clock ヴィジェットをほかのアプリケーションに組み込む場合には，
   リソース clock.geometry を使用することになります．
   また，オプション -geometry はリソース eyeclock.geometry に対応し，
   オプション -clock-geometry はリソース eyeclock.clock.geometry に対応します．

Q. デフォルトの数文字の画像で，４隅が欠けているものがあるようだけど．
A. デフォルトの数文字画像の４隅が欠けているのは，マスク画像を生成する際に，
   ４隅のピクセル値を調べるので，いちおう４隅を背景色にしたためです．
   (ほんとは４隅全部を背景色にする必要は無いが，念のため)

Q. fillPixmap を指定したが，色がちょっと変になっている．
A. fillColor が True になっているため，バックグラウンドカラーと
   ピックスマップが OR 論理で足されているのだと思われます．
   -eyes-no-fill-color を指定して，fillColor を False にしてください．

Q. そもそも fillPixmap って，なにをするの？
A. EyeClock では，デフォルト(fillColor も fillPixmap も False の状態)では，
   白目の部分は，もとの顔の画像がそのまま残ります．
   fillColor を指定してやると，白目の部分(eyeMask の画像でマスクされる部分)を
   バックグラウンドカラーで塗りつぶします．
   fillPixmap を指定してやると，白目の部分を eyeMask の画像に置き換えます．
   うーん，よくわからなくてごめんなさい．
   そのうち，サンプルをたくさんつけて，わかるようにします．

Q. ３つ以上の目を動かすことはできないの？
A. できます．
   left, right のほかに，eye3, eye4, ..., eye8 まで，合計８個の目を
   管理することができます．
   リソースファイルに，left や right と同じように，eye3 とかの項目を
   追加するだけです．
   デフォルトでは eye3〜eye8 もアクティブなのですが，リソース eyeFigure で
   画像ファイルが指定されていないので，無効になっています．
   リソース eyeFigure を指定してやれば，アクティブになります．

Q. ８つ以上の目を動かしたい!
A. main.c の，
   static char * eyes_name[];
   に，追加してください．

Q. ていうか，ぜんぜんわからないんだけど．
A. リソースファイル EyeClock を読むのがいちばん手っ取り早いでしょう．
   リソースをいじってやれば，だいたいのことは理解できると思います．

Q. 雑誌に掲載したいのですが．CD-ROM にも収録したい．
A. どうぞどうぞ，かまいません．よろしくお願いいたします．
   どういうふうに紹介されるのか，わたしも読んでみたいので，ぜひご一報ください．

Q. 別のプラットホームに移植したい．パッケージ・アプリケーションにして
   配布したい．
A. どうぞどうぞ，かまいません．よろしくお願いいたします．
   修正して配布したり，パッケージとしてバイナリ配布するばあいの
   条件については，COPYRIGHT をご覧ください．
   BSD デーモン君の画像は，BSD 以外の環境では使わないようにしてください．
   (詳しくは，BSD デーモン君のコピーライトをご覧ください)
   基本的に，移植や雑誌への掲載，CD-ROM への収録は歓迎します．

Q. 画像を自作したので，フリーで公開したいんだけど．
A. すばらしい!
   sakai@seki.ee.kagu.sut.ac.jp に連絡をとってみてください．
   著作権などの問題が無ければ，オリジナルの配布版に収録するか，
   公開場所へのポインタを紹介したいと思います．

Q. このプログラム，こうするともっとよくなるよ．
A. そのようなアドバイスは大歓迎です．ぜひ教えてください．まじで．

■■ おまけ

ぼくは「目の動くモナリザの時計」という不気味なものをつくりました．
あとは目の動くベートーベンとか，だれかの写真とかでつくるといいと思います．
上司とかで時計をつくると，こわくて仕事がはかどります．
３個以上の目玉を動かすこともできるので，集合写真で全員の目玉が動くという
ことも可能です．(これも不気味)

/*****************************************************************************/
/* End of File.                                                              */
/*****************************************************************************/
