diff options
| -rw-r--r-- | include/gwin/gwin.h | 29 | ||||
| -rw-r--r-- | src/gwin/gwin.c | 12 | 
2 files changed, 41 insertions, 0 deletions
| 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 */  /** @} */ | 
