gx 라이브러리에 사각형을 그리는 gx_rectangle()를 추가했습니다.

gx_rectangle()

형태 void gx_rectangle ( dc_t dc, int x1, int y1, int x2, int y2);
인수 dc_t dc 출력 대상 Device Context
  int x1, int y1 사각형의 첫 번째 좌표
  int x2, int y2 사각형의 두 번째 좌표

gx_rectangle()는 dc의 pen_color로 테두리를 그리고 brush_color로 내부 색을 채웁니다. 또한 pen_color 나 brush_color 가 clr_clear 일 경우 칠해지지 않습니다.

gx_rectangle()함수는 내부에 사각형 테두리를 구려주는 gx_border()와 내부가 채워진 사각형을 그리는 gx_box()을 호출해 줍니다.

void  gx_rectangle( dc_t *dc, int x1, int y1, int x2, int y2)
{
   gx_box   ( dc, x1, y1, x2, y2);
   gx_border( dc, x1, y1, x2, y2);
}

gx_box()나 gx_border() 모두 사용할 색상이 clr_clear 이면 그리기를 취소합니다.

void  gx_box( dc_t *dc, int x1, int y1, int x2, int y2)
{                
   if (clr_clear == dc->brush_color)      return;

sample 소스

화면에 난수로 구한 사각형을 계속 그립니다. 너무 빠르게 그려지기 때문에 usleep()함수를 사용했습니다. sleep()함수는 인수값이 초 단위라면 usleep()은 1 마이크로초로 100만분의 1초입니다.

void  test_rectangle( dc_t *dc)
{
   int      x1, y1, x2, y2;
   int      ndx;

   dc->brush_color   = clr_clear;              // brush 가 clr_clear 이므로 빈 사각형 그림

   for ( ndx= 0; ndx < 30; ndx++)
   {
      x1             = rand() % dc->width;    // 난수로 좌표와 칼라 값을 구함
      y1             = rand() % dc->height;
      x2             = rand() % dc->width;
      y2             = rand() % dc->height;
      dc->pen_color  = gx_color( dc, rand() %128 +128, rand() %128 +128, rand() %128 +128);
      gx_rectangle( dc, x1, y1, x2, y2);
      usleep( 150 *1000);           // 150 msec
   }
   for ( ndx= 0; ndx < 30; ndx++)
   {
      x1             = rand() % dc->width;
      y1             = rand() % dc->height;
      x2             = rand() % dc->width;
      y2             = rand() % dc->height;
      dc->pen_color  = gx_color( dc, rand() %128 +128, rand() %128 +128, rand() %128 +128);
      dc->brush_color= gx_color( dc, rand() %128 +128, rand() %128 +128, rand() %128 +128);
      gx_rectangle( dc, x1, y1, x2, y2);
      usleep( 150 *1000);           // 150 msec
   }
}
void	test( void)
{
   Device Context 를 생성하고 성공하면 test_rectangle() 호출
}

int   main( void)
{
   gx를 초기화하고 성공하면 test() 호출
}

실행하게 되면 아래와 같이 사각형이 계속 그려집니다.

 태그: *그래픽 *라이브러리 *그래픽라이브러리