📄 geometry.c
字号:
#include "geometry.h"
#include "geometry.bid"int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj){ *ppObj = NULL; if(ClsId == AEECLSID_GEOMETRY_BID ){ 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;
AECHAR szBuf[] = {'D','r','a','w','i','n','g',' ', 'D', 'e', 'm', 'o', '\0'}; 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
IDISPLAY_DrawText(pMe->m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, 0,
0, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
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);}void Geometry_Cleanup(myapp_t * pApp)
{
IGRAPHICS_Release(pApp->pIGraphics);
}
//draw arc
void 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);
}
//draw circle
void 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 ellipse
void Geometry_CallbackEllipse(myapp_t * pApp)
{
AEEEllipse ellipse;
AECHAR szBuf[] = {'E','l','l','i','p','s','e','\0'};
ellipse.cx = pApp->di.cxScreen / 2;
ellipse.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 line
void 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);
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_CallbackPie, pApp);
}
//draw pie graph
void 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, 0x00, 0xFF, 0x00, 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);
}
//draw point
void 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, 0xFF, 0xFF, 0xFF, 0xFF);
IGRAPHICS_SetPointSize(pApp->pIGraphics, 15);
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 polygon
void Geometry_CallbackPolygon(myapp_t * pApp)
{
AEEPolygon polygon;
AECHAR szBuf[] = {'P','o','l','y','g','o','n','\0'};
polygon.len = 4;
polygon.points = MALLOC(sizeof(AEEPoint) * polygon.len); //allocate point array for polygon
//make polygon points
polygon.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);
}
//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 points
polyline.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, 0xFF, 0xAA, 0x0F, 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);
}
//draw rectangle
void 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 triangle
void Geometry_CallbackTriangle(myapp_t * pApp)
{
AEETriangle triangle;
AECHAR szBuf[] = {'T','r','i','a','n','g','l','e','\0'};
triangle.x0 = 50;
triangle.y0 = 10;
triangle.x1 = 80;
triangle.y1 = 50;
triangle.x2 = 30;
triangle.y2 = 50;
IDISPLAY_ClearScreen (pApp->a.m_pIDisplay);
IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0xAA, 0x00, 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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -