Index: core/fxge/dib/fx_dib_convert.cpp |
diff --git a/core/fxge/dib/fx_dib_convert.cpp b/core/fxge/dib/fx_dib_convert.cpp |
index b1362462c3c72bc750134bedcd3d2f4b21b8bcd3..aad3f343e209a538f78a58504681536748f6f8b3 100644 |
--- a/core/fxge/dib/fx_dib_convert.cpp |
+++ b/core/fxge/dib/fx_dib_convert.cpp |
@@ -8,6 +8,7 @@ |
#include <utility> |
#include "core/fxcodec/fx_codec.h" |
+#include "core/fxcrt/cfx_maybe_owned.h" |
#include "core/fxge/fx_dib.h" |
#include "third_party/base/ptr_util.h" |
@@ -791,26 +792,26 @@ std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::CloneConvert( |
if (!pClone->Create(m_Width, m_Height, dest_format)) |
return nullptr; |
- CFX_DIBitmap* pSrcAlpha = nullptr; |
+ CFX_MaybeOwned<CFX_DIBitmap> pSrcAlpha; |
if (HasAlpha()) { |
- pSrcAlpha = (GetFormat() == FXDIB_Argb) ? GetAlphaMask() : m_pAlphaMask; |
+ if (GetFormat() == FXDIB_Argb) |
+ pSrcAlpha = CloneAlphaMask(); |
+ else |
+ pSrcAlpha = m_pAlphaMask; |
+ |
if (!pSrcAlpha) |
return nullptr; |
} |
- |
bool ret = true; |
if (dest_format & 0x0200) { |
if (dest_format == FXDIB_Argb) { |
- ret = pSrcAlpha ? pClone->LoadChannel(FXDIB_Alpha, pSrcAlpha, FXDIB_Alpha) |
- : pClone->LoadChannel(FXDIB_Alpha, 0xff); |
+ ret = pSrcAlpha |
+ ? pClone->LoadChannel(FXDIB_Alpha, pSrcAlpha.Get(), FXDIB_Alpha) |
+ : pClone->LoadChannel(FXDIB_Alpha, 0xff); |
} else { |
- ret = pClone->CopyAlphaMask(pSrcAlpha); |
+ ret = pClone->SetAlphaMask(pSrcAlpha.Get()); |
} |
} |
- if (pSrcAlpha && pSrcAlpha != m_pAlphaMask) { |
- delete pSrcAlpha; |
- pSrcAlpha = nullptr; |
- } |
if (!ret) |
return nullptr; |
@@ -820,7 +821,7 @@ std::unique_ptr<CFX_DIBitmap> CFX_DIBSource::CloneConvert( |
return nullptr; |
} |
if (pal_8bpp) |
- pClone->CopyPalette(pal_8bpp.get()); |
+ pClone->SetPalette(pal_8bpp.get()); |
return pClone; |
} |
@@ -867,7 +868,7 @@ bool CFX_DIBitmap::ConvertFormat(FXDIB_Format dest_format) { |
} |
} else if (dest_format & 0x0200) { |
if (src_format == FXDIB_Argb) { |
- pAlphaMask = GetAlphaMask(); |
+ pAlphaMask = CloneAlphaMask().release(); |
if (!pAlphaMask) { |
FX_Free(dest_buf); |
return false; |