※ ※ このページは書きかけです。以下の可能性があります。 ※ ・誤字、脱字等のチェックをおこなっていません。 ※ ・テキスト、表などフォーマットがされていない。 ※ ・画像が抜けている。 ※
この章では、グラフパックの構成や使用方法、各ファンクションなどについて説明します。
13.1 グラフパックとは
グラフパックは、MSXViewの環境を維持しながらウィンドウに対して、高速に描画するためのルーチン群です。グラフパックを使えば、ペン、タイルのパターンや色などを自由に設定し、線や箱などの図形をクリッピングして描画することができます。
MSXViewでは、文字以外の画面表示はすべてグラフパックを使用します(文字の表示はフォントパックを使う)。描画することができるのは、ウィンドウ環境の描画エリア(ズームされた領域)だけです。したがって、グラフパックを使うときは、ディスプレイマネージャで描画環境を設定して下さい。描画環境の設定については、ディスプレイマネージャの章を参照して下さい。
13.2 グラフパックの使い方
グラフパックを使って描画するときは、次のような手順になります。
- 描画に使うペンの属性を設定して、.createpen()でペンを作成し、ペンハンドルを割り付けます。ただし、すでに存在するペン(システム標準ペンSYSPENなど)を使うときは必要ありません。
- 描画するウィンドウを.chwin()、.pushwin()などでカレントウィンドウにします。
- 表示を行うエリアを.zoom()で、ズームします。
- .chpen()、.pushpen()などで、使用するペンをカレントペンにします。
- グラフパックの描画ファンクションを使って、実際に描画します。
- .endzoom()で、描画状態を終了します。
- 必要に応じて、.poppen()などで、カレントペンを元に戻します。
- 必要に応じて、.popwin()などで、カレントウィンドウを元に戻します。
13.3 描画の構成と機能
13.3.1 ペン
描画環境(線の種類、ペンの大きさ、ペンの居ろ、塗りつぶしの色、バックの色)はPENと呼びます。通常は、このPENで描画されます。
13.3.2 データ構造
- 座標データ(-32768〜+32767)
typedef struct _pos { int xp; int yp; } POS;
- 領域データ
typedef struct _area { int xp; int yp; unsigned xs; unsigned ys; } POS;
- カラーデータ
#define COLOR char
- RGBカラーデータ
typedef struct _rgb { TINY red; TINY green; TINY blue; } RGB;
- タイルパターンデータ
typedef struct _tile { TINY sw; COLOR on; COLOR off; TINY pat[8]; } TILE;
- ペン
typedef struct _grafpen { TINY line[4]; TINY xbot; TINY ybot; TINY xs; TINY ys; TINY pat[8]; TILE pen; TILE fill; TILE back; } PEN;
13.4 ファンクション一覧
グラフパックには、以下のファンクションがあります。
表3.8 グラフパックのファンクション一覧
機能番号 | 名前 | 意味 | ページ |
4 | _setpalette() | パレットの設定 | 440 |
5 | _getpalette() | パレットの獲得 | 440 |
166 | _initgraf() | グラフパックの初期化 | 425 |
167 | _setpen() | ペンの設定 | 425 |
168 | _direct() | 描画エリアの設定 | 425 |
169 | _testpos() | 図形の重なりをテストするモードの開始 | 426 |
170 | _testarea() | エリアの重なりをテストするモードの開始 | 426 |
171 | _endtest() | テストモードの終了 | 427 |
172 | _setrub() | ラバーバンドモードの開始・終了 | 427 |
173 | _getrub() | ラバーバンドカラーの獲得 | 427 |
174 | _movepen() | ペンの移動 | 428 |
175 | _pset() | 点の描画 | 428 |
176 | _line() | 線の描画 | 428 |
177 | _frame() | 四角形の描画 | 429 |
178 | _box() | 中を塗りつぶした四角形の描画 | 429 |
179 | _round() | 角の丸い四角形の描画 | 429 |
180 | _fillround() | 中を塗りつぶした角の丸い四角形の描画 | 430 |
181 | _oval() | 円の描画 | 430 |
182 | _filloval() | 中を塗りつぶした円の描画 | 430 |
183 | _arc() | 円弧の描画 | 431 |
184 | _pai() | 扇型の描画 | 431 |
185 | _fillpai() | 中を塗りつぶした扇形の描画 | 432 |
186 | _dicon() | アイコンの描画 | 432 |
187 | _colicon() | 指定色によるアイコンの描画 | 433 |
188 | _index() | 上部のみ角の丸い四角形の描画 | 433 |
189 | _polygon() | 多角形の描画 | 433 |
190 | _fillpolygon() | 中を塗りつぶした多角形の描画 | 434 |
191 | _scroll() | エリア内のスクロール | 435 |
192 | _copy() | エリアのコピー | 435 |
193 | _move() | エリアの移動 | 436 |
194 | _framearea() | エリアにしたがった四角形の描画 | 436 |
195 | _erasearea() | カレントペンによるエリアの塗りつぶし | 437 |
196 | _erase() | 指定色でのエリアの塗りつぶし | 437 |
197 | _curtain() | エリアの塗りつぶし(OR) | 437 |
198 | _changecolor() | エリア内の指定色の変更 | 438 |
199 | _reverse() | エリアの塗りつぶし(XOR) | 438 |
200 | _roundarea() | エリアにしたがった角の丸い四角形の描画 | 439 |
201 | _pixel() | カラーコードの獲得 | 439 |
202 | _readbit() | エリア内のカラーコードの読み出し | 439 |
203 | _writebit() | エリアへのカラーコードの書き込み | 440 |
297 | _moveframe() | エリアの移動 | 436 |
13.5 ファンクションの説明
以下では、グラフパックの各ファンクションについて説明します。
13.5.1 表記法
ファンクションの説明では、次のように表記します。