Top Banner
임임임임 임임임 임임임임임 1 13. IGraphics API • BREW 임 임임임 , 임임임임 , 임 , 임임 임임 임임임임임 임임임임 임임임 임임임임임 임 임임임 . • 임임임임임 임임임 임임 임 임임임임 임 임임 임임 임임임임 . • 임 임임 임임 임임 - 임임 임임임임 . - 임임 임임임 임임임임 . • IGraphic 임임임임임임 임임임임 임임임 임임임 임임 임임임 임임임임 . Draw 임임임 임임임 임임 Draw( 임 , 임 , 임임임 임 ) 임임 Update IGraphics 임임임임임 임임 IGraphics 임임임임임 임임
28

13. IGraphics API

Jan 12, 2016

Download

Documents

shay

13. IGraphics API. BREW 는 삼각형 , 직사각형 , 원 , 파이 조각 쐐기까지도 포함하는 다수의 프리미티프 를 가진다 . 그래픽스는 비트맵 보다 더 간단하고 더 적은 일을 제공한다 . 두 가지 주요 장점 - 확장 가능하다 . - 적은 공간을 차지한다 . IGraphic 인터페이스를 사용하기 위하여 다음과 같은 절차가 필요하다. IGraphics 인터페이스 생성. Draw 작업에 필요한 세팅. Draw( 점 , 선 , 다각형 등 ) 작업. Update. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 13. IGraphics API

임베디드 모바일 프로그래밍 1

13. IGraphics API• BREW 는 삼각형 , 직사각형 , 원 , 파이 조각 쐐기까지도 포함하는 다수의 프리미티프

를 가진다 .

• 그래픽스는 비트맵 보다 더 간단하고 더 적은 일을 제공한다 .

• 두 가지 주요 장점 - 확장 가능하다 .

- 적은 공간을 차지한다 .

• IGraphic 인터페이스를 사용하기 위하여 다음과 같은 절차가 필요하다 .

Draw 작업에 필요한 세팅

Draw( 점 , 선 , 다각형 등 ) 작업

Update

IGraphics 인터페이스 객체

IGraphics 인터페이스 생성

Page 2: 13. IGraphics API

임베디드 모바일 프로그래밍 2

13. IGraphics API

13.1 IGraphics 함수

IGRAPHIC_SetColor 함수

• 현재 RGBA 값을 설정합니다 . 다른 RGBA 값에 대해 이 함수를 다시 호출할 때까지 모든 그래픽 개체는 이 색으로 그려집니다 . 여기서 RGBA 컬러모델은 별도로 투명도를 나타내는 256 단계의 알파채널을 추가한 것이다 .

• 형 식

RGBVAL IGRAPHICS_SetColor (IGraphics * pIGraphics, uint8 r, uint8 g, uint8 b, uint8 alpha)

매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터- r : RGBA 값의 빨간색 구성 요소- g: RGBA 값의 녹색 구성 요소 - b: RGBA 값의 파란색 구성 요소 - alpha: 알파값

반환값

업데이트된 전경색의 RGBA 값

Page 3: 13. IGraphics API

임베디드 모바일 프로그래밍 3

13. IGraphics API IGRAPHIC_DrawArc 함수

• 전경색과 같은 원호를 그린다 .

• 형 식

int IGRAPHICS_DrawArc (IGraphics *po, AEEArc *pArc)

매개변수- po : IGraphics 인터페이스 개체에 대한 포인터 - pArc: 그릴 호에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않은 경우 EBADPARM 을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 4: 13. IGraphics API

임베디드 모바일 프로그래밍 4

13. IGraphics API IGRAPHICS_DrawCircle 함수

• 현재 전경색과 같은 윤곽선의 원을 그린다 . 채우기 모드를 켜면 원의 내부가 현재 채우기 색으로 채워진다 .

• 형 식

int IGRAPHICS_DrawCircle (IGraphics * pIGraphics, AEECircle *pCircle)

매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pCircle: 그릴 원에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 5: 13. IGraphics API

임베디드 모바일 프로그래밍 5

13. IGraphics API IGRAPHICS_DrawEllipse 함수

• 전경색과 같은 윤곽선으로 타원을 그린다 . 채우기 모드를 켜면 타원의 내부가 현재 채우기 색으로 채워진다

• 형 식

int IGRAPHICS_DrawEllipse (IGraphics * pIGraphics, AEEEllipse *pEllipse)

매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pEllipse: 그릴 타원에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않은 경우 EBADPARM 을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 6: 13. IGraphics API

임베디드 모바일 프로그래밍 6

13. IGraphics API IGRAPHICS_DrawLine 함수

• 주어진 시작점과 끝점으로 전경색의 선을 그린다 .

• 형 식

int IGRAPHICS_DrawLine (IGraphics *pGraphics, AEELine *pLine)

매개변수- pGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pLine: 그릴 선에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 7: 13. IGraphics API

임베디드 모바일 프로그래밍 7

13. IGraphics API IGRAPHICS_DrawPie 함수

• 전경색과 같은 윤곽선의 원 조각을 그린다 . 채우기 모드를 켜면 원 조각의 내부가 현재 채우기 색으로 채워진다 .

• 형 식

int IGRAPHICS_DrawPie (IGraphics *po, AEEPie *pPie)

매개변수- po : IGraphics 인터페이스 개체에 대한 포인터- pPie: 그릴 원조각에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 8: 13. IGraphics API

임베디드 모바일 프로그래밍 8

13. IGraphics API IGAPHICS_SetPointSize 함수

• 점 크기 ( 너비 ) 를 픽셀 단위로 설정한다 .

• 형 식

uint8 IGRAPHICS_SetPointSize (IGraphics * pIGraphics, uint8 u8Size)

매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터- u8Size: 픽셀 단위의 점 크기 ( 너비 )

반환값업데이트된 점 크기 값

Page 9: 13. IGraphics API

임베디드 모바일 프로그래밍 9

13. IGraphics API IGRAPHICS_DrawPoint 함수

• 현재 점 크기와 전경색으로 점을 그립니다

• 형 식

int IGRAPHICS_DrawPoint (IGraphics *pGraphics, AEEPoint *pPoint)

매개변수- pGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pPoint: 그릴 점에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 10: 13. IGraphics API

임베디드 모바일 프로그래밍 10

13. IGraphics API IGRAPHICS_DrawPolyline 함수

• 현재 전경색의 윤곽선으로 다각형을 그린다 . 채우기 모드를 켜면 다각형의 내부가 현재 채우기 색으로 채워진다 .

• 형 식int IGRAPHICS_DrawPolygon (IGraphics * pIGraphics, AEEPolygon *pPolygon)

매개변수- pIGraphics: IGraphics 인터페이스 포인터에 대한 포인터- pPolygon: 그릴 다각형에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 11: 13. IGraphics API

임베디드 모바일 프로그래밍 11

13. IGraphics API IGRAPHICS_DrawRect 함수

• 축을 따라 현재 전경색의 윤곽선으로 직사각형을 그린다 . 채우기 모드를 켜면 내부가 현재 채우기 색으로 채워진다 .

• 형 식

int IGRAPHICS_DrawRect (IGraphics * pIGraphics, AEERect * pRect)

매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pRect: 그릴 직사각형에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 12: 13. IGraphics API

임베디드 모바일 프로그래밍 12

13. IGraphics API IGRAPHIC_DrawTriangle 함수

• 현재 전경색의 윤곽선으로 삼각형을 그립니다 . 채우기 모드를 켜면 내부가 현재 채우기 색으로 채워진다 .

• 형 식int IGRAPHICS_DrawTriangle (IGraphics * pIGraphics, AEETriangle *pTriangle)

매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pTriangle: 그릴 삼각형에 대한 포인터

반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .

Page 13: 13. IGraphics API

임베디드 모바일 프로그래밍 13

13. IGraphics API ISHELL_SetTimer 함수

• 타이머가 만료되면 지정한 콜백 함수가 호출되어 함수의 첫 번째 인수로 지정한 사용자 데이터 포인터를 전달한다 .

• 타이머는 현재 시간에 지정한 밀리초 (Milliseconds) 를 더한 시간에 만료된다 .

• 형 식

int ISHELL_SetTimer (IShell *pIShell, int32 dwMSecs, PFNNOTIFY pfn, void * pUser)

매개변수- pIShell: IShell 인터페이스 개체에 대한 포인터 -dwMSecs : 밀리초 단위의 타이머 만료 시간 - pfn : 타이머가 만료될 때 호출되는 사용자 콜백 - pUser : 유일한 매개 변수로 콜백에 전달되는 사용자 데이터 포인터

반환값타이머가 설정되면 SUCCESS 를 반환한다 . 매개 변수가 유효하지 않으면 EBADPARM 을 반환한다 . 만료 시간이 유효하지 않으면 EINVALIDTIME 을 반환한다 . 힙에 타이머를 만들 메모리가 충분하지 않으면 ENOMEMORY 를 반환한다 .

Page 14: 13. IGraphics API

임베디드 모바일 프로그래밍 14

13. IGraphics API

13.2 IGraphic API – 예제 프로그램 (geometry.c)

#include "geometry.h"

#include "geometry.bid"

static void DisplayOutput(IApplet * pMe, int nline, char *pszStr, RGBVAL clrColor);

int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj){ *ppObj = NULL; if(ClsId == AEECLSID_GEOMETRY){ if(AEEApplet_New(sizeof(myapp_t), ClsId, pIShell, po, (IApplet**)ppObj, (AEEHANDLER)Geometry_HandleEvent, (PFNFREEAPPDATA)Geometry_Cleanup) == TRUE) {

return(AEE_SUCCESS); } } return(EFAILED);}static boolean Geometry_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam){ myapp_t * pApp = (myapp_t *)pi; AEEApplet * pMe = &pApp->a;

switch (eCode) { case EVT_APP_START:

ISHELL_GetDeviceInfo (pMe->m_pIShell, &pApp->di);

ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_GRAPHICS,(void **)&pApp->pIGraphics);

IDISPLAY_ClearScreen (pMe->m_pIDisplay); // Clear whole screen

IDisplayOutput((IApplet *)pMe, 5, " 드로잉 데모 ", MAKE_RGB(0,0,0));

IDISPLAY_Update (pMe->m_pIDisplay);

//set timer to start drawing shapes

ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackArc, pApp);

return(TRUE); break; } return(FALSE);}

Page 15: 13. IGraphics API

임베디드 모바일 프로그래밍 15

13. IGraphics APIvoid Geometry_Cleanup(myapp_t * pApp){

IGRAPHICS_Release(pApp->pIGraphics);}

//draw arcvoid Geometry_CallbackArc(myapp_t * pApp){

AEEArc arc;

AECHAR szBuf[] = {'A','r','c','\0'};

arc.cx = pApp->di.cxScreen / 2;arc.cy = pApp->di.cyScreen / 2;arc.r = 30;arc.startAngle = 0;arc.arcAngle = 180;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0x00, 0xFF);

IGRAPHICS_DrawArc(pApp->pIGraphics, &arc);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackCircle, pApp);

}

Page 16: 13. IGraphics API

임베디드 모바일 프로그래밍 16

13. IGraphics API//draw circlevoid Geometry_CallbackCircle(myapp_t * pApp){

AEECircle circle;

AECHAR szBuf[] = {'C','i','r','c','l','e', '\0'};

circle.cx = pApp->di.cxScreen / 2;circle.cy = pApp->di.cyScreen / 2;circle.r = 30;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0xFF, 0xFF);

IGRAPHICS_DrawCircle(pApp->pIGraphics, &circle);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackEllipse, pApp);

}

//draw ellipsevoid Geometry_CallbackEllipse(myapp_t * pApp){

AEEEllipse ellipse;

AECHAR szBuf[] = {'E','l','l','i','p','s','e','\0'};

ellipse.cx = pApp->di.cxScreen / 2;

Page 17: 13. IGraphics API

임베디드 모바일 프로그래밍 17

13. IGraphics APIellipse.cy = pApp->di.cyScreen / 2;ellipse.wx = 30;ellipse.wy = 15;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0x00, 0xFF);

IGRAPHICS_DrawEllipse(pApp->pIGraphics, &ellipse);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackLine, pApp);

}

//draw linevoid Geometry_CallbackLine(myapp_t * pApp){

AEELine line;

AECHAR szBuf[] = {'L','i','n','e','\0'};

line.sx = 20;line.sy = 20;line.ex = 60;line.ey = 60;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0x00, 0xFF);

IGRAPHICS_DrawLine(pApp->pIGraphics, &line);

Page 18: 13. IGraphics API

임베디드 모바일 프로그래밍 18

13. IGraphics APIIDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,

0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackPie, pApp);

}

//draw pie graphvoid Geometry_CallbackPie(myapp_t * pApp){

AEEPie pie;

AECHAR szBuf[] = {'P','i','e','\0'};

pie.cx = pApp->di.cxScreen / 2;pie.cy = pApp->di.cyScreen / 2;pie.r = 30;pie.startAngle = 0;pie.arcAngle = 45;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0xCC, 0x00, 0xFF, 0xFF);

IGRAPHICS_DrawPie(pApp->pIGraphics, &pie);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackPoint, pApp);

}

Page 19: 13. IGraphics API

임베디드 모바일 프로그래밍 19

13. IGraphics API//draw pointvoid Geometry_CallbackPoint(myapp_t * pApp){

AEEPoint point;

AECHAR szBuf[] = {'P','o','i','n','t','\0'};

point.x = pApp->di.cxScreen / 2;point.y = pApp->di.cyScreen / 2;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0x66, 0x00, 0x99, 0xFF);

IGRAPHICS_SetPointSize(pApp->pIGraphics, 10);

IGRAPHICS_DrawPoint(pApp->pIGraphics, &point);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackPolygon, pApp);

}

//draw polygonvoid Geometry_CallbackPolygon(myapp_t * pApp){

AEEPolygon polygon;

AECHAR szBuf[] = {'P','o','l','y','g','o','n','\0'};

Page 20: 13. IGraphics API

임베디드 모바일 프로그래밍 20

13. IGraphics APIpolygon.len = 4;polygon.points = MALLOC(sizeof(AEEPoint) * polygon.len); //allocate point array for polygon

//make polygon pointspolygon.points[0].x = 10;polygon.points[0].y = 10;polygon.points[1].x = 50;polygon.points[1].y = 50;polygon.points[2].x = 30;polygon.points[2].y = 70;polygon.points[3].x = 10;polygon.points[3].y = 30;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0x00, 0xFF);

IGRAPHICS_DrawPolygon(pApp->pIGraphics, &polygon);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);

FREE(polygon.points);

ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackPolyline, pApp);}

Page 21: 13. IGraphics API

임베디드 모바일 프로그래밍 21

13. IGraphics API//draw polyline (multiple connected lines)void Geometry_CallbackPolyline(myapp_t * pApp){

AEEPolyline polyline;

AECHAR szBuf[] = {'P','o','l','y','l','i','n','e','\0'};

polyline.len = 4;polyline.points = MALLOC(sizeof(AEEPoint) * polyline.len); //allocate point array for polyline

//make polyline pointspolyline.points[0].x = 80;polyline.points[0].y = 20;polyline.points[1].x = 30;polyline.points[1].y = 90;polyline.points[2].x = 50;polyline.points[2].y = 70;polyline.points[3].x = 20;polyline.points[3].y = 60;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0x99, 0x00, 0x00, 0xFF);

IGRAPHICS_DrawPolyline(pApp->pIGraphics, &polyline);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);

FREE(polyline.points);

ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackRect, pApp);}

Page 22: 13. IGraphics API

임베디드 모바일 프로그래밍 22

//draw rectanglevoid Geometry_CallbackRect(myapp_t * pApp){

AEERect rect;

AECHAR szBuf[] = {'R','e','c','t','a','n','g','l','e','\0'};

rect.x = 20;rect.y = 20;rect.dx = 80;rect.dy = 50;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0x00, 0x00, 0xFF, 0xFF);

IGRAPHICS_DrawRect(pApp->pIGraphics, &rect);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackTriangle, pApp);

}

//draw trianglevoid Geometry_CallbackTriangle(myapp_t * pApp){

AEETriangle triangle;

AECHAR szBuf[] = {'T','r','i','a','n','g','l','e','\0'};

triangle.x0 = 50;triangle.y0 = 10;

13. IGraphics API

Page 23: 13. IGraphics API

임베디드 모바일 프로그래밍 23

13. IGraphics APItriangle.x1 = 80;triangle.y1 = 50;triangle.x2 = 30;triangle.y2 = 50;

IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0xFF, 0xFF);

IGRAPHICS_DrawTriangle(pApp->pIGraphics, &triangle);

IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15,0, IDF_ALIGN_CENTER);

IDISPLAY_Update (pApp->a.m_pIDisplay);ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackArc, pApp);

}

static void DisplayOutput(IApplet * pi, int nline, char *pszStr, RGBVAL clrColor){ AEEDeviceInfo di; // Device Info AECHAR szBuf[200] = {0}; // a buffer that supports 200 char string AECHAR * psz = NULL; int pixelWidth; AEEFont font = AEE_FONT_NORMAL; int pnFits = 0, dy; int totalCh = 0; int charHeight = 0; // Stores the char height in pixels for given font int pnAscent = 0; // Stores the ascent in number of pixels int pnDescent = 0; // Stores the descent in number of pixels AEERect rc;

Page 24: 13. IGraphics API

임베디드 모바일 프로그래밍 24

13. IGraphics API AEEApplet * pMe = (AEEApplet*)pi; if (pMe == NULL) return;

// Get device information ISHELL_GetDeviceInfo(pMe->m_pIShell,&di);

// Get the font metrics info charHeight = IDISPLAY_GetFontMetrics (pMe->m_pIDisplay, AEE_FONT_NORMAL, &pnAscent, &pnDescent); STREXPAND((byte *)pszStr, STRLEN(pszStr), szBuf, sizeof(szBuf)); if (nline < 0) { dy = di.cyScreen*2/5; } else{ dy = nline * charHeight; }

psz = szBuf; totalCh = STRLEN ((char *)pszStr);

while ((totalCh > 0) && (*psz != NULL)) { pixelWidth = IDISPLAY_MeasureTextEx(pMe->m_pIDisplay, font, (AECHAR *) psz, // Start of the buffer to display, -1, di.cxScreen - 5, // maxWidth &pnFits); // Number of chars that will fit a line

Page 25: 13. IGraphics API

임베디드 모바일 프로그래밍 25

13. IGraphics APIif (pnFits == 0) return;

SETAEERECT(&rc, 0, dy, di.cxScreen, charHeight);IDISPLAY_EraseRect(pMe->m_pIDisplay, &rc);IDISPLAY_SetColor(pMe->m_pIDisplay,CLR_USER_TEXT,clrColor);

IDISPLAY_DrawText(pMe->m_pIDisplay, AEE_FONT_BOLD, psz, pnFits, 5 /*start dx*/, dy, 0 /* use default rectangle coordinates */, IDF_ALIGN_CENTER);

psz += pnFits; // move pointer to the next segment to be displayed totalCh -= pnFits; // reduce the total number of characters to still display dy += charHeight; // Place next line charHeight pixels below the // previous line. IDISPLAY_Update(pMe->m_pIDisplay); if (totalCh < pnFits) pnFits = totalCh; // if total number is less than pnFits, adjust pnFits } return; }

Page 26: 13. IGraphics API

임베디드 모바일 프로그래밍 26

13. IGraphics API// geometry.h

#ifndef __GEOMETRY_H__#define __GEOMETRY_H__

#include "AEE.h"#include "AEEDisp.h"#include "AEEModGen.h"#include "AEEAppGen.h"#include "AEEDisp.h"#include "AEEClassIDs.h"#include "AEEStdLib.h"#include "AEEImage.h"#include "AEEShell.h"#include "AEEGraphics.h"

#include "AEEMenu.h" // Menu Services#include "AEEFile.h" // AEEFile Services#include "AEEText.h"

#define TIMER_PERIOD 2000

typedef struct myapp_s{

AEEApplet a; //applet header

AEEDeviceInfo di;

IGraphics * pIGraphics;} myapp_t;

Page 27: 13. IGraphics API

임베디드 모바일 프로그래밍 27

13. IGraphics APIstatic boolean Geometry_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam);

void Geometry_Cleanup(myapp_t* pApp);

//drawing callbacks

void Geometry_CallbackArc(myapp_t * pApp);void Geometry_CallbackCircle(myapp_t * pApp);void Geometry_CallbackEllipse(myapp_t * pApp);void Geometry_CallbackLine(myapp_t * pApp);void Geometry_CallbackPie(myapp_t * pApp);void Geometry_CallbackPoint(myapp_t * pApp);void Geometry_CallbackPolygon(myapp_t * pApp);void Geometry_CallbackPolyline(myapp_t * pApp);void Geometry_CallbackRect(myapp_t * pApp);void Geometry_CallbackTriangle(myapp_t * pApp);

#endif

Page 28: 13. IGraphics API

임베디드 모바일 프로그래밍 28

13. IGraphics API

13.3 실행결과