summaryrefslogtreecommitdiff
path: root/core/fxge/dib/fx_dib_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxge/dib/fx_dib_main.cpp')
-rw-r--r--core/fxge/dib/fx_dib_main.cpp76
1 files changed, 35 insertions, 41 deletions
diff --git a/core/fxge/dib/fx_dib_main.cpp b/core/fxge/dib/fx_dib_main.cpp
index bf8dd4ecd5..ad6ee0c4e7 100644
--- a/core/fxge/dib/fx_dib_main.cpp
+++ b/core/fxge/dib/fx_dib_main.cpp
@@ -1591,6 +1591,7 @@ CFX_ImageRenderer::CFX_ImageRenderer() {
CFX_ImageRenderer::~CFX_ImageRenderer() {
delete m_pTransformer;
}
+
FX_BOOL CFX_ImageRenderer::Start(CFX_DIBitmap* pDevice,
const CFX_ClipRgn* pClipRgn,
const CFX_DIBSource* pSource,
@@ -1646,8 +1647,9 @@ FX_BOOL CFX_ImageRenderer::Start(CFX_DIBitmap* pDevice,
return TRUE;
}
m_Status = 2;
- m_pTransformer = new CFX_ImageTransformer;
- m_pTransformer->Start(pSource, &m_Matrix, dib_flags, &m_ClipBox);
+ m_pTransformer =
+ new CFX_ImageTransformer(pSource, &m_Matrix, dib_flags, &m_ClipBox);
+ m_pTransformer->Start();
return TRUE;
}
@@ -1678,17 +1680,13 @@ FX_BOOL CFX_ImageRenderer::Continue(IFX_Pause* pPause) {
return m_Stretcher->Continue(pPause);
if (m_Status == 2) {
- if (m_pTransformer->Continue(pPause)) {
+ if (m_pTransformer->Continue(pPause))
return TRUE;
- }
- CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach();
- if (!pBitmap) {
- return FALSE;
- }
- if (!pBitmap->GetBuffer()) {
- delete pBitmap;
+
+ std::unique_ptr<CFX_DIBitmap> pBitmap(m_pTransformer->DetachBitmap());
+ if (!pBitmap || !pBitmap->GetBuffer())
return FALSE;
- }
+
if (pBitmap->IsAlphaMask()) {
if (m_BitmapAlpha != 255) {
if (m_AlphaFlag >> 8) {
@@ -1699,51 +1697,49 @@ FX_BOOL CFX_ImageRenderer::Continue(IFX_Pause* pPause) {
m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, m_BitmapAlpha);
}
}
- m_pDevice->CompositeMask(m_pTransformer->m_ResultLeft,
- m_pTransformer->m_ResultTop, pBitmap->GetWidth(),
- pBitmap->GetHeight(), pBitmap, m_MaskColor, 0, 0,
- m_BlendType, m_pClipRgn, m_bRgbByteOrder,
- m_AlphaFlag, m_pIccTransform);
+ m_pDevice->CompositeMask(
+ m_pTransformer->result().left, m_pTransformer->result().top,
+ pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap.get(), m_MaskColor,
+ 0, 0, m_BlendType, m_pClipRgn, m_bRgbByteOrder, m_AlphaFlag,
+ m_pIccTransform);
} else {
- if (m_BitmapAlpha != 255) {
+ if (m_BitmapAlpha != 255)
pBitmap->MultiplyAlpha(m_BitmapAlpha);
- }
m_pDevice->CompositeBitmap(
- m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop,
- pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, 0, 0, m_BlendType,
- m_pClipRgn, m_bRgbByteOrder, m_pIccTransform);
+ m_pTransformer->result().left, m_pTransformer->result().top,
+ pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap.get(), 0, 0,
+ m_BlendType, m_pClipRgn, m_bRgbByteOrder, m_pIccTransform);
}
- delete pBitmap;
return FALSE;
}
return FALSE;
}
+
CFX_BitmapStorer::CFX_BitmapStorer() {
- m_pBitmap = NULL;
}
+
CFX_BitmapStorer::~CFX_BitmapStorer() {
- delete m_pBitmap;
}
-CFX_DIBitmap* CFX_BitmapStorer::Detach() {
- CFX_DIBitmap* pBitmap = m_pBitmap;
- m_pBitmap = NULL;
- return pBitmap;
+
+std::unique_ptr<CFX_DIBitmap> CFX_BitmapStorer::Detach() {
+ return std::move(m_pBitmap);
}
-void CFX_BitmapStorer::Replace(CFX_DIBitmap* pBitmap) {
- delete m_pBitmap;
- m_pBitmap = pBitmap;
+
+void CFX_BitmapStorer::Replace(std::unique_ptr<CFX_DIBitmap> pBitmap) {
+ m_pBitmap = std::move(pBitmap);
}
+
void CFX_BitmapStorer::ComposeScanline(int line,
const uint8_t* scanline,
const uint8_t* scan_extra_alpha) {
- uint8_t* dest_buf = (uint8_t*)m_pBitmap->GetScanline(line);
+ uint8_t* dest_buf = const_cast<uint8_t*>(m_pBitmap->GetScanline(line));
uint8_t* dest_alpha_buf =
m_pBitmap->m_pAlphaMask
- ? (uint8_t*)m_pBitmap->m_pAlphaMask->GetScanline(line)
- : NULL;
- if (dest_buf) {
+ ? const_cast<uint8_t*>(m_pBitmap->m_pAlphaMask->GetScanline(line))
+ : nullptr;
+ if (dest_buf)
FXSYS_memcpy(dest_buf, scanline, m_pBitmap->GetPitch());
- }
+
if (dest_alpha_buf) {
FXSYS_memcpy(dest_alpha_buf, scan_extra_alpha,
m_pBitmap->m_pAlphaMask->GetPitch());
@@ -1753,14 +1749,12 @@ FX_BOOL CFX_BitmapStorer::SetInfo(int width,
int height,
FXDIB_Format src_format,
uint32_t* pSrcPalette) {
- m_pBitmap = new CFX_DIBitmap;
+ m_pBitmap.reset(new CFX_DIBitmap);
if (!m_pBitmap->Create(width, height, src_format)) {
- delete m_pBitmap;
- m_pBitmap = NULL;
+ m_pBitmap.reset();
return FALSE;
}
- if (pSrcPalette) {
+ if (pSrcPalette)
m_pBitmap->CopyPalette(pSrcPalette);
- }
return TRUE;
}