Chromium Code Reviews| Index: core/fxge/dib/fx_dib_transform.cpp |
| diff --git a/core/fxge/dib/fx_dib_transform.cpp b/core/fxge/dib/fx_dib_transform.cpp |
| index 18adcea5d29a7a796efaae00690c6cf91a4e6bfe..6aaaac2cb762fd8adde6de1174b2f0eb6eac0f2a 100644 |
| --- a/core/fxge/dib/fx_dib_transform.cpp |
| +++ b/core/fxge/dib/fx_dib_transform.cpp |
| @@ -309,33 +309,36 @@ CFX_DIBitmap* CFX_DIBSource::TransformTo(const CFX_Matrix* pDestMatrix, |
| CFX_DIBitmap* pTransformed = transformer.m_Storer.Detach(); |
| return pTransformed; |
| } |
| + |
| CFX_DIBitmap* CFX_DIBSource::StretchTo(int dest_width, |
| int dest_height, |
| uint32_t flags, |
| const FX_RECT* pClip) const { |
| FX_RECT clip_rect(0, 0, FXSYS_abs(dest_width), FXSYS_abs(dest_height)); |
| - if (pClip) { |
| + if (pClip) |
| clip_rect.Intersect(*pClip); |
| - } |
| - if (clip_rect.IsEmpty()) { |
| - return NULL; |
| - } |
| - if (dest_width == m_Width && dest_height == m_Height) { |
| + |
| + if (clip_rect.IsEmpty()) |
| + return nullptr; |
| + |
| + if (dest_width == m_Width && dest_height == m_Height) |
| return Clone(&clip_rect); |
| - } |
| - CFX_ImageStretcher stretcher; |
| + |
| CFX_BitmapStorer storer; |
| - if (stretcher.Start(&storer, this, dest_width, dest_height, clip_rect, |
| - flags)) { |
| - stretcher.Continue(NULL); |
| - } |
| + CFX_ImageStretcher stretcher(&storer, this, dest_width, dest_height, |
| + clip_rect, flags); |
| + if (stretcher.Start()) |
| + stretcher.Continue(nullptr); |
|
Tom Sepez
2016/05/12 00:03:08
Do we ever call this with non-nullptr?
Lei Zhang
2016/05/12 01:17:13
Yes, we pass a pPause variable in sometimes. Wheth
|
| return storer.Detach(); |
| } |
| + |
| CFX_ImageTransformer::CFX_ImageTransformer() { |
| m_Status = 0; |
| m_pMatrix = NULL; |
| } |
| + |
| CFX_ImageTransformer::~CFX_ImageTransformer() {} |
| + |
| FX_BOOL CFX_ImageTransformer::Start(const CFX_DIBSource* pSrc, |
| const CFX_Matrix* pDestMatrix, |
| int flags, |
| @@ -344,12 +347,12 @@ FX_BOOL CFX_ImageTransformer::Start(const CFX_DIBSource* pSrc, |
| CFX_FloatRect unit_rect = pDestMatrix->GetUnitRect(); |
| FX_RECT result_rect = unit_rect.GetClosestRect(); |
| FX_RECT result_clip = result_rect; |
| - if (pDestClip) { |
| + if (pDestClip) |
| result_clip.Intersect(*pDestClip); |
| - } |
| - if (result_clip.IsEmpty()) { |
| + |
| + if (result_clip.IsEmpty()) |
| return FALSE; |
| - } |
| + |
| m_ResultLeft = result_clip.left; |
| m_ResultTop = result_clip.top; |
| m_ResultWidth = result_clip.Width(); |
| @@ -363,8 +366,9 @@ FX_BOOL CFX_ImageTransformer::Start(const CFX_DIBSource* pSrc, |
| result_clip.Offset(-result_rect.left, -result_rect.top); |
| result_clip = FXDIB_SwapClipBox(result_clip, dest_width, dest_height, |
| pDestMatrix->c > 0, pDestMatrix->b < 0); |
| - m_Stretcher.Start(&m_Storer, pSrc, dest_height, dest_width, result_clip, |
| - flags); |
| + m_Stretcher.reset(new CFX_ImageStretcher(&m_Storer, pSrc, dest_height, |
| + dest_width, result_clip, flags)); |
| + m_Stretcher->Start(); |
| m_Status = 1; |
| return TRUE; |
| } |
| @@ -375,8 +379,9 @@ FX_BOOL CFX_ImageTransformer::Start(const CFX_DIBSource* pSrc, |
| int dest_height = pDestMatrix->d > 0 ? (int)-FXSYS_ceil(pDestMatrix->d) |
| : (int)-FXSYS_floor(pDestMatrix->d); |
| result_clip.Offset(-result_rect.left, -result_rect.top); |
| - m_Stretcher.Start(&m_Storer, pSrc, dest_width, dest_height, result_clip, |
| - flags); |
| + m_Stretcher.reset(new CFX_ImageStretcher(&m_Storer, pSrc, dest_width, |
| + dest_height, result_clip, flags)); |
| + m_Stretcher->Start(); |
| m_Status = 2; |
| return TRUE; |
| } |
| @@ -395,53 +400,54 @@ FX_BOOL CFX_ImageTransformer::Start(const CFX_DIBSource* pSrc, |
| clip_rect_f.Transform(&m_dest2stretch); |
| m_StretchClip = clip_rect_f.GetOutterRect(); |
| m_StretchClip.Intersect(0, 0, stretch_width, stretch_height); |
| - m_Stretcher.Start(&m_Storer, pSrc, stretch_width, stretch_height, |
| - m_StretchClip, flags); |
| + m_Stretcher.reset(new CFX_ImageStretcher( |
| + &m_Storer, pSrc, stretch_width, stretch_height, m_StretchClip, flags)); |
| + m_Stretcher->Start(); |
| m_Status = 3; |
| return TRUE; |
| } |
| FX_BOOL CFX_ImageTransformer::Continue(IFX_Pause* pPause) { |
| if (m_Status == 1) { |
| - if (m_Stretcher.Continue(pPause)) { |
| + if (m_Stretcher->Continue(pPause)) |
| return TRUE; |
| - } |
| + |
| if (m_Storer.GetBitmap()) { |
| m_Storer.Replace( |
| m_Storer.GetBitmap()->SwapXY(m_pMatrix->c > 0, m_pMatrix->b < 0)); |
| } |
| return FALSE; |
| } |
| - if (m_Status == 2) { |
| - return m_Stretcher.Continue(pPause); |
| - } |
| - if (m_Status != 3) { |
| + |
| + if (m_Status == 2) |
| + return m_Stretcher->Continue(pPause); |
| + |
| + if (m_Status != 3) |
| return FALSE; |
| - } |
| - if (m_Stretcher.Continue(pPause)) { |
| + |
| + if (m_Stretcher->Continue(pPause)) |
| return TRUE; |
| - } |
| + |
| int stretch_width = m_StretchClip.Width(); |
| int stretch_height = m_StretchClip.Height(); |
| - if (!m_Storer.GetBitmap()) { |
| + if (!m_Storer.GetBitmap()) |
| return FALSE; |
| - } |
| + |
| const uint8_t* stretch_buf = m_Storer.GetBitmap()->GetBuffer(); |
| - const uint8_t* stretch_buf_mask = NULL; |
| - if (m_Storer.GetBitmap()->m_pAlphaMask) { |
| + const uint8_t* stretch_buf_mask = nullptr; |
| + if (m_Storer.GetBitmap()->m_pAlphaMask) |
| stretch_buf_mask = m_Storer.GetBitmap()->m_pAlphaMask->GetBuffer(); |
| - } |
| + |
| int stretch_pitch = m_Storer.GetBitmap()->GetPitch(); |
| - CFX_DIBitmap* pTransformed = new CFX_DIBitmap; |
| - FXDIB_Format transformF = GetTransformedFormat(m_Stretcher.m_pSource); |
| - if (!pTransformed->Create(m_ResultWidth, m_ResultHeight, transformF)) { |
| - delete pTransformed; |
| + std::unique_ptr<CFX_DIBitmap> pTransformed(new CFX_DIBitmap); |
| + FXDIB_Format transformF = GetTransformedFormat(m_Stretcher->source()); |
| + if (!pTransformed->Create(m_ResultWidth, m_ResultHeight, transformF)) |
| return FALSE; |
| - } |
| + |
| pTransformed->Clear(0); |
| - if (pTransformed->m_pAlphaMask) { |
| + if (pTransformed->m_pAlphaMask) |
| pTransformed->m_pAlphaMask->Clear(0); |
| - } |
| + |
| CFX_Matrix result2stretch(1.0f, 0.0f, 0.0f, 1.0f, (FX_FLOAT)(m_ResultLeft), |
| (FX_FLOAT)(m_ResultTop)); |
| result2stretch.Concat(m_dest2stretch); |
| @@ -943,6 +949,6 @@ FX_BOOL CFX_ImageTransformer::Continue(IFX_Pause* pPause) { |
| } |
| } |
| } |
| - m_Storer.Replace(pTransformed); |
| + m_Storer.Replace(pTransformed.release()); |
| return FALSE; |
| } |