From 25a01150144aa713a92c24535e0ed64755f5ea5c Mon Sep 17 00:00:00 2001 From: inmarket Date: Mon, 22 Jul 2013 17:05:42 +1000 Subject: [PATCH] This image wrapper really is meant to be there and is used by some demo apps (notepad-2) --- include/gwin/gwin.h | 33 +++++++++++++++++++++++++++++++++ src/gwin/gwin.c | 12 ++++++++++++ 2 files changed, 45 insertions(+) diff --git a/include/gwin/gwin.h b/include/gwin/gwin.h index de4b6387..372ece9c 100644 --- a/include/gwin/gwin.h +++ b/include/gwin/gwin.h @@ -765,6 +765,39 @@ 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 gwinDrawImage(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 + /*------------------------------------------------- * Additional functionality *-------------------------------------------------*/ diff --git a/src/gwin/gwin.c b/src/gwin/gwin.c index 16f06b0c..f5d78ac6 100644 --- a/src/gwin/gwin.c +++ b/src/gwin/gwin.c @@ -489,6 +489,18 @@ void gwinBlitArea(GHandle gh, coord_t x, coord_t y, coord_t cx, coord_t cy, coor } #endif +#if GDISP_NEED_IMAGE + gdispImageError gwinDrawImage(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 */ /** @} */