int GP_FilterGaussianBlurEx(const GP_Context *src, GP_Coord x_src, GP_Coord y_src, GP_Size w_src, GP_Size h_src, GP_Context *dst, GP_Coord x_dst, GP_Coord y_dst, float sigma_x, float sigma_y, GP_ProgressCallback *callback) { GP_CHECK(src->pixel_type == dst->pixel_type); /* Check that destination is large enough */ GP_CHECK(x_dst + (GP_Coord)w_src <= (GP_Coord)dst->w); GP_CHECK(y_dst + (GP_Coord)h_src <= (GP_Coord)dst->h); return GP_FilterGaussianBlur_Raw(src, x_src, y_src, w_src, h_src, dst, x_dst, y_dst, sigma_x, sigma_y, callback); }
void GP_BlitXYXY(const GP_Context *src, GP_Coord x0, GP_Coord y0, GP_Coord x1, GP_Coord y1, GP_Context *dst, GP_Coord x2, GP_Coord y2) { /* Normalize source rectangle */ if (x1 < x0) GP_SWAP(x0, x1); if (y1 < y0) GP_SWAP(y0, y1); /* All coordinates are inside of src the context */ GP_CHECK(x0 < (GP_Coord)GP_ContextW(src)); GP_CHECK(y0 < (GP_Coord)GP_ContextH(src)); GP_CHECK(x1 < (GP_Coord)GP_ContextW(src)); GP_CHECK(y1 < (GP_Coord)GP_ContextH(src)); /* Destination is big enough */ GP_CHECK(x2 + (x1 - x0) < (GP_Coord)GP_ContextW(dst)); GP_CHECK(y2 + (y1 - y0) < (GP_Coord)GP_ContextH(dst)); GP_BlitXYXY_Fast(src, x0, y0, x1, y1, dst, x2, y2); }