Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: core/fxge/dib/fx_dib_main.cpp

Issue 1973913002: Clean up CFX_ImageTransformer. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: address comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fpdfapi/fpdf_render/fpdf_render_text.cpp ('k') | core/fxge/dib/fx_dib_transform.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "core/fxge/include/fx_dib.h" 7 #include "core/fxge/include/fx_dib.h"
8 8
9 #include <limits.h> 9 #include <limits.h>
10 10
(...skipping 1573 matching lines...) Expand 10 before | Expand all | Expand 10 after
1584 } 1584 }
1585 CFX_ImageRenderer::CFX_ImageRenderer() { 1585 CFX_ImageRenderer::CFX_ImageRenderer() {
1586 m_Status = 0; 1586 m_Status = 0;
1587 m_pTransformer = NULL; 1587 m_pTransformer = NULL;
1588 m_bRgbByteOrder = FALSE; 1588 m_bRgbByteOrder = FALSE;
1589 m_BlendType = FXDIB_BLEND_NORMAL; 1589 m_BlendType = FXDIB_BLEND_NORMAL;
1590 } 1590 }
1591 CFX_ImageRenderer::~CFX_ImageRenderer() { 1591 CFX_ImageRenderer::~CFX_ImageRenderer() {
1592 delete m_pTransformer; 1592 delete m_pTransformer;
1593 } 1593 }
1594
1594 FX_BOOL CFX_ImageRenderer::Start(CFX_DIBitmap* pDevice, 1595 FX_BOOL CFX_ImageRenderer::Start(CFX_DIBitmap* pDevice,
1595 const CFX_ClipRgn* pClipRgn, 1596 const CFX_ClipRgn* pClipRgn,
1596 const CFX_DIBSource* pSource, 1597 const CFX_DIBSource* pSource,
1597 int bitmap_alpha, 1598 int bitmap_alpha,
1598 uint32_t mask_color, 1599 uint32_t mask_color,
1599 const CFX_Matrix* pMatrix, 1600 const CFX_Matrix* pMatrix,
1600 uint32_t dib_flags, 1601 uint32_t dib_flags,
1601 FX_BOOL bRgbByteOrder, 1602 FX_BOOL bRgbByteOrder,
1602 int alpha_flag, 1603 int alpha_flag,
1603 void* pIccTransform, 1604 void* pIccTransform,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1639 m_Stretcher.reset(new CFX_ImageStretcher(&m_Composer, pSource, 1640 m_Stretcher.reset(new CFX_ImageStretcher(&m_Composer, pSource,
1640 dest_height, dest_width, 1641 dest_height, dest_width,
1641 bitmap_clip, dib_flags)); 1642 bitmap_clip, dib_flags));
1642 if (!m_Stretcher->Start()) 1643 if (!m_Stretcher->Start())
1643 return FALSE; 1644 return FALSE;
1644 1645
1645 m_Status = 1; 1646 m_Status = 1;
1646 return TRUE; 1647 return TRUE;
1647 } 1648 }
1648 m_Status = 2; 1649 m_Status = 2;
1649 m_pTransformer = new CFX_ImageTransformer; 1650 m_pTransformer =
1650 m_pTransformer->Start(pSource, &m_Matrix, dib_flags, &m_ClipBox); 1651 new CFX_ImageTransformer(pSource, &m_Matrix, dib_flags, &m_ClipBox);
1652 m_pTransformer->Start();
1651 return TRUE; 1653 return TRUE;
1652 } 1654 }
1653 1655
1654 int dest_width = image_rect.Width(); 1656 int dest_width = image_rect.Width();
1655 if (m_Matrix.a < 0) 1657 if (m_Matrix.a < 0)
1656 dest_width = -dest_width; 1658 dest_width = -dest_width;
1657 1659
1658 int dest_height = image_rect.Height(); 1660 int dest_height = image_rect.Height();
1659 if (m_Matrix.d > 0) 1661 if (m_Matrix.d > 0)
1660 dest_height = -dest_height; 1662 dest_height = -dest_height;
(...skipping 10 matching lines...) Expand all
1671 m_Stretcher.reset(new CFX_ImageStretcher( 1673 m_Stretcher.reset(new CFX_ImageStretcher(
1672 &m_Composer, pSource, dest_width, dest_height, bitmap_clip, dib_flags)); 1674 &m_Composer, pSource, dest_width, dest_height, bitmap_clip, dib_flags));
1673 return m_Stretcher->Start(); 1675 return m_Stretcher->Start();
1674 } 1676 }
1675 1677
1676 FX_BOOL CFX_ImageRenderer::Continue(IFX_Pause* pPause) { 1678 FX_BOOL CFX_ImageRenderer::Continue(IFX_Pause* pPause) {
1677 if (m_Status == 1) 1679 if (m_Status == 1)
1678 return m_Stretcher->Continue(pPause); 1680 return m_Stretcher->Continue(pPause);
1679 1681
1680 if (m_Status == 2) { 1682 if (m_Status == 2) {
1681 if (m_pTransformer->Continue(pPause)) { 1683 if (m_pTransformer->Continue(pPause))
1682 return TRUE; 1684 return TRUE;
1683 } 1685
1684 CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach(); 1686 std::unique_ptr<CFX_DIBitmap> pBitmap(m_pTransformer->DetachBitmap());
1685 if (!pBitmap) { 1687 if (!pBitmap || !pBitmap->GetBuffer())
1686 return FALSE; 1688 return FALSE;
1687 } 1689
1688 if (!pBitmap->GetBuffer()) {
1689 delete pBitmap;
1690 return FALSE;
1691 }
1692 if (pBitmap->IsAlphaMask()) { 1690 if (pBitmap->IsAlphaMask()) {
1693 if (m_BitmapAlpha != 255) { 1691 if (m_BitmapAlpha != 255) {
1694 if (m_AlphaFlag >> 8) { 1692 if (m_AlphaFlag >> 8) {
1695 m_AlphaFlag = 1693 m_AlphaFlag =
1696 (((uint8_t)((m_AlphaFlag & 0xff) * m_BitmapAlpha / 255)) | 1694 (((uint8_t)((m_AlphaFlag & 0xff) * m_BitmapAlpha / 255)) |
1697 ((m_AlphaFlag >> 8) << 8)); 1695 ((m_AlphaFlag >> 8) << 8));
1698 } else { 1696 } else {
1699 m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, m_BitmapAlpha); 1697 m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, m_BitmapAlpha);
1700 } 1698 }
1701 } 1699 }
1702 m_pDevice->CompositeMask(m_pTransformer->m_ResultLeft, 1700 m_pDevice->CompositeMask(
1703 m_pTransformer->m_ResultTop, pBitmap->GetWidth(), 1701 m_pTransformer->result().left, m_pTransformer->result().top,
1704 pBitmap->GetHeight(), pBitmap, m_MaskColor, 0, 0, 1702 pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap.get(), m_MaskColor,
1705 m_BlendType, m_pClipRgn, m_bRgbByteOrder, 1703 0, 0, m_BlendType, m_pClipRgn, m_bRgbByteOrder, m_AlphaFlag,
1706 m_AlphaFlag, m_pIccTransform); 1704 m_pIccTransform);
1707 } else { 1705 } else {
1708 if (m_BitmapAlpha != 255) { 1706 if (m_BitmapAlpha != 255)
1709 pBitmap->MultiplyAlpha(m_BitmapAlpha); 1707 pBitmap->MultiplyAlpha(m_BitmapAlpha);
1710 }
1711 m_pDevice->CompositeBitmap( 1708 m_pDevice->CompositeBitmap(
1712 m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop, 1709 m_pTransformer->result().left, m_pTransformer->result().top,
1713 pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, 0, 0, m_BlendType, 1710 pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap.get(), 0, 0,
1714 m_pClipRgn, m_bRgbByteOrder, m_pIccTransform); 1711 m_BlendType, m_pClipRgn, m_bRgbByteOrder, m_pIccTransform);
1715 } 1712 }
1716 delete pBitmap;
1717 return FALSE; 1713 return FALSE;
1718 } 1714 }
1719 return FALSE; 1715 return FALSE;
1720 } 1716 }
1717
1721 CFX_BitmapStorer::CFX_BitmapStorer() { 1718 CFX_BitmapStorer::CFX_BitmapStorer() {
1722 m_pBitmap = NULL;
1723 } 1719 }
1720
1724 CFX_BitmapStorer::~CFX_BitmapStorer() { 1721 CFX_BitmapStorer::~CFX_BitmapStorer() {
1725 delete m_pBitmap;
1726 } 1722 }
1727 CFX_DIBitmap* CFX_BitmapStorer::Detach() { 1723
1728 CFX_DIBitmap* pBitmap = m_pBitmap; 1724 std::unique_ptr<CFX_DIBitmap> CFX_BitmapStorer::Detach() {
1729 m_pBitmap = NULL; 1725 return std::move(m_pBitmap);
1730 return pBitmap;
1731 } 1726 }
1732 void CFX_BitmapStorer::Replace(CFX_DIBitmap* pBitmap) { 1727
1733 delete m_pBitmap; 1728 void CFX_BitmapStorer::Replace(std::unique_ptr<CFX_DIBitmap> pBitmap) {
1734 m_pBitmap = pBitmap; 1729 m_pBitmap = std::move(pBitmap);
1735 } 1730 }
1731
1736 void CFX_BitmapStorer::ComposeScanline(int line, 1732 void CFX_BitmapStorer::ComposeScanline(int line,
1737 const uint8_t* scanline, 1733 const uint8_t* scanline,
1738 const uint8_t* scan_extra_alpha) { 1734 const uint8_t* scan_extra_alpha) {
1739 uint8_t* dest_buf = (uint8_t*)m_pBitmap->GetScanline(line); 1735 uint8_t* dest_buf = const_cast<uint8_t*>(m_pBitmap->GetScanline(line));
1740 uint8_t* dest_alpha_buf = 1736 uint8_t* dest_alpha_buf =
1741 m_pBitmap->m_pAlphaMask 1737 m_pBitmap->m_pAlphaMask
1742 ? (uint8_t*)m_pBitmap->m_pAlphaMask->GetScanline(line) 1738 ? const_cast<uint8_t*>(m_pBitmap->m_pAlphaMask->GetScanline(line))
1743 : NULL; 1739 : nullptr;
1744 if (dest_buf) { 1740 if (dest_buf)
1745 FXSYS_memcpy(dest_buf, scanline, m_pBitmap->GetPitch()); 1741 FXSYS_memcpy(dest_buf, scanline, m_pBitmap->GetPitch());
1746 } 1742
1747 if (dest_alpha_buf) { 1743 if (dest_alpha_buf) {
1748 FXSYS_memcpy(dest_alpha_buf, scan_extra_alpha, 1744 FXSYS_memcpy(dest_alpha_buf, scan_extra_alpha,
1749 m_pBitmap->m_pAlphaMask->GetPitch()); 1745 m_pBitmap->m_pAlphaMask->GetPitch());
1750 } 1746 }
1751 } 1747 }
1752 FX_BOOL CFX_BitmapStorer::SetInfo(int width, 1748 FX_BOOL CFX_BitmapStorer::SetInfo(int width,
1753 int height, 1749 int height,
1754 FXDIB_Format src_format, 1750 FXDIB_Format src_format,
1755 uint32_t* pSrcPalette) { 1751 uint32_t* pSrcPalette) {
1756 m_pBitmap = new CFX_DIBitmap; 1752 m_pBitmap.reset(new CFX_DIBitmap);
1757 if (!m_pBitmap->Create(width, height, src_format)) { 1753 if (!m_pBitmap->Create(width, height, src_format)) {
1758 delete m_pBitmap; 1754 m_pBitmap.reset();
1759 m_pBitmap = NULL;
1760 return FALSE; 1755 return FALSE;
1761 } 1756 }
1762 if (pSrcPalette) { 1757 if (pSrcPalette)
1763 m_pBitmap->CopyPalette(pSrcPalette); 1758 m_pBitmap->CopyPalette(pSrcPalette);
1764 }
1765 return TRUE; 1759 return TRUE;
1766 } 1760 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_render/fpdf_render_text.cpp ('k') | core/fxge/dib/fx_dib_transform.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698