MSX Datapack wiki化計画

13章 グラフパックの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{include unfinished_page}}

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[12章 ビットブロックマネージャ]]                                                  ,{BSIZE:0|RIGHT}[[14章 フォントパック]]                                                           →

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

!!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 グラフパックのファンクション一覧'''

,{t},{BSIZE:2 0}
,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0}
,機能番号,名前,意味,ページ
,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0}
,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 表記法
 ファンクションの説明では、次のように表記します。

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[12章 ビットブロックマネージャ]]                                                  ,{BSIZE:0|RIGHT}[[14章 フォントパック]]                                                           →