連載
» 2009年10月28日 00時00分 公開

“BREW”アプリケーション開発入門(4):ラスタ/ベクタ、2Dグラフィックスの基礎のキソ (2/3)

[末永貴一(エイチアイ),@IT MONOist]

IGraphicsインターフェイスを利用する

 次に、IGraphicsインターフェイスでの描画について解説します。

 IGraphicsインターフェイスでは、表2に示す関数で形状を描画できます。

 先ほど紹介したIDisplayインターフェイスに比べて描画できる形状が多くあることが分かります。このため、2Dベクタグラフィックスを利用する場合は、IGraphicsインターフェイスを多く利用することになるでしょう。


関数名 描画できる形状
IGRAPHICS_DrawArc() 円弧を描画
IGRAPHICS_DrawCircle() 円を描画
IGRAPHICS_DrawEllipse() 楕円を描画
IGRAPHICS_DrawEllipticalArc() 楕円弧を描画
IGRAPHICS_DrawLine() 線分を描画
IGRAPHICS_DrawPie() 扇形を描画
IGRAPHICS_DrawPoint() 点を描画
IGRAPHICS_DrawPolygon() 多角形を描画
IGRAPHICS_DrawPolyline() ポリラインを描画
IGRAPHICS_DrawRect() 長方形を軸整列で描画
IGRAPHICS_DrawRoundRectangle() 角の丸い長方形を描画
IGRAPHICS_DrawTriangle() 三角形を描画
表2 IGraphicsインターフェイスの描画関数

 以下は、IGraphicsインターフェイスを利用したサンプルです(ソース2)。

ソース2 矩形と円形の描画 ソース2 矩形と円形の描画

 また、IGraphics系の機能を使うためには、以下のヘッダーファイルのincludeが必要です。

#include "AEEGraphics.h"          // 追加 

 画像2はBREW Simulator上での実行結果となります。

ソース2の実行結果 画像2 ソース2の実行結果

 まず、IDisplayと大きく異なるのが、IGraphicsインターフェイスを生成している「ISHELL_CreateInstance()」の呼び出し部分です。

ISHELL_CreateInstance(shell, AEECLSID_GRAPHICS, (void **)&graphics) 

 IGraphicsインターフェイスの場合、プログラマがインスタンス生成をする必要があり、そのインスタンス化を行うためにIShellインターフェイスを介して、対象オブジェクトのインスタンス化をBREW AEEに対して要求します。

 「ISHELL_CreateInstance()」では、第2引数に生成する対象の32bitのIDを指定します。このIDが「CLSID」と呼ばれる生成する対象オブジェクトのIDです(注3)。この指定により、対象オブジェクトのインスタンスが第3引数に格納されることになります。

※注3:BREW全体では「AEECLSID」という形で、ほかにも多くのIDが定義されていますので、詳細はBREWのヘルプを参照してください。


 「ISHELL_CreateInstance()」によるインスタンス化は「AEEApplet」構造体に格納されている「IShell」「IModule」「IDisplay」以外のオブジェクトを利用する場合に必要になりますので、利用する機能により対象オブジェクトのインスタンス化を適宜行います。

 ソース2のサンプルでは、矩形(くけい)と円形をそれぞれ描画しています。これらの形状を描画する関数が「IGRAPHICS_DrawRect()」と「IGRAPHICS_DrawCircle()」です。どちらの関数にも共通していますが、引数にセットする描画指定にはそれぞれの形状情報を格納する構造体を指定するようになっています。それが「AEERect」と「AEECircle」です。この構造体に描画する形状の大きさ、描画開始位置などを設定することにより、設定した内容でそれぞれの形状が描画されます。

 ここでは「IGRAPHICS_SetFillMode()」で塗りつぶしを有効にし、それぞれに「IGRAPHICS_SetFillColor()」で色を指定することにより、指定された色で塗りつぶされた形状が描画されます。なお、複数の形状の塗りつぶし色を変える場合は、毎回「IGRAPHICS_SetFillColor()」を指定することになるので注意してください。

 そして、最終的に画面更新を行いますが、IGraphicsインターフェイスでの描画の場合は「IGRAPHICS_Update()」を利用しますので、この点にも注意してください。

Copyright © ITmedia, Inc. All Rights Reserved.