diff options
Diffstat (limited to 'core/fxge/dib/fx_dib_transform.cpp')
-rw-r--r-- | core/fxge/dib/fx_dib_transform.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/core/fxge/dib/fx_dib_transform.cpp b/core/fxge/dib/fx_dib_transform.cpp index 4a1c3ee050..3d8ddf8783 100644 --- a/core/fxge/dib/fx_dib_transform.cpp +++ b/core/fxge/dib/fx_dib_transform.cpp @@ -100,7 +100,7 @@ void bicubic_get_pos_weight(int pos_pixel[], v_w[3] = SDP_Table[512 - res_y]; } -FXDIB_Format GetTransformedFormat(const CFX_DIBSource* pDrc) { +FXDIB_Format GetTransformedFormat(const CFX_RetainPtr<CFX_DIBSource>& pDrc) { FXDIB_Format format = pDrc->GetFormat(); if (pDrc->IsAlphaMask()) { format = FXDIB_8bppMask; @@ -179,7 +179,7 @@ class CFX_BilinearMatrix : public CPDF_FixedMatrix { } }; -std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::SwapXY( +CFX_RetainPtr<CFX_DIBitmap> CFX_DIBSource::SwapXY( bool bXFlip, bool bYFlip, const FX_RECT* pDestClip) const { @@ -189,7 +189,7 @@ std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::SwapXY( if (dest_clip.IsEmpty()) return nullptr; - auto pTransBitmap = pdfium::MakeUnique<CFX_DIBitmap>(); + auto pTransBitmap = pdfium::MakeRetain<CFX_DIBitmap>(); int result_height = dest_clip.Height(); int result_width = dest_clip.Width(); if (!pTransBitmap->Create(result_width, result_height, GetFormat())) @@ -303,13 +303,14 @@ FX_RECT FXDIB_SwapClipBox(FX_RECT& clip, return rect; } -std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::TransformTo( +CFX_RetainPtr<CFX_DIBitmap> CFX_DIBSource::TransformTo( const CFX_Matrix* pDestMatrix, int& result_left, int& result_top, uint32_t flags, - const FX_RECT* pDestClip) const { - CFX_ImageTransformer transformer(this, pDestMatrix, flags, pDestClip); + const FX_RECT* pDestClip) { + CFX_RetainPtr<CFX_DIBSource> holder(this); + CFX_ImageTransformer transformer(holder, pDestMatrix, flags, pDestClip); transformer.Start(); transformer.Continue(nullptr); result_left = transformer.result().left; @@ -317,11 +318,11 @@ std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::TransformTo( return transformer.DetachBitmap(); } -std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::StretchTo( - int dest_width, - int dest_height, - uint32_t flags, - const FX_RECT* pClip) const { +CFX_RetainPtr<CFX_DIBitmap> CFX_DIBSource::StretchTo(int dest_width, + int dest_height, + uint32_t flags, + const FX_RECT* pClip) { + CFX_RetainPtr<CFX_DIBSource> holder(this); FX_RECT clip_rect(0, 0, FXSYS_abs(dest_width), FXSYS_abs(dest_height)); if (pClip) clip_rect.Intersect(*pClip); @@ -333,7 +334,7 @@ std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::StretchTo( return Clone(&clip_rect); CFX_BitmapStorer storer; - CFX_ImageStretcher stretcher(&storer, this, dest_width, dest_height, + CFX_ImageStretcher stretcher(&storer, holder, dest_width, dest_height, clip_rect, flags); if (stretcher.Start()) stretcher.Continue(nullptr); @@ -341,10 +342,11 @@ std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::StretchTo( return storer.Detach(); } -CFX_ImageTransformer::CFX_ImageTransformer(const CFX_DIBSource* pSrc, - const CFX_Matrix* pMatrix, - int flags, - const FX_RECT* pClip) +CFX_ImageTransformer::CFX_ImageTransformer( + const CFX_RetainPtr<CFX_DIBSource>& pSrc, + const CFX_Matrix* pMatrix, + int flags, + const FX_RECT* pClip) : m_pSrc(pSrc), m_pMatrix(pMatrix), m_pClip(pClip), @@ -444,7 +446,7 @@ bool CFX_ImageTransformer::Continue(IFX_Pause* pPause) { stretch_buf_mask = m_Storer.GetBitmap()->m_pAlphaMask->GetBuffer(); int stretch_pitch = m_Storer.GetBitmap()->GetPitch(); - std::unique_ptr<CFX_DIBitmap> pTransformed(new CFX_DIBitmap); + auto pTransformed = pdfium::MakeRetain<CFX_DIBitmap>(); FXDIB_Format transformF = GetTransformedFormat(m_Stretcher->source()); if (!pTransformed->Create(m_result.Width(), m_result.Height(), transformF)) return false; @@ -958,6 +960,6 @@ bool CFX_ImageTransformer::Continue(IFX_Pause* pPause) { return false; } -std::unique_ptr<CFX_DIBitmap> CFX_ImageTransformer::DetachBitmap() { +CFX_RetainPtr<CFX_DIBitmap> CFX_ImageTransformer::DetachBitmap() { return m_Storer.Detach(); } |