| 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 "public/fpdfview.h" | 7 #include "public/fpdfview.h" |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 int rotate, | 329 int rotate, |
| 330 int flags) { | 330 int flags) { |
| 331 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 331 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 332 if (!pPage) | 332 if (!pPage) |
| 333 return; | 333 return; |
| 334 | 334 |
| 335 CRenderContext* pContext = new CRenderContext; | 335 CRenderContext* pContext = new CRenderContext; |
| 336 pPage->SetPrivateData((void*)1, pContext, DropContext); | 336 pPage->SetPrivateData((void*)1, pContext, DropContext); |
| 337 | 337 |
| 338 #ifndef _WIN32_WCE | 338 #ifndef _WIN32_WCE |
| 339 CFX_DIBitmap* pBitmap = NULL; | 339 CFX_DIBitmap* pBitmap = nullptr; |
| 340 FX_BOOL bBackgroundAlphaNeeded = FALSE; | 340 FX_BOOL bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded(); |
| 341 bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded(); | 341 FX_BOOL bHasImageMask = pPage->HasImageMask(); |
| 342 if (bBackgroundAlphaNeeded) { | 342 if (bBackgroundAlphaNeeded || bHasImageMask) { |
| 343 pBitmap = new CFX_DIBitmap; | 343 pBitmap = new CFX_DIBitmap; |
| 344 pBitmap->Create(size_x, size_y, FXDIB_Argb); | 344 pBitmap->Create(size_x, size_y, FXDIB_Argb); |
| 345 pBitmap->Clear(0x00ffffff); | 345 pBitmap->Clear(0x00ffffff); |
| 346 #ifdef _SKIA_SUPPORT_ | 346 #ifdef _SKIA_SUPPORT_ |
| 347 pContext->m_pDevice = new CFX_SkiaDevice; | 347 pContext->m_pDevice = new CFX_SkiaDevice; |
| 348 ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); | 348 ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); |
| 349 #else | 349 #else |
| 350 pContext->m_pDevice = new CFX_FxgeDevice; | 350 pContext->m_pDevice = new CFX_FxgeDevice; |
| 351 ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); | 351 ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); |
| 352 #endif | 352 #endif |
| 353 } else | 353 } else { |
| 354 pContext->m_pDevice = new CFX_WindowsDevice(dc); | 354 pContext->m_pDevice = new CFX_WindowsDevice(dc); |
| 355 } |
| 355 | 356 |
| 356 FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, | 357 FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, |
| 357 rotate, flags, TRUE, NULL); | 358 rotate, flags, TRUE, NULL); |
| 358 | 359 |
| 359 if (bBackgroundAlphaNeeded) { | 360 if (bBackgroundAlphaNeeded || bHasImageMask) { |
| 360 if (pBitmap) { | 361 if (pBitmap) { |
| 361 CFX_WindowsDevice WinDC(dc); | 362 CFX_WindowsDevice WinDC(dc); |
| 362 | 363 |
| 363 if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) { | 364 if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) { |
| 364 CFX_DIBitmap* pDst = new CFX_DIBitmap; | 365 CFX_DIBitmap* pDst = new CFX_DIBitmap; |
| 365 int pitch = pBitmap->GetPitch(); | 366 int pitch = pBitmap->GetPitch(); |
| 366 pDst->Create(size_x, size_y, FXDIB_Rgb32); | 367 pDst->Create(size_x, size_y, FXDIB_Rgb32); |
| 367 FXSYS_memset(pDst->GetBuffer(), -1, pitch * size_y); | 368 FXSYS_memset(pDst->GetBuffer(), -1, pitch * size_y); |
| 368 pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0, | 369 pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0, |
| 369 FXDIB_BLEND_NORMAL, NULL, FALSE, NULL); | 370 FXDIB_BLEND_NORMAL, NULL, FALSE, NULL); |
| 370 WinDC.StretchDIBits(pDst, 0, 0, size_x, size_y); | 371 WinDC.StretchDIBits(pDst, 0, 0, size_x, size_y); |
| 371 delete pDst; | 372 delete pDst; |
| 372 } else | 373 } else { |
| 373 WinDC.SetDIBits(pBitmap, 0, 0); | 374 WinDC.SetDIBits(pBitmap, 0, 0); |
| 375 } |
| 374 } | 376 } |
| 375 } | 377 } |
| 376 #else | 378 #else |
| 377 // get clip region | 379 // get clip region |
| 378 RECT rect, cliprect; | 380 RECT rect, cliprect; |
| 379 rect.left = start_x; | 381 rect.left = start_x; |
| 380 rect.top = start_y; | 382 rect.top = start_y; |
| 381 rect.right = start_x + size_x; | 383 rect.right = start_x + size_x; |
| 382 rect.bottom = start_y + size_y; | 384 rect.bottom = start_y + size_y; |
| 383 GetClipBox(dc, &cliprect); | 385 GetClipBox(dc, &cliprect); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 | 466 |
| 465 BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY); | 467 BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY); |
| 466 SelectObject(hMemDC, hOldBitmap); | 468 SelectObject(hMemDC, hOldBitmap); |
| 467 DeleteDC(hMemDC); | 469 DeleteDC(hMemDC); |
| 468 | 470 |
| 469 #ifdef DEBUG_TRACE | 471 #ifdef DEBUG_TRACE |
| 470 CPDF_ModuleMgr::Get()->ReportError(999, "Finished screen rendering"); | 472 CPDF_ModuleMgr::Get()->ReportError(999, "Finished screen rendering"); |
| 471 #endif | 473 #endif |
| 472 | 474 |
| 473 #endif | 475 #endif |
| 474 if (bBackgroundAlphaNeeded) { | 476 if (bBackgroundAlphaNeeded || bHasImageMask) |
| 475 delete pBitmap; | 477 delete pBitmap; |
| 476 pBitmap = NULL; | 478 |
| 477 } | |
| 478 delete pContext; | 479 delete pContext; |
| 479 pPage->RemovePrivateData((void*)1); | 480 pPage->RemovePrivateData((void*)1); |
| 480 } | 481 } |
| 481 #endif | 482 #endif |
| 482 | 483 |
| 483 DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, | 484 DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, |
| 484 FPDF_PAGE page, | 485 FPDF_PAGE page, |
| 485 int start_x, | 486 int start_x, |
| 486 int start_y, | 487 int start_y, |
| 487 int size_x, | 488 int size_x, |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 904 if (!buffer) { | 905 if (!buffer) { |
| 905 *buflen = len; | 906 *buflen = len; |
| 906 } else if (*buflen >= len) { | 907 } else if (*buflen >= len) { |
| 907 memcpy(buffer, utf16Name.c_str(), len); | 908 memcpy(buffer, utf16Name.c_str(), len); |
| 908 *buflen = len; | 909 *buflen = len; |
| 909 } else { | 910 } else { |
| 910 *buflen = -1; | 911 *buflen = -1; |
| 911 } | 912 } |
| 912 return (FPDF_DEST)pDestObj; | 913 return (FPDF_DEST)pDestObj; |
| 913 } | 914 } |
| OLD | NEW |