1 / 16

10. IDisplay API (1)

10. IDisplay API (1). IDisplay 인터페이스 함수는 직선이나 직사각형과 같은 단순한 기하 모양 , 텍스트 및 비트맵을 장치 디스플레이에 그릴 수 있다 . 10.1 IDisplay 함수 텍스트 IDISPLAY_DrawText 함수 : 주어진 글꼴을 사용하여 화면에 지정된 x, y 좌표에 텍스트 문자 열을 그린다. 10. IDisplay API (1). 클리핑 (clipping) 이란 , 레이어의 영역 중 일부를 숨기고 , 나머지 부분만 보이게 하는 효과

annis
Download Presentation

10. IDisplay API (1)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 10. IDisplay API (1) • IDisplay 인터페이스 함수는 직선이나 직사각형과 같은 단순한 기하 모양, 텍스트 및 비트맵을 장치 디스플레이에 그릴 수 있다. • 10.1 IDisplay 함수 • 텍스트 • IDISPLAY_DrawText 함수: 주어진 글꼴을 사용하여 화면에 지정된 x, y 좌표에 텍스트 문자 • 열을 그린다. 임베디드 모바일 프로그래밍

  2. 10. IDisplay API (1) • 클리핑(clipping)이란, 레이어의 영역 중 일부를 숨기고, 나머지 부분만 보이게 하는 효과 입니다. 보이는 영역이 클리핑 영역이 됩니다. 임베디드 모바일 프로그래밍

  3. 10. IDisplay API (1) (2) IDISPLAY_GetFontMetrics 함수: 지정한 글꼴의 텍스트 높이를 픽셀 단위로 변환한다. 임베디드 모바일 프로그래밍

  4. 10. IDisplay API (1) (3) IDISPLAY_MeasureTextEx 함수: 한 라인에 출력될 수 있는 문자의 개수를 구한다. 임베디드 모바일 프로그래밍

  5. 10. IDisplay API (1) (4) IDISPLAY_EraseRect 함수: 주어진 사각형 영역(pRect)을 배경색 (CLR_USER_BACKGROUND)으로 채운다. 배경색은 IDISPLAY_SetColor() 함수를 통해 변경할 수 있다. 임베디드 모바일 프로그래밍

  6. 10. IDisplay API (1) (5) IDISPLAY_Update 함수: 화면에 그리기 동작을 수행한다. 임베디드 모바일 프로그래밍

  7. 10. IDisplay API (1) 10.2 IDisplay – 텍스트 프로그램 (IDisplayEx) /*=============================================================================== INCLUDES AND VARIABLE DEFINITIONS =============================================================================== */ #include "AEEModGen.h" // Module interface definitions #include "AEEAppGen.h" // Applet interface definitions #include "AEEShell.h" // Shell interface definitions #include "AEEMenu.h" #include "AEEStdLib.h" #include "AEEDisp.h" #include "IDisplayEx.bid" #define MENU_EVT_DISPLAY 401 typedef struct _CIDisplayEx { AEEApplet a; // Mandatory first AEEApplet data member IMenuCtl * m_pIMenu; // Device parameters int m_nLineHeight; int m_nButton; int m_nDrawRect; int m_nFrame; int m_nDrawLine; AEEDeviceInfo m_dInfo; } CIDisplayEx; 임베디드 모바일 프로그래밍

  8. 10. IDisplay API (1) /*------------------------------------------------------------------- Function Prototypes -------------------------------------------------------------------*/ // IShellExample 애플릿에서 발생하는 이벤트 처리 함수 static boolean IDisplayEx_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam); static boolean IDisplayEx_InitAppData(IApplet* pMe); static void IDisplayEx_FreeAppData(IApplet* pMe); static void DisplayOutput(IApplet * pMe, int nline, char *pszStr, RGBVAL clrColor); AECHAR* _STR_TO_WSTR(char* pszIn, AECHAR* pDest, int nSize); int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po, void ** ppObj) { *ppObj = NULL; if(ClsId == AEECLSID_IDISPLAYEX){ if(AEEApplet_New(sizeof(CIDisplayEx), ClsId, pIShell,po,(IApplet**)ppObj, (AEEHANDLER)IDisplayEx_HandleEvent,(PFNFREEAPPDATA)IDisplayEx_FreeAppData) == TRUE) { if (IDisplayEx_InitAppData((IApplet*)*ppObj) == TRUE) return(AEE_SUCCESS); } } return (EFAILED); } 임베디드 모바일 프로그래밍

  9. 10. IDisplay API (1) static boolean IDisplayEx_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam) { CIDisplayEx * pMe = (CIDisplayEx *)pi; AEERect rc; AECHAR szBuf[50]; AEEMenuColors mclr; SETAEERECT (&rc, 0, 0, pMe->m_dInfo.cxScreen, pMe->m_dInfo.cyScreen); switch (eCode) { case EVT_APP_START: // 알람 정보를 등록할 메뉴 컨트롤을 생성한다. if(ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_MENUCTL, (void **)&pMe->m_pIMenu) != SUCCESS) { return FALSE; } // 선택된 메뉴의 색상을 설정한다 mclr.wMask = MC_BACK|MC_TEXT|MC_SEL_BACK|MC_SEL_TEXT|MC_SCROLLBAR|MC_SCROLLBAR_FILL|MC_FRAME; mclr.cBack = RGB_WHITE; mclr.cText = RGB_BLACK; //mclr.cSelBack = MAKE_RGB (146, 109, 255); mclr.cSelBack = MAKE_RGB (124, 109, 197); mclr.cSelText = RGB_BLACK; mclr.cFrame = RGB_WHITE; 임베디드 모바일 프로그래밍

  10. 10. IDisplay API (1) IMENUCTL_SetColors (pMe->m_pIMenu, &mclr); _STR_TO_WSTR("IDisplay 예제", szBuf, sizeof(szBuf)); IMENUCTL_SetTitle(pMe->m_pIMenu, NULL, 0, szBuf); IMENUCTL_SetRect(pMe->m_pIMenu, &rc); // Add CreateInstance to menu _STR_TO_WSTR("1. 텍스트 처리", szBuf, sizeof(szBuf)); IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVT_DISPLAY, szBuf, 0); IMENUCTL_SetActive(pMe->m_pIMenu,TRUE); return(TRUE); // 애플릿이 종료될 때 발생하는 이벤트이다. case EVT_APP_STOP: return(TRUE); case EVT_APP_SUSPEND: return TRUE; case EVT_APP_RESUME: return TRUE; case EVT_ALARM: return TRUE; case EVT_DIALOG_INIT: return TRUE; case EVT_DIALOG_START: return TRUE; case EVT_DIALOG_END: return TRUE; // EVT_KEY 이벤트를 처리하지 않으면 특정 메뉴 아이템을 선택했을 때 원하는 작업을 // 수행할 수 없다. 여기서 발생하는 이벤트를 EVT_COMMAND 로 보내게 된다. // 대화 상자 이벤트 case EVT_KEY: return IMENUCTL_HandleEvent(pMe->m_pIMenu, EVT_KEY, wParam, 0); 임베디드 모바일 프로그래밍

  11. 10. IDisplay API (1) case EVT_COMMAND: switch(wParam) { case MENU_EVT_DISPLAY: { IDISPLAY_ClearScreen (pMe->a.m_pIDisplay); IMENUCTL_SetProperties(pMe->m_pIMenu, MP_NO_REDRAW); IMENUCTL_SetActive(pMe->m_pIMenu, FALSE); DisplayOutput((IApplet *)pMe, 1, "임베디드모바일프로그래밍", MAKE_RGB(0xff,0,0)); DisplayOutput((IApplet *)pMe, 3, "최 대환", MAKE_RGB(0,0,0xff)); DisplayOutput((IApplet *)pMe, 4, "전 윤정", MAKE_RGB(0,0,0xff)); DisplayOutput((IApplet *)pMe, 5, "전 지영", MAKE_RGB(0,0,0xff)); DisplayOutput((IApplet *)pMe, 6, "남 지영", MAKE_RGB(0,0,0xff)); return TRUE; } default: return FALSE; } default: break; } return FALSE; } 임베디드 모바일 프로그래밍

  12. 10. IDisplay API (1) static boolean IDisplayEx_InitAppData(IApplet* pi) { CIDisplayEx* pMe = (CIDisplayEx*)pi; int pnAscent = 0; int pnDescent = 0; // Initialize the MenuCtl pointer to NULL pMe->m_pIMenu = NULL; pMe->m_nButton = 0; pMe->m_nFrame = 0; pMe->m_nDrawLine = 0; pMe->m_nDrawRect = 0; pMe->m_nLineHeight = IDISPLAY_GetFontMetrics (pMe->a.m_pIDisplay, AEE_FONT_NORMAL, &pnAscent, &pnDescent); ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->m_dInfo); return TRUE; } static void IDisplayEx_FreeAppData(IApplet* pi) { CIDisplayEx* pMe = (CIDisplayEx*)pi; // 메뉴 컨트롤이 해지가 되지 않았다면 해지한다. if (pMe->m_pIMenu != NULL) { // 메뉴 컨트롤 해지하는 함수 IMENUCTL_Release (pMe->m_pIMenu); pMe->m_pIMenu = NULL; } } 임베디드 모바일 프로그래밍

  13. 10. IDisplay API (1) 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; 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); 출력될 문자열의 높이를 구한다. 임베디드 모바일 프로그래밍

  14. 10. IDisplay API (1) STREXPAND((const unsigned char *) 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 if (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_NORMAL, psz, pnFits, 5 /*start dx*/, dy, 0 /* use default rectangle coordinates */, 0); AEEDeviceInfo 구조체 typedef struct { uint cxScreen; uint cyScreen; //실제 세로화면 크기 (픽셀) … 1바이트를 2바이트 문자열로 변환 한라인에 출력될 문자의 개수를 구한다. 한 라인에 출력할 개수 만큼 문자를 출력한다. 임베디드 모바일 프로그래밍

  15. 10. IDisplay API (1) 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; } AECHAR* _STR_TO_WSTR(char* pszIn, AECHAR* pDest, int nSize) { char* psSource = pszIn; char* pcDestin = (char *)pDest; int npszInSize = STRLEN(pszIn); MEMSET(pDest, 0, nSize); for(psSource = pszIn; psSource < (pszIn + npszInSize); psSource++) { if ((*psSource) < 0 || (*psSource) >= 128) { *pcDestin = *psSource; pcDestin += 1; } else { *pcDestin = *psSource; pcDestin += 1; *pcDestin = 0; pcDestin += 1; } } return (AECHAR*)pcDestin; } 임베디드 모바일 프로그래밍

  16. 10. IDisplay API (1) 10.3 실행 결과 임베디드 모바일 프로그래밍

More Related