From a7198b53ff82a02a86a55823a8be895ec5eca1e4 Mon Sep 17 00:00:00 2001 From: inmarket Date: Thu, 4 Jul 2013 00:54:25 +1000 Subject: [PATCH] Restore gwin base class image function --- include/gwin/gwin.h | 29 +++++++++++++++++++++++++++++ src/gwin/gwin.c | 12 ++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/gwin/gwin.h b/include/gwin/gwin.h index 4fb28bef..ba9e1e1a 100644 --- a/include/gwin/gwin.h +++ b/include/gwin/gwin.h @@ -720,6 +720,35 @@ extern "C" { void gwinFillConvexPoly(GHandle gh, coord_t tx, coord_t ty, const point *pntarray, unsigned cnt); #endif +/*------------------------------------------------- + * Image functions + *-------------------------------------------------*/ + + #if GDISP_NEED_IMAGE || defined(__DOXYGEN__) + /** + * @brief Draw the image + * @return GDISP_IMAGE_ERR_OK (0) on success or an error code. + * + * @param[in] gh The window handle + * @param[in] img The image structure + * @param[in] x,y The window location to draw the image + * @param[in] cx,cy The area on the screen to draw + * @param[in] sx,sy The image position to start drawing at + * + * @pre gdispImageOpen() must have returned successfully. + * + * @note If sx,sy + cx,cy is outside the image boundaries the area outside the image + * is simply not drawn. + * @note If @p gdispImageCache() has been called first for this frame, this routine will draw using a + * fast blit from the cached frame. If not, it reads the input and decodes it as it + * is drawing. This may be significantly slower than if the image has been cached (but + * uses a lot less RAM) + * + * @api + */ + gdispImageError gwinImageDraw(GHandle gh, gdispImage *img, coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t sx, coord_t sy); + #endif + #ifdef __cplusplus } #endif diff --git a/src/gwin/gwin.c b/src/gwin/gwin.c index de1673cb..e3d81d9c 100644 --- a/src/gwin/gwin.c +++ b/src/gwin/gwin.c @@ -501,6 +501,18 @@ void gwinBlitArea(GHandle gh, coord_t x, coord_t y, coord_t cx, coord_t cy, coor } #endif +#if GDISP_NEED_IMAGE + gdispImageError gwinImageDraw(GHandle gh, gdispImage *img, coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t sx, coord_t sy) { + if (!((gh->flags & GWIN_FLG_VISIBLE))) + return GDISP_IMAGE_ERR_OK; + + #if GDISP_NEED_CLIP + gdispSetClip(gh->x, gh->y, gh->width, gh->height); + #endif + return gdispImageDraw(img, gh->x+x, gh->y+y, cx, cy, sx, sy); + } +#endif + #endif /* GFX_USE_GWIN */ /** @} */