MSX Datapack wiki化計画

13章 グラフパック

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

この章では、グラフパックの構成や使用方法、各ファンクションなどについて説明します。

 13.1 グラフパックとは

 グラフパックは、MSXViewの環境を維持しながらウィンドウに対して、高速に描画するためのルーチン群です。グラフパックを使えば、ペン、タイルのパターンや色などを自由に設定し、線や箱などの図形をクリッピングして描画することができます。
 MSXViewでは、文字以外の画面表示はすべてグラフパックを使用します(文字の表示はフォントパックを使う)。描画することができるのは、ウィンドウ環境の描画エリア(ズームされた領域)だけです。したがって、グラフパックを使うときは、ディスプレイマネージャで描画環境を設定して下さい。描画環境の設定については、ディスプレイマネージャの章を参照して下さい。

 13.2 グラフパックの使い方

 グラフパックを使って描画するときは、次のような手順になります。

  1. 描画に使うペンの属性を設定して、.createpen()でペンを作成し、ペンハンドルを割り付けます。ただし、すでに存在するペン(システム標準ペンSYSPENなど)を使うときは必要ありません。
  2. 描画するウィンドウを.chwin()、.pushwin()などでカレントウィンドウにします。
  3. 表示を行うエリアを.zoom()で、ズームします。
  4. .chpen()、.pushpen()などで、使用するペンをカレントペンにします。
  5. グラフパックの描画ファンクションを使って、実際に描画します。
  6. .endzoom()で、描画状態を終了します。
  7. 必要に応じて、.poppen()などで、カレントペンを元に戻します。
  8. 必要に応じて、.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 表記法

 ファンクションの説明では、次のように表記します。