Index: fpdfsdk/fpdfview.cpp |
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp |
index 7797165bc266cd129e4584d39112ed4af8aaf78d..24cd8ef5c4da61a1fb9448a7f8650aec2d5262c2 100644 |
--- a/fpdfsdk/fpdfview.cpp |
+++ b/fpdfsdk/fpdfview.cpp |
@@ -74,6 +74,10 @@ CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) { |
#endif // PDF_ENABLE_XFA |
} |
+CFX_DIBitmap* CFXBitmapFromFPDFBitmap(FPDF_BITMAP bitmap) { |
+ return static_cast<CFX_DIBitmap*>(bitmap); |
+} |
+ |
#ifdef PDF_ENABLE_XFA |
CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) { |
m_pFS = pFS; |
@@ -544,14 +548,15 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, |
pBitmap = new CFX_DIBitmap; |
pBitmap->Create(size_x, size_y, FXDIB_Argb); |
pBitmap->Clear(0x00ffffff); |
- pContext->m_pDevice = new CFX_FxgeDevice; |
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); |
+ CFX_FxgeDevice* pDevice = new CFX_FxgeDevice; |
+ pContext->m_pDevice = pDevice; |
+ pDevice->Attach(pBitmap, false, nullptr, false); |
} else { |
pContext->m_pDevice = new CFX_WindowsDevice(dc); |
} |
FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, |
- rotate, flags, TRUE, NULL); |
+ rotate, flags, TRUE, nullptr); |
if (bBackgroundAlphaNeeded || bHasImageMask) { |
if (pBitmap) { |
@@ -595,13 +600,10 @@ DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, |
CRenderContext* pContext = new CRenderContext; |
pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>(pContext)); |
- pContext->m_pDevice = new CFX_FxgeDevice; |
- if (flags & FPDF_REVERSE_BYTE_ORDER) { |
- ((CFX_FxgeDevice*)pContext->m_pDevice) |
- ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE); |
- } else { |
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); |
- } |
+ CFX_FxgeDevice* pDevice = new CFX_FxgeDevice; |
+ pContext->m_pDevice = pDevice; |
+ CFX_DIBitmap* pBitmap = CFXBitmapFromFPDFBitmap(bitmap); |
+ pDevice->Attach(pBitmap, !!(flags & FPDF_REVERSE_BYTE_ORDER), nullptr, false); |
FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, |
rotate, flags, TRUE, nullptr); |
@@ -771,32 +773,34 @@ DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap, |
FPDF_DWORD color) { |
if (!bitmap) |
return; |
+ |
CFX_FxgeDevice device; |
- device.Attach((CFX_DIBitmap*)bitmap); |
- if (!((CFX_DIBitmap*)bitmap)->HasAlpha()) |
+ CFX_DIBitmap* pBitmap = CFXBitmapFromFPDFBitmap(bitmap); |
+ device.Attach(pBitmap, false, nullptr, false); |
+ if (!pBitmap->HasAlpha()) |
color |= 0xFF000000; |
FX_RECT rect(left, top, left + width, top + height); |
device.FillRect(&rect, color); |
} |
DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap) { |
- return bitmap ? ((CFX_DIBitmap*)bitmap)->GetBuffer() : nullptr; |
+ return bitmap ? CFXBitmapFromFPDFBitmap(bitmap)->GetBuffer() : nullptr; |
} |
DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap) { |
- return bitmap ? ((CFX_DIBitmap*)bitmap)->GetWidth() : 0; |
+ return bitmap ? CFXBitmapFromFPDFBitmap(bitmap)->GetWidth() : 0; |
} |
DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap) { |
- return bitmap ? ((CFX_DIBitmap*)bitmap)->GetHeight() : 0; |
+ return bitmap ? CFXBitmapFromFPDFBitmap(bitmap)->GetHeight() : 0; |
} |
DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap) { |
- return bitmap ? ((CFX_DIBitmap*)bitmap)->GetPitch() : 0; |
+ return bitmap ? CFXBitmapFromFPDFBitmap(bitmap)->GetPitch() : 0; |
} |
DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap) { |
- delete (CFX_DIBitmap*)bitmap; |
+ delete CFXBitmapFromFPDFBitmap(bitmap); |
} |
void FPDF_RenderPage_Retail(CRenderContext* pContext, |