Upload
shay
View
46
Download
4
Embed Size (px)
DESCRIPTION
13. IGraphics API. BREW 는 삼각형 , 직사각형 , 원 , 파이 조각 쐐기까지도 포함하는 다수의 프리미티프 를 가진다 . 그래픽스는 비트맵 보다 더 간단하고 더 적은 일을 제공한다 . 두 가지 주요 장점 - 확장 가능하다 . - 적은 공간을 차지한다 . IGraphic 인터페이스를 사용하기 위하여 다음과 같은 절차가 필요하다. IGraphics 인터페이스 생성. Draw 작업에 필요한 세팅. Draw( 점 , 선 , 다각형 등 ) 작업. Update. - PowerPoint PPT Presentation
Citation preview
임베디드 모바일 프로그래밍 1
13. IGraphics API• BREW 는 삼각형 , 직사각형 , 원 , 파이 조각 쐐기까지도 포함하는 다수의 프리미티프
를 가진다 .
• 그래픽스는 비트맵 보다 더 간단하고 더 적은 일을 제공한다 .
• 두 가지 주요 장점 - 확장 가능하다 .
- 적은 공간을 차지한다 .
• IGraphic 인터페이스를 사용하기 위하여 다음과 같은 절차가 필요하다 .
Draw 작업에 필요한 세팅
Draw( 점 , 선 , 다각형 등 ) 작업
Update
IGraphics 인터페이스 객체
IGraphics 인터페이스 생성
임베디드 모바일 프로그래밍 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 값
임베디드 모바일 프로그래밍 3
13. IGraphics API IGRAPHIC_DrawArc 함수
• 전경색과 같은 원호를 그린다 .
• 형 식
int IGRAPHICS_DrawArc (IGraphics *po, AEEArc *pArc)
매개변수- po : IGraphics 인터페이스 개체에 대한 포인터 - pArc: 그릴 호에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않은 경우 EBADPARM 을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 4
13. IGraphics API IGRAPHICS_DrawCircle 함수
• 현재 전경색과 같은 윤곽선의 원을 그린다 . 채우기 모드를 켜면 원의 내부가 현재 채우기 색으로 채워진다 .
• 형 식
int IGRAPHICS_DrawCircle (IGraphics * pIGraphics, AEECircle *pCircle)
매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pCircle: 그릴 원에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 5
13. IGraphics API IGRAPHICS_DrawEllipse 함수
• 전경색과 같은 윤곽선으로 타원을 그린다 . 채우기 모드를 켜면 타원의 내부가 현재 채우기 색으로 채워진다
• 형 식
int IGRAPHICS_DrawEllipse (IGraphics * pIGraphics, AEEEllipse *pEllipse)
매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pEllipse: 그릴 타원에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않은 경우 EBADPARM 을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 6
13. IGraphics API IGRAPHICS_DrawLine 함수
• 주어진 시작점과 끝점으로 전경색의 선을 그린다 .
• 형 식
int IGRAPHICS_DrawLine (IGraphics *pGraphics, AEELine *pLine)
매개변수- pGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pLine: 그릴 선에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 7
13. IGraphics API IGRAPHICS_DrawPie 함수
• 전경색과 같은 윤곽선의 원 조각을 그린다 . 채우기 모드를 켜면 원 조각의 내부가 현재 채우기 색으로 채워진다 .
• 형 식
int IGRAPHICS_DrawPie (IGraphics *po, AEEPie *pPie)
매개변수- po : IGraphics 인터페이스 개체에 대한 포인터- pPie: 그릴 원조각에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 8
13. IGraphics API IGAPHICS_SetPointSize 함수
• 점 크기 ( 너비 ) 를 픽셀 단위로 설정한다 .
• 형 식
uint8 IGRAPHICS_SetPointSize (IGraphics * pIGraphics, uint8 u8Size)
매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터- u8Size: 픽셀 단위의 점 크기 ( 너비 )
반환값업데이트된 점 크기 값
임베디드 모바일 프로그래밍 9
13. IGraphics API IGRAPHICS_DrawPoint 함수
• 현재 점 크기와 전경색으로 점을 그립니다
• 형 식
int IGRAPHICS_DrawPoint (IGraphics *pGraphics, AEEPoint *pPoint)
매개변수- pGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pPoint: 그릴 점에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 10
13. IGraphics API IGRAPHICS_DrawPolyline 함수
• 현재 전경색의 윤곽선으로 다각형을 그린다 . 채우기 모드를 켜면 다각형의 내부가 현재 채우기 색으로 채워진다 .
• 형 식int IGRAPHICS_DrawPolygon (IGraphics * pIGraphics, AEEPolygon *pPolygon)
매개변수- pIGraphics: IGraphics 인터페이스 포인터에 대한 포인터- pPolygon: 그릴 다각형에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 11
13. IGraphics API IGRAPHICS_DrawRect 함수
• 축을 따라 현재 전경색의 윤곽선으로 직사각형을 그린다 . 채우기 모드를 켜면 내부가 현재 채우기 색으로 채워진다 .
• 형 식
int IGRAPHICS_DrawRect (IGraphics * pIGraphics, AEERect * pRect)
매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pRect: 그릴 직사각형에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 12
13. IGraphics API IGRAPHIC_DrawTriangle 함수
• 현재 전경색의 윤곽선으로 삼각형을 그립니다 . 채우기 모드를 켜면 내부가 현재 채우기 색으로 채워진다 .
• 형 식int IGRAPHICS_DrawTriangle (IGraphics * pIGraphics, AEETriangle *pTriangle)
매개변수- pIGraphics: IGraphics 인터페이스 개체에 대한 포인터 - pTriangle: 그릴 삼각형에 대한 포인터
반환값이 트랜잭션의 상태를 나타내는 오류 코드 : 입력 매개 변수 중 하나가 유효하지 않으면 EBADPARM을 반환하고 그렇지 않으면 SUCCESS 를 반환한다 .
임베디드 모바일 프로그래밍 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 를 반환한다 .
임베디드 모바일 프로그래밍 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);}
임베디드 모바일 프로그래밍 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);
}
임베디드 모바일 프로그래밍 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;
임베디드 모바일 프로그래밍 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);
임베디드 모바일 프로그래밍 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);
}
임베디드 모바일 프로그래밍 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'};
임베디드 모바일 프로그래밍 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);}
임베디드 모바일 프로그래밍 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);}
임베디드 모바일 프로그래밍 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
임베디드 모바일 프로그래밍 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;
임베디드 모바일 프로그래밍 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
임베디드 모바일 프로그래밍 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; }
임베디드 모바일 프로그래밍 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;
임베디드 모바일 프로그래밍 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
임베디드 모바일 프로그래밍 28
13. IGraphics API
13.3 실행결과