Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: core/fxge/win32/fx_win32_device.cpp

Issue 2572293002: More unique_ptr returns from DIB methods. (Closed)
Patch Set: win build Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fxge/fx_dib.h ('k') | core/fxge/win32/fx_win32_print.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <crtdbg.h> 7 #include <crtdbg.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 RestoreDC(m_hDC, -1); 788 RestoreDC(m_hDC, -1);
789 if (bKeepSaved) 789 if (bKeepSaved)
790 SaveDC(m_hDC); 790 SaveDC(m_hDC);
791 } 791 }
792 792
793 bool CGdiDeviceDriver::GDI_SetDIBits(CFX_DIBitmap* pBitmap1, 793 bool CGdiDeviceDriver::GDI_SetDIBits(CFX_DIBitmap* pBitmap1,
794 const FX_RECT* pSrcRect, 794 const FX_RECT* pSrcRect,
795 int left, 795 int left,
796 int top) { 796 int top) {
797 if (m_DeviceClass == FXDC_PRINTER) { 797 if (m_DeviceClass == FXDC_PRINTER) {
798 std::unique_ptr<CFX_DIBitmap> pBitmap(pBitmap1->FlipImage(false, true)); 798 std::unique_ptr<CFX_DIBitmap> pBitmap = pBitmap1->FlipImage(false, true);
799 if (!pBitmap) 799 if (!pBitmap)
800 return false; 800 return false;
801 801
802 if (pBitmap->IsCmykImage() && !pBitmap->ConvertFormat(FXDIB_Rgb)) 802 if (pBitmap->IsCmykImage() && !pBitmap->ConvertFormat(FXDIB_Rgb))
803 return false; 803 return false;
804 804
805 int width = pSrcRect->Width(), height = pSrcRect->Height(); 805 int width = pSrcRect->Width(), height = pSrcRect->Height();
806 LPBYTE pBuffer = pBitmap->GetBuffer(); 806 LPBYTE pBuffer = pBitmap->GetBuffer();
807 CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap.get()); 807 CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap.get());
808 ((BITMAPINFOHEADER*)info.c_str())->biHeight *= -1; 808 ((BITMAPINFOHEADER*)info.c_str())->biHeight *= -1;
809 FX_RECT dst_rect(0, 0, width, height); 809 FX_RECT dst_rect(0, 0, width, height);
810 dst_rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight()); 810 dst_rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
811 int dst_width = dst_rect.Width(); 811 int dst_width = dst_rect.Width();
812 int dst_height = dst_rect.Height(); 812 int dst_height = dst_rect.Height();
813 ::StretchDIBits(m_hDC, left, top, dst_width, dst_height, 0, 0, dst_width, 813 ::StretchDIBits(m_hDC, left, top, dst_width, dst_height, 0, 0, dst_width,
814 dst_height, pBuffer, (BITMAPINFO*)info.c_str(), 814 dst_height, pBuffer, (BITMAPINFO*)info.c_str(),
815 DIB_RGB_COLORS, SRCCOPY); 815 DIB_RGB_COLORS, SRCCOPY);
816 } else { 816 } else {
817 CFX_DIBitmap* pBitmap = pBitmap1; 817 CFX_MaybeOwned<CFX_DIBitmap> pBitmap(pBitmap1);
818 if (pBitmap->IsCmykImage()) { 818 if (pBitmap->IsCmykImage()) {
819 pBitmap = pBitmap->CloneConvert(FXDIB_Rgb).release(); 819 pBitmap = pBitmap->CloneConvert(FXDIB_Rgb).release();
820 if (!pBitmap) 820 if (!pBitmap)
821 return false; 821 return false;
822 } 822 }
823 int width = pSrcRect->Width(), height = pSrcRect->Height(); 823 int width = pSrcRect->Width(), height = pSrcRect->Height();
824 LPBYTE pBuffer = pBitmap->GetBuffer(); 824 LPBYTE pBuffer = pBitmap->GetBuffer();
825 CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap); 825 CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap.Get());
826 ::SetDIBitsToDevice(m_hDC, left, top, width, height, pSrcRect->left, 826 ::SetDIBitsToDevice(m_hDC, left, top, width, height, pSrcRect->left,
827 pBitmap->GetHeight() - pSrcRect->bottom, 0, 827 pBitmap->GetHeight() - pSrcRect->bottom, 0,
828 pBitmap->GetHeight(), pBuffer, 828 pBitmap->GetHeight(), pBuffer,
829 (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS); 829 (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
830 if (pBitmap != pBitmap1) {
831 delete pBitmap;
832 }
833 } 830 }
834 return true; 831 return true;
835 } 832 }
836 833
837 bool CGdiDeviceDriver::GDI_StretchDIBits(CFX_DIBitmap* pBitmap1, 834 bool CGdiDeviceDriver::GDI_StretchDIBits(CFX_DIBitmap* pBitmap1,
838 int dest_left, 835 int dest_left,
839 int dest_top, 836 int dest_top,
840 int dest_width, 837 int dest_width,
841 int dest_height, 838 int dest_height,
842 uint32_t flags) { 839 uint32_t flags) {
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 // static 1383 // static
1387 IFX_RenderDeviceDriver* CFX_WindowsDevice::CreateDriver(HDC hDC) { 1384 IFX_RenderDeviceDriver* CFX_WindowsDevice::CreateDriver(HDC hDC) {
1388 int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY); 1385 int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY);
1389 int obj_type = ::GetObjectType(hDC); 1386 int obj_type = ::GetObjectType(hDC);
1390 bool use_printer = device_type == DT_RASPRINTER || 1387 bool use_printer = device_type == DT_RASPRINTER ||
1391 device_type == DT_PLOTTER || obj_type == OBJ_ENHMETADC; 1388 device_type == DT_PLOTTER || obj_type == OBJ_ENHMETADC;
1392 if (use_printer) 1389 if (use_printer)
1393 return new CGdiPrinterDriver(hDC); 1390 return new CGdiPrinterDriver(hDC);
1394 return new CGdiDisplayDriver(hDC); 1391 return new CGdiDisplayDriver(hDC);
1395 } 1392 }
OLDNEW
« no previous file with comments | « core/fxge/fx_dib.h ('k') | core/fxge/win32/fx_win32_print.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698