| 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 <windows.h> | 7 #include <windows.h> |
| 8 | 8 |
| 9 #include "core/fxcrt/fx_system.h" | 9 #include "core/fxcrt/fx_system.h" |
| 10 #include "core/fxge/cfx_gemodule.h" | 10 #include "core/fxge/cfx_gemodule.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 pPalette[0] = 0; | 46 pPalette[0] = 0; |
| 47 pPalette[1] = 0xffffff; | 47 pPalette[1] = 0xffffff; |
| 48 } | 48 } |
| 49 } | 49 } |
| 50 result.ReleaseBuffer(len); | 50 result.ReleaseBuffer(len); |
| 51 return result; | 51 return result; |
| 52 } | 52 } |
| 53 | 53 |
| 54 CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, | 54 CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, |
| 55 LPVOID pData, | 55 LPVOID pData, |
| 56 FX_BOOL bAlpha) { | 56 bool bAlpha) { |
| 57 int width = pbmi->bmiHeader.biWidth; | 57 int width = pbmi->bmiHeader.biWidth; |
| 58 int height = pbmi->bmiHeader.biHeight; | 58 int height = pbmi->bmiHeader.biHeight; |
| 59 BOOL bBottomUp = TRUE; | 59 BOOL bBottomUp = true; |
| 60 if (height < 0) { | 60 if (height < 0) { |
| 61 height = -height; | 61 height = -height; |
| 62 bBottomUp = FALSE; | 62 bBottomUp = false; |
| 63 } | 63 } |
| 64 int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4; | 64 int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4; |
| 65 CFX_DIBitmap* pBitmap = new CFX_DIBitmap; | 65 CFX_DIBitmap* pBitmap = new CFX_DIBitmap; |
| 66 FXDIB_Format format = bAlpha | 66 FXDIB_Format format = bAlpha |
| 67 ? (FXDIB_Format)(pbmi->bmiHeader.biBitCount + 0x200) | 67 ? (FXDIB_Format)(pbmi->bmiHeader.biBitCount + 0x200) |
| 68 : (FXDIB_Format)pbmi->bmiHeader.biBitCount; | 68 : (FXDIB_Format)pbmi->bmiHeader.biBitCount; |
| 69 FX_BOOL ret = pBitmap->Create(width, height, format); | 69 bool ret = pBitmap->Create(width, height, format); |
| 70 if (!ret) { | 70 if (!ret) { |
| 71 delete pBitmap; | 71 delete pBitmap; |
| 72 return nullptr; | 72 return nullptr; |
| 73 } | 73 } |
| 74 FXSYS_memcpy(pBitmap->GetBuffer(), pData, pitch * height); | 74 FXSYS_memcpy(pBitmap->GetBuffer(), pData, pitch * height); |
| 75 if (bBottomUp) { | 75 if (bBottomUp) { |
| 76 uint8_t* temp_buf = FX_Alloc(uint8_t, pitch); | 76 uint8_t* temp_buf = FX_Alloc(uint8_t, pitch); |
| 77 int top = 0, bottom = height - 1; | 77 int top = 0, bottom = height - 1; |
| 78 while (top < bottom) { | 78 while (top < bottom) { |
| 79 FXSYS_memcpy(temp_buf, pBitmap->GetBuffer() + top * pitch, pitch); | 79 FXSYS_memcpy(temp_buf, pBitmap->GetBuffer() + top * pitch, pitch); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 92 } | 92 } |
| 93 } else if (pbmi->bmiHeader.biBitCount == 8) { | 93 } else if (pbmi->bmiHeader.biBitCount == 8) { |
| 94 for (int i = 0; i < 256; i++) { | 94 for (int i = 0; i < 256; i++) { |
| 95 pBitmap->SetPaletteEntry(i, ((uint32_t*)pbmi->bmiColors)[i] | 0xff000000); | 95 pBitmap->SetPaletteEntry(i, ((uint32_t*)pbmi->bmiColors)[i] | 0xff000000); |
| 96 } | 96 } |
| 97 } | 97 } |
| 98 return pBitmap; | 98 return pBitmap; |
| 99 } | 99 } |
| 100 | 100 |
| 101 CFX_DIBitmap* CFX_WindowsDIB::LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData) { | 101 CFX_DIBitmap* CFX_WindowsDIB::LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData) { |
| 102 return _FX_WindowsDIB_LoadFromBuf(pbmi, pData, FALSE); | 102 return _FX_WindowsDIB_LoadFromBuf(pbmi, pData, false); |
| 103 } | 103 } |
| 104 | 104 |
| 105 HBITMAP CFX_WindowsDIB::GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC) { | 105 HBITMAP CFX_WindowsDIB::GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC) { |
| 106 CFX_ByteString info = GetBitmapInfo(pBitmap); | 106 CFX_ByteString info = GetBitmapInfo(pBitmap); |
| 107 return CreateDIBitmap(hDC, (BITMAPINFOHEADER*)info.c_str(), CBM_INIT, | 107 return CreateDIBitmap(hDC, (BITMAPINFOHEADER*)info.c_str(), CBM_INIT, |
| 108 pBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(), | 108 pBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(), |
| 109 DIB_RGB_COLORS); | 109 DIB_RGB_COLORS); |
| 110 } | 110 } |
| 111 | 111 |
| 112 void GetBitmapSize(HBITMAP hBitmap, int& w, int& h) { | 112 void GetBitmapSize(HBITMAP hBitmap, int& w, int& h) { |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 DeleteObject(m_hBitmap); | 209 DeleteObject(m_hBitmap); |
| 210 } | 210 } |
| 211 | 211 |
| 212 void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top) { | 212 void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top) { |
| 213 ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY); | 213 ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY); |
| 214 } | 214 } |
| 215 | 215 |
| 216 void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top) { | 216 void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top) { |
| 217 ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY); | 217 ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY); |
| 218 } | 218 } |
| OLD | NEW |