| OLD | NEW |
| 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 "../../../include/fxge/fx_dib.h" | 7 #include "../../../include/fxge/fx_dib.h" |
| 8 #include "../../../include/fxge/fx_ge.h" | 8 #include "../../../include/fxge/fx_ge.h" |
| 9 #include "../../../include/fxcodec/fx_codec.h" | 9 #include "../../../include/fxcodec/fx_codec.h" |
| 10 #include "dib_int.h" | 10 #include "dib_int.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 } | 41 } |
| 42 CFX_DIBSource::CFX_DIBSource() { | 42 CFX_DIBSource::CFX_DIBSource() { |
| 43 m_bpp = 0; | 43 m_bpp = 0; |
| 44 m_AlphaFlag = 0; | 44 m_AlphaFlag = 0; |
| 45 m_Width = m_Height = 0; | 45 m_Width = m_Height = 0; |
| 46 m_Pitch = 0; | 46 m_Pitch = 0; |
| 47 m_pPalette = NULL; | 47 m_pPalette = NULL; |
| 48 m_pAlphaMask = NULL; | 48 m_pAlphaMask = NULL; |
| 49 } | 49 } |
| 50 CFX_DIBSource::~CFX_DIBSource() { | 50 CFX_DIBSource::~CFX_DIBSource() { |
| 51 if (m_pPalette) { | 51 FX_Free(m_pPalette); |
| 52 FX_Free(m_pPalette); | |
| 53 } | |
| 54 delete m_pAlphaMask; | 52 delete m_pAlphaMask; |
| 55 } | 53 } |
| 56 CFX_DIBitmap::CFX_DIBitmap() { | 54 CFX_DIBitmap::CFX_DIBitmap() { |
| 57 m_bExtBuf = FALSE; | 55 m_bExtBuf = FALSE; |
| 58 m_pBuffer = NULL; | 56 m_pBuffer = NULL; |
| 59 m_pPalette = NULL; | 57 m_pPalette = NULL; |
| 60 } | 58 } |
| 61 #define _MAX_OOM_LIMIT_ 12000000 | 59 #define _MAX_OOM_LIMIT_ 12000000 |
| 62 FX_BOOL CFX_DIBitmap::Create(int width, | 60 FX_BOOL CFX_DIBitmap::Create(int width, |
| 63 int height, | 61 int height, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 m_pBuffer = FX_Alloc(uint8_t, size); | 93 m_pBuffer = FX_Alloc(uint8_t, size); |
| 96 } | 94 } |
| 97 } | 95 } |
| 98 m_Width = width; | 96 m_Width = width; |
| 99 m_Height = height; | 97 m_Height = height; |
| 100 m_Pitch = pitch; | 98 m_Pitch = pitch; |
| 101 if (HasAlpha() && format != FXDIB_Argb) { | 99 if (HasAlpha() && format != FXDIB_Argb) { |
| 102 FX_BOOL ret = TRUE; | 100 FX_BOOL ret = TRUE; |
| 103 ret = BuildAlphaMask(); | 101 ret = BuildAlphaMask(); |
| 104 if (!ret) { | 102 if (!ret) { |
| 105 if (!m_bExtBuf && m_pBuffer) { | 103 if (!m_bExtBuf) { |
| 106 FX_Free(m_pBuffer); | 104 FX_Free(m_pBuffer); |
| 107 m_pBuffer = NULL; | 105 m_pBuffer = NULL; |
| 108 m_Width = m_Height = m_Pitch = 0; | 106 m_Width = m_Height = m_Pitch = 0; |
| 109 return FALSE; | 107 return FALSE; |
| 110 } | 108 } |
| 111 } | 109 } |
| 112 } | 110 } |
| 113 return TRUE; | 111 return TRUE; |
| 114 } | 112 } |
| 115 FX_BOOL CFX_DIBitmap::Copy(const CFX_DIBSource* pSrc) { | 113 FX_BOOL CFX_DIBitmap::Copy(const CFX_DIBSource* pSrc) { |
| 116 if (m_pBuffer) { | 114 if (m_pBuffer) { |
| 117 return FALSE; | 115 return FALSE; |
| 118 } | 116 } |
| 119 if (!Create(pSrc->GetWidth(), pSrc->GetHeight(), pSrc->GetFormat())) { | 117 if (!Create(pSrc->GetWidth(), pSrc->GetHeight(), pSrc->GetFormat())) { |
| 120 return FALSE; | 118 return FALSE; |
| 121 } | 119 } |
| 122 CopyPalette(pSrc->GetPalette()); | 120 CopyPalette(pSrc->GetPalette()); |
| 123 CopyAlphaMask(pSrc->m_pAlphaMask); | 121 CopyAlphaMask(pSrc->m_pAlphaMask); |
| 124 for (int row = 0; row < pSrc->GetHeight(); row++) { | 122 for (int row = 0; row < pSrc->GetHeight(); row++) { |
| 125 FXSYS_memcpy(m_pBuffer + row * m_Pitch, pSrc->GetScanline(row), m_Pitch); | 123 FXSYS_memcpy(m_pBuffer + row * m_Pitch, pSrc->GetScanline(row), m_Pitch); |
| 126 } | 124 } |
| 127 return TRUE; | 125 return TRUE; |
| 128 } | 126 } |
| 129 CFX_DIBitmap::~CFX_DIBitmap() { | 127 CFX_DIBitmap::~CFX_DIBitmap() { |
| 130 if (m_pBuffer && !m_bExtBuf) { | 128 if (!m_bExtBuf) { |
| 131 FX_Free(m_pBuffer); | 129 FX_Free(m_pBuffer); |
| 132 } | 130 } |
| 133 m_pBuffer = NULL; | 131 m_pBuffer = NULL; |
| 134 } | 132 } |
| 135 void CFX_DIBitmap::TakeOver(CFX_DIBitmap* pSrcBitmap) { | 133 void CFX_DIBitmap::TakeOver(CFX_DIBitmap* pSrcBitmap) { |
| 136 if (m_pBuffer && !m_bExtBuf) { | 134 if (!m_bExtBuf) { |
| 137 FX_Free(m_pBuffer); | 135 FX_Free(m_pBuffer); |
| 138 } | 136 } |
| 139 if (m_pPalette) { | 137 FX_Free(m_pPalette); |
| 140 FX_Free(m_pPalette); | |
| 141 } | |
| 142 delete m_pAlphaMask; | 138 delete m_pAlphaMask; |
| 143 m_pBuffer = pSrcBitmap->m_pBuffer; | 139 m_pBuffer = pSrcBitmap->m_pBuffer; |
| 144 m_pPalette = pSrcBitmap->m_pPalette; | 140 m_pPalette = pSrcBitmap->m_pPalette; |
| 145 m_pAlphaMask = pSrcBitmap->m_pAlphaMask; | 141 m_pAlphaMask = pSrcBitmap->m_pAlphaMask; |
| 146 pSrcBitmap->m_pBuffer = NULL; | 142 pSrcBitmap->m_pBuffer = NULL; |
| 147 pSrcBitmap->m_pPalette = NULL; | 143 pSrcBitmap->m_pPalette = NULL; |
| 148 pSrcBitmap->m_pAlphaMask = NULL; | 144 pSrcBitmap->m_pAlphaMask = NULL; |
| 149 m_bpp = pSrcBitmap->m_bpp; | 145 m_bpp = pSrcBitmap->m_bpp; |
| 150 m_bExtBuf = pSrcBitmap->m_bExtBuf; | 146 m_bExtBuf = pSrcBitmap->m_bExtBuf; |
| 151 m_AlphaFlag = pSrcBitmap->m_AlphaFlag; | 147 m_AlphaFlag = pSrcBitmap->m_AlphaFlag; |
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 dest_color_pos += comps; | 531 dest_color_pos += comps; |
| 536 *dest_alpha_pos++ = (alpha * (*src_scan++) / 255); | 532 *dest_alpha_pos++ = (alpha * (*src_scan++) / 255); |
| 537 } | 533 } |
| 538 } | 534 } |
| 539 } | 535 } |
| 540 } | 536 } |
| 541 return TRUE; | 537 return TRUE; |
| 542 } | 538 } |
| 543 void CFX_DIBSource::CopyPalette(const FX_DWORD* pSrc, FX_DWORD size) { | 539 void CFX_DIBSource::CopyPalette(const FX_DWORD* pSrc, FX_DWORD size) { |
| 544 if (pSrc == NULL || GetBPP() > 8) { | 540 if (pSrc == NULL || GetBPP() > 8) { |
| 545 if (m_pPalette) { | 541 FX_Free(m_pPalette); |
| 546 FX_Free(m_pPalette); | |
| 547 } | |
| 548 m_pPalette = NULL; | 542 m_pPalette = NULL; |
| 549 } else { | 543 } else { |
| 550 FX_DWORD pal_size = 1 << GetBPP(); | 544 FX_DWORD pal_size = 1 << GetBPP(); |
| 551 if (m_pPalette == NULL) { | 545 if (m_pPalette == NULL) { |
| 552 m_pPalette = FX_Alloc(FX_DWORD, pal_size); | 546 m_pPalette = FX_Alloc(FX_DWORD, pal_size); |
| 553 } | 547 } |
| 554 if (pal_size > size) { | 548 if (pal_size > size) { |
| 555 pal_size = size; | 549 pal_size = size; |
| 556 } | 550 } |
| 557 FXSYS_memcpy(m_pPalette, pSrc, pal_size * sizeof(FX_DWORD)); | 551 FXSYS_memcpy(m_pPalette, pSrc, pal_size * sizeof(FX_DWORD)); |
| (...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1512 delete m_pBitmap; | 1506 delete m_pBitmap; |
| 1513 } | 1507 } |
| 1514 CFX_FilteredDIB::CFX_FilteredDIB() { | 1508 CFX_FilteredDIB::CFX_FilteredDIB() { |
| 1515 m_pScanline = NULL; | 1509 m_pScanline = NULL; |
| 1516 m_pSrc = NULL; | 1510 m_pSrc = NULL; |
| 1517 } | 1511 } |
| 1518 CFX_FilteredDIB::~CFX_FilteredDIB() { | 1512 CFX_FilteredDIB::~CFX_FilteredDIB() { |
| 1519 if (m_bAutoDropSrc) { | 1513 if (m_bAutoDropSrc) { |
| 1520 delete m_pSrc; | 1514 delete m_pSrc; |
| 1521 } | 1515 } |
| 1522 if (m_pScanline) { | 1516 FX_Free(m_pScanline); |
| 1523 FX_Free(m_pScanline); | |
| 1524 } | |
| 1525 } | 1517 } |
| 1526 void CFX_FilteredDIB::LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc) { | 1518 void CFX_FilteredDIB::LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc) { |
| 1527 m_pSrc = pSrc; | 1519 m_pSrc = pSrc; |
| 1528 m_bAutoDropSrc = bAutoDropSrc; | 1520 m_bAutoDropSrc = bAutoDropSrc; |
| 1529 m_Width = pSrc->GetWidth(); | 1521 m_Width = pSrc->GetWidth(); |
| 1530 m_Height = pSrc->GetHeight(); | 1522 m_Height = pSrc->GetHeight(); |
| 1531 FXDIB_Format format = GetDestFormat(); | 1523 FXDIB_Format format = GetDestFormat(); |
| 1532 m_bpp = (uint8_t)format; | 1524 m_bpp = (uint8_t)format; |
| 1533 m_AlphaFlag = (uint8_t)(format >> 8); | 1525 m_AlphaFlag = (uint8_t)(format >> 8); |
| 1534 m_Pitch = (m_Width * (format & 0xff) + 31) / 32 * 4; | 1526 m_Pitch = (m_Width * (format & 0xff) + 31) / 32 * 4; |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1726 if (!m_pBitmap->Create(width, height, src_format)) { | 1718 if (!m_pBitmap->Create(width, height, src_format)) { |
| 1727 delete m_pBitmap; | 1719 delete m_pBitmap; |
| 1728 m_pBitmap = NULL; | 1720 m_pBitmap = NULL; |
| 1729 return FALSE; | 1721 return FALSE; |
| 1730 } | 1722 } |
| 1731 if (pSrcPalette) { | 1723 if (pSrcPalette) { |
| 1732 m_pBitmap->CopyPalette(pSrcPalette); | 1724 m_pBitmap->CopyPalette(pSrcPalette); |
| 1733 } | 1725 } |
| 1734 return TRUE; | 1726 return TRUE; |
| 1735 } | 1727 } |
| OLD | NEW |