void PDFDocumentImage::draw(GraphicsContext* context, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace, CompositeOperator op, BlendMode) { if (!m_document || m_currentPage == -1) return; { GraphicsContextStateSaver stateSaver(*context); context->setCompositeOperation(op); float hScale = dstRect.width() / srcRect.width(); float vScale = dstRect.height() / srcRect.height(); // Scale and translate so the document is rendered in the correct location, // including accounting for the fact that a GraphicsContext is always flipped // and doing appropriate flipping. CGContextTranslateCTM(context->platformContext(), dstRect.x() - srcRect.x() * hScale, dstRect.y() - srcRect.y() * vScale); CGContextScaleCTM(context->platformContext(), hScale, vScale); CGContextScaleCTM(context->platformContext(), 1, -1); CGContextTranslateCTM(context->platformContext(), 0, -srcRect.height()); CGContextClipToRect(context->platformContext(), CGRectIntegral(srcRect)); // Rotate translate image into position according to doc properties. adjustCTM(context); CGContextTranslateCTM(context->platformContext(), -m_mediaBox.x(), -m_mediaBox.y()); CGContextDrawPDFPage(context->platformContext(), CGPDFDocumentGetPage(m_document, m_currentPage + 1)); } if (imageObserver()) imageObserver()->didDraw(this); }
void PDFDocumentImage::draw(GraphicsContext* context, const FloatRect& dstRect, const FloatRect& srcRect, CompositeOperator op) { if (!m_document || m_currentPage == -1) return; context->save(); context->setCompositeOperation(op); float hScale = dstRect.width() / srcRect.width(); float vScale = dstRect.height() / srcRect.height(); // Scale and translate so the document is rendered in the correct location, // including accounting for the fact that a GraphicsContext is always flipped // and doing appropriate flipping. CGContextTranslateCTM(context->platformContext(), dstRect.x() - srcRect.x() * hScale, dstRect.y() - srcRect.y() * vScale); CGContextScaleCTM(context->platformContext(), hScale, vScale); CGContextScaleCTM(context->platformContext(), 1, -1); CGContextTranslateCTM(context->platformContext(), 0, -srcRect.height()); CGContextClipToRect(context->platformContext(), CGRectIntegral(srcRect)); // Rotate translate image into position according to doc properties. adjustCTM(context); // Media box may have non-zero origin which we ignore. Pass 1 for the page number. CGContextDrawPDFDocument(context->platformContext(), FloatRect(FloatPoint(), m_mediaBox.size()), m_document, m_currentPage + 1); context->restore(); if (imageObserver()) imageObserver()->didDraw(this); }