void Canvas::Stretch(int dest_x, int dest_y, unsigned dest_width, unsigned dest_height, ConstImageBuffer src, int src_x, int src_y, unsigned src_width, unsigned src_height) { assert(dest_width < 0x4000); assert(dest_height < 0x4000); if (dest_width == src_width && dest_height == src_height) { /* fast path: no zooming needed */ Copy(dest_x, dest_y, dest_width, dest_height, src, src_x, src_y); return; } if (dest_width >= 0x4000 || dest_height >= 0x4000) /* paranoid sanity check; shouldn't ever happen */ return; SDLRasterCanvas canvas(buffer); canvas.ScaleRectangle(dest_x, dest_y, dest_width, dest_height, src.At(src_x, src_y), src.pitch, src_width, src_height); }
void Canvas::CopyAnd(int dest_x, int dest_y, unsigned dest_width, unsigned dest_height, ConstImageBuffer src, int src_x, int src_y) { SDLRasterCanvas canvas(buffer); canvas.CopyRectangle(dest_x, dest_y, dest_width, dest_height, src.At(src_x, src_y), src.pitch, BitAndPixelOperations<ActivePixelTraits>()); }
void Canvas::Copy(int dest_x, int dest_y, unsigned dest_width, unsigned dest_height, ConstImageBuffer src, int src_x, int src_y) { if (!Clip(dest_x, dest_width, GetWidth(), src_x) || !Clip(dest_y, dest_height, GetHeight(), src_y)) return; SDLRasterCanvas canvas(buffer); canvas.CopyRectangle(dest_x, dest_y, dest_width, dest_height, src.At(src_x, src_y), src.pitch); }
void Canvas::StretchTransparentWhite(int dest_x, int dest_y, unsigned dest_width, unsigned dest_height, ConstImageBuffer src, int src_x, int src_y, unsigned src_width, unsigned src_height) { if (!Clip(dest_x, dest_width, GetWidth(), src_x) || !Clip(dest_y, dest_height, GetHeight(), src_y)) return; SDLRasterCanvas canvas(buffer); TransparentPixelOperations<ActivePixelTraits> operations(canvas.Import(COLOR_WHITE)); canvas.ScaleRectangle(dest_x, dest_y, dest_width, dest_height, src.At(src_x, src_y), src.pitch, src.width, src.height, operations); }
void Canvas::AlphaBlend(int dest_x, int dest_y, unsigned dest_width, unsigned dest_height, ConstImageBuffer src, int src_x, int src_y, unsigned src_width, unsigned src_height, uint8_t alpha) { // TODO: support scaling SDLRasterCanvas canvas(buffer); AlphaPixelOperations<ActivePixelTraits> operations(alpha); canvas.CopyRectangle(dest_x, dest_y, dest_width, dest_height, src.At(src_x, src_y), src.pitch, operations); }
void Canvas::StretchNot(const Bitmap &_src) { assert(_src.IsDefined()); ConstImageBuffer src = _src.GetNative(); const unsigned src_x = 0, src_y = 0; const unsigned dest_x = 0, dest_y = 0; const unsigned dest_width = GetWidth(); const unsigned dest_height = GetHeight(); SDLRasterCanvas canvas(buffer); BitNotPixelOperations<ActivePixelTraits> operations; canvas.ScaleRectangle(dest_x, dest_y, dest_width, dest_height, src.At(src_x, src_y), src.pitch, src.width, src.height, operations); }
void Canvas::StretchAnd(int dest_x, int dest_y, unsigned dest_width, unsigned dest_height, const Bitmap &src, int src_x, int src_y, unsigned src_width, unsigned src_height) { assert(IsDefined()); assert(src.IsDefined()); ConstImageBuffer srcImg = src.GetNative(); SDLRasterCanvas canvas(buffer); BitAndPixelOperations<ActivePixelTraits> operations; canvas.ScaleRectangle(dest_x, dest_y, dest_width, dest_height, srcImg.At(src_x, src_y), srcImg.pitch, src_width, src_height, operations); }
void Canvas::AlphaBlendNotWhite(int dest_x, int dest_y, unsigned dest_width, unsigned dest_height, ConstImageBuffer src, int src_x, int src_y, unsigned src_width, unsigned src_height, uint8_t alpha) { // TODO: support scaling SDLRasterCanvas canvas(buffer); NotWhiteCondition<SDLPixelTraits> c; NotWhiteAlphaPixelOperations<SDLPixelTraits> operations(c, PortableAlphaPixelOperations<SDLPixelTraits>(alpha)); canvas.CopyRectangle(dest_x, dest_y, dest_width, dest_height, src.At(src_x, src_y), src.pitch, operations); }