void F_MotionBlur::applyFilter(PixelBuffer *canvas) { ColorData newPixel; copyCanvas(canvas); for(int curX = 0; curX < canvas->getWidth(); curX++) { for(int curY = 0; curY < canvas->getHeight(); curY++) { newPixel = getBlurredColor(curX, curY); canvas->setPixel(curX, curY, newPixel); } } freeTempCanvas(); }
void Canvas::copyScaleCanvas(const Canvas* canvas, const Rect& src, const Rect& dst) { if (src.size == dst.size) { copyCanvas(canvas, src, dst.origin); return; } if (dst.size.w <= 0 || dst.size.h <= 0) return; XTransform xform = {{ { XDoubleToFixed((double)src.size.w / dst.size.w), XDoubleToFixed(0), XDoubleToFixed(src.origin.x) }, { XDoubleToFixed(0), XDoubleToFixed((double)src.size.h / dst.size.h), XDoubleToFixed(src.origin.y) }, { XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1) }, }}; XRenderSetPictureTransform(display()->xdisplay(), canvas->xpicture(), &xform); Point offset = absolutePosition(); XRenderComposite( display()->xdisplay(), PictOpOver, canvas->xpicture(), None, xpicture(), 0, 0, 0, 0, dst.origin.x + offset.x, dst.origin.y + offset.y, dst.size.w, dst.size.h ); XTransform identity = {{ { XDoubleToFixed(1), XDoubleToFixed(0), XDoubleToFixed(0) }, { XDoubleToFixed(0), XDoubleToFixed(1), XDoubleToFixed(0) }, { XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1) }, }}; XRenderSetPictureTransform(display()->xdisplay(), canvas->xpicture(), &identity); }
void Canvas::drawImage(const Image* image, const Point& origin, bool copyArea) { copyCanvas(image, Rect(Point(0, 0), image->size()), origin, copyArea); }