Graphic


HOME > TIPS > Cocoa Programming Tips 1001 > Application Kit > Graphic

Graphic関数

Application Kit - Graphic 関数

グラフィック関係の関数

Keywords: NSGraphics

Application Kit はいろいろな関数を提供しているけど、ここではグラフィック関係のものをまとめてみた。宣言は、ヘッダファイル AppKit/NSGraphics.h の中にある。主な内容は、グラフィック関係の定数、グラフィック環境を調べる関数、線や四角を描画する関数、などだ。NSBeazierPath と機能がかぶるものもある。






Application Kit - Graphic 関数

四角を描く

Keywords: NSFrameRect, NSFrameRectWithWidth

View に四角を描くいちばん手っ取り早い方法は、NSFrameRect() を使うことだ。

Application Kit/NSGraphics.h

APPKIT_EXTERN void NSFrameRect(NSRect rect);
APPKIT_EXTERN void NSFrameRectWithWidth(
        NSRect rect, float frameWidth);

現在の線の太さで描きたいときは NSFrameRect()、線の太さを指定したいときは NSFrameRectWithWidth() だ。

GraphicFunctions/frameRectView.m (sample)

- (void)testNSFrameRect:(NSRect)frameRect
{
  NSRect rect = NSMakeRect(50, 50, 80, 80);

  // Call NSFrameRect
  NSFrameRect(rect);
}

これだけで OK だ。現在の Graphic Context の色と線の太さで描かれる。
線の太さを指定する NSFrameRectWithWidth の呼び出し方は、こんな感じになる。

GraphicFunctions/frameRectView.m (sample)

- (void)testNSFrameRectWithWidth:(NSRect)frameRect
{
  NSRect rect = NSMakeRect(250, 10, 50, 50);

  // Call NSFrameRectWithWidth, width = 1.0
  NSFrameRectWithWidth(rect, 1.0);

  // Call NSFrameRectWithWidth, width = 1.5
  rect.origin.y += 80;
  NSFrameRectWithWidth(rect, 1.5);

  // Call NSFrameRectWithWidth, width = 5.0
  rect.origin.y += 80;
  NSFrameRectWithWidth(rect, 5.0);
}

実行結果は、右の図のようになる。下から順に、線の太さ 1.0、1.5、5.0 だ。1.5 を指定したときは、アンチエイリアシングがかかることに注意。また 5.0 を見ると分かるけど、太い線を描くときは、指定した rect の内側に向かって太くなる。

■関連リンク:
四角を描く(NSBezierPath)

■サンプルダウンロード:
GraphicFunctions.tar




Application Kit - Graphic 関数

四角で塗りつぶす

Keywords: NSRectFill

では、四角で塗りつぶす場合は?NSRectFill() を使う。

Application Kit/NSGraphics.h

APPKIT_EXTERN void NSRectFill(
        NSRect rect);
APPKIT_EXTERN void NSRectFillList(
        const NSRect *rects,
        int count);
APPKIT_EXTERN void NSRectFillListWithGrays(
        const NSRect *rects,
        const float *grays,
        int num);
APPKIT_EXTERN void NSRectFillListWithColors(
        const NSRect *rects,
        NSColor **colors,
        int num);

これらを使うと、現在の Graphics Context の色で塗りつぶされるんだ。いちばん単純なのが NSRectFill()。引き数に指定した rect を塗りつぶす。NSRectFillList() は、複数の rect を一気に描ける。引き数に NSRect の配列と、その数を渡すことになる。NSRectFillListWithGrays() は、複数の rect を、グレーの色を指定して描く。

GraphicFunctions/fillRectView.m (sample)

- (void)testNSRectFillListWithGrays:(NSRect)frameRect
{
 NSRect rect = NSMakeRect(160, 10, 50, 20);
 int rectCount = 10;
 NSRect rectList[rectCount];
 float grays[rectCount];
 int i;

 // Set rectList
 for(i = 0; i < rectCount; i++) {
  *(rectList + i) = rect;
  rect.origin.y += rect.size.height;
 }

 // Set grays
 for(i = 0; i < rectCount; i++) {
  grays[i] = 0.1 * i;
 }

 // Call NSRectFillListWithGrays
 NSRectFillListWithGrays(rectList, grays, rectCount);
}

グレーの色は、float の配列で指定する。値は 0.0 から、1.0 の間で指定する。グレーではなくて好きな色を指定するには、NSRectFillListWithColors() を使おう。

GraphicFunctions/fillRectView.m (sample)

- (void)testNSRectFillListWithColors:(NSRect)frameRect
{
 NSRect  rect = NSMakeRect(240, 10, 50, 10);
 int     rectCount = 20;
 NSRect   rectList[rectCount];
 NSColor*  colors[rectCount];
 int     i;

 // Set rectList
 for(i = 0; i < rectCount; i++) {
  *(rectList + i) = rect;
  rect.origin.y += rect.size.height;
 }

 // Set color
 for(i = 0; i < rectCount; i++) {
  colors[i] =
    [NSColor colorWithDeviceRed:(
        (rectCount - i) * 0.05)
      green:(i * 0.05)
      blue:0.0
      alpha:1.0];
 }

 // Call NSRectFillListWithColors
 NSRectFillListWithColors(rectList, colors, rectCount);
}

実行結果は、右の図のようになる。

こういう四角を描く処理は、NSBeazierPath でも行える。だけど、こちらの方が手軽だし、状況に応じて使い分けよう。

■関連リンク:
四角を描く(NSBezierPath)

■サンプルダウンロード:
GraphicFunctions.tar







Application Kit - Graphic 関数

警告音をならす

Keywords: NSBeep

警告音をならすには、NSBeep() を使う。

Application Kit/NSGraphics.h

APPKIT_EXTERN void NSBeep();

サウンド関係なのに、なぜか NSGraphics.h に含まれている。これを使うと、System Preferences で設定した警告音を鳴らすことができる。




Application Kit

Application Kit