Remove most CFX_WindowsDIB code.

It's all unused. Similarly, CGdiplusExt::LoadDIBitmap() is also unused.

Change-Id: I34d34572cf21a9d8e8c244a630bd80dae94ceb45
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75631
Reviewed-by: Hui Yingst <nigi@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/win32/cfx_windowsdib.cpp b/core/fxge/win32/cfx_windowsdib.cpp
index 03e7b82..464c763 100644
--- a/core/fxge/win32/cfx_windowsdib.cpp
+++ b/core/fxge/win32/cfx_windowsdib.cpp
@@ -8,27 +8,7 @@
 
 #include <windows.h>
 
-#include <vector>
-
-#include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_system.h"
-#include "core/fxge/cfx_gemodule.h"
-#include "core/fxge/win32/cwin32_platform.h"
-
-namespace {
-
-void GetBitmapSize(HBITMAP hBitmap, int& w, int& h) {
-  BITMAP bmp;
-  GetObject(hBitmap, sizeof bmp, &bmp);
-  w = bmp.bmWidth;
-  h = bmp.bmHeight;
-}
-
-FXDIB_Format GetBitmapFormat(int bpp) {
-  return bpp == 32 ? FXDIB_Format::kArgb : MakeRGBFormat(bpp);
-}
-
-}  // namespace
 
 // static
 ByteString CFX_WindowsDIB::GetBitmapInfo(
@@ -76,155 +56,3 @@
   result.ReleaseBuffer(len);
   return result;
 }
-
-// static
-RetainPtr<CFX_DIBitmap> CFX_WindowsDIB::LoadFromBuf(BITMAPINFO* pbmi,
-                                                    void* pData) {
-  int width = pbmi->bmiHeader.biWidth;
-  int height = pbmi->bmiHeader.biHeight;
-  BOOL bBottomUp = true;
-  if (height < 0) {
-    height = -height;
-    bBottomUp = false;
-  }
-  int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4;
-  auto pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
-  FXDIB_Format format = GetBitmapFormat(pbmi->bmiHeader.biBitCount);
-  if (!pBitmap->Create(width, height, format))
-    return nullptr;
-
-  memcpy(pBitmap->GetBuffer(), pData, pitch * height);
-  if (bBottomUp) {
-    std::vector<uint8_t, FxAllocAllocator<uint8_t>> temp_buf(pitch);
-    int top = 0;
-    int bottom = height - 1;
-    while (top < bottom) {
-      uint8_t* top_ptr = pBitmap->GetBuffer() + top * pitch;
-      uint8_t* bottom_ptr = pBitmap->GetBuffer() + bottom * pitch;
-      memcpy(temp_buf.data(), top_ptr, pitch);
-      memcpy(top_ptr, bottom_ptr, pitch);
-      memcpy(bottom_ptr, temp_buf.data(), pitch);
-      top++;
-      bottom--;
-    }
-  }
-  if (pbmi->bmiHeader.biBitCount == 1) {
-    for (int i = 0; i < 2; i++)
-      pBitmap->SetPaletteArgb(i, ((uint32_t*)pbmi->bmiColors)[i] | 0xff000000);
-  } else if (pbmi->bmiHeader.biBitCount == 8) {
-    for (int i = 0; i < 256; i++)
-      pBitmap->SetPaletteArgb(i, ((uint32_t*)pbmi->bmiColors)[i] | 0xff000000);
-  }
-  return pBitmap;
-}
-
-// static
-HBITMAP CFX_WindowsDIB::GetDDBitmap(const RetainPtr<CFX_DIBitmap>& pBitmap,
-                                    HDC hDC) {
-  ByteString info = GetBitmapInfo(pBitmap);
-  return CreateDIBitmap(hDC, (BITMAPINFOHEADER*)info.c_str(), CBM_INIT,
-                        pBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(),
-                        DIB_RGB_COLORS);
-}
-
-// static
-RetainPtr<CFX_DIBitmap> CFX_WindowsDIB::LoadFromFile(const wchar_t* filename) {
-  auto* pPlatform =
-      static_cast<CWin32Platform*>(CFX_GEModule::Get()->GetPlatform());
-  if (pPlatform->m_GdiplusExt.IsAvailable()) {
-    WINDIB_Open_Args_ args;
-    args.flags = WINDIB_OPEN_PATHNAME;
-    args.path_name = filename;
-    return pPlatform->m_GdiplusExt.LoadDIBitmap(args);
-  }
-  HBITMAP hBitmap = (HBITMAP)LoadImageW(nullptr, (wchar_t*)filename,
-                                        IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
-  if (!hBitmap) {
-    return nullptr;
-  }
-  HDC hDC = CreateCompatibleDC(nullptr);
-  int width;
-  int height;
-  GetBitmapSize(hBitmap, width, height);
-  auto pDIBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
-  if (!pDIBitmap->Create(width, height, FXDIB_Format::kRgb)) {
-    DeleteDC(hDC);
-    return nullptr;
-  }
-  ByteString info = GetBitmapInfo(pDIBitmap);
-  int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
-                      (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
-  DeleteDC(hDC);
-  if (!ret)
-    return nullptr;
-  return pDIBitmap;
-}
-
-// static
-RetainPtr<CFX_DIBitmap> CFX_WindowsDIB::LoadFromFile(const char* filename) {
-  return LoadFromFile(WideString::FromDefANSI(filename).c_str());
-}
-
-// static
-RetainPtr<CFX_DIBitmap> CFX_WindowsDIB::LoadDIBitmap(WINDIB_Open_Args_ args) {
-  auto* pPlatform =
-      static_cast<CWin32Platform*>(CFX_GEModule::Get()->GetPlatform());
-  if (pPlatform->m_GdiplusExt.IsAvailable()) {
-    return pPlatform->m_GdiplusExt.LoadDIBitmap(args);
-  }
-  if (args.flags == WINDIB_OPEN_MEMORY) {
-    return nullptr;
-  }
-  HBITMAP hBitmap = (HBITMAP)LoadImageW(nullptr, (wchar_t*)args.path_name,
-                                        IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
-  if (!hBitmap) {
-    return nullptr;
-  }
-  HDC hDC = CreateCompatibleDC(nullptr);
-  int width, height;
-  GetBitmapSize(hBitmap, width, height);
-  auto pDIBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
-  if (!pDIBitmap->Create(width, height, FXDIB_Format::kRgb)) {
-    DeleteDC(hDC);
-    return nullptr;
-  }
-  ByteString info = GetBitmapInfo(pDIBitmap);
-  int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
-                      (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
-  DeleteDC(hDC);
-  if (!ret)
-    return nullptr;
-  return pDIBitmap;
-}
-
-CFX_WindowsDIB::CFX_WindowsDIB(HDC hDC, int width, int height) {
-  Create(width, height, FXDIB_Format::kRgb, (uint8_t*)1, 0);
-  BITMAPINFOHEADER bmih;
-  memset(&bmih, 0, sizeof bmih);
-  bmih.biSize = sizeof bmih;
-  bmih.biBitCount = 24;
-  bmih.biHeight = -height;
-  bmih.biPlanes = 1;
-  bmih.biWidth = width;
-  LPVOID pData = nullptr;
-  m_hBitmap = CreateDIBSection(hDC, (BITMAPINFO*)&bmih, DIB_RGB_COLORS, &pData,
-                               nullptr, 0);
-  m_pBuffer.Reset(static_cast<uint8_t*>(pData));
-  m_hMemDC = CreateCompatibleDC(hDC);
-  m_hOldBitmap = (HBITMAP)SelectObject(m_hMemDC, m_hBitmap);
-}
-
-CFX_WindowsDIB::~CFX_WindowsDIB() {
-  SelectObject(m_hMemDC, m_hOldBitmap);
-  DeleteDC(m_hMemDC);
-  DeleteObject(m_hBitmap);
-}
-
-// static
-void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top) {
-  ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY);
-}
-
-void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top) {
-  ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY);
-}
diff --git a/core/fxge/win32/cfx_windowsdib.h b/core/fxge/win32/cfx_windowsdib.h
index 184b197..61e0843 100644
--- a/core/fxge/win32/cfx_windowsdib.h
+++ b/core/fxge/win32/cfx_windowsdib.h
@@ -7,45 +7,16 @@
 #ifndef CORE_FXGE_WIN32_CFX_WINDOWSDIB_H_
 #define CORE_FXGE_WIN32_CFX_WINDOWSDIB_H_
 
-#include <windows.h>
-
 #include "core/fxcrt/bytestring.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
 
-#define WINDIB_OPEN_MEMORY 0x1
-#define WINDIB_OPEN_PATHNAME 0x2
-
-struct WINDIB_Open_Args_ {
-  int flags;
-  const uint8_t* memory_base;
-  size_t memory_size;
-  const wchar_t* path_name;
-};
-
-class CFX_WindowsDIB final : public CFX_DIBitmap {
+class CFX_WindowsDIB {
  public:
-  CONSTRUCT_VIA_MAKE_RETAIN;
-
   static ByteString GetBitmapInfo(const RetainPtr<CFX_DIBitmap>& pBitmap);
-  static HBITMAP GetDDBitmap(const RetainPtr<CFX_DIBitmap>& pBitmap, HDC hDC);
 
-  static RetainPtr<CFX_DIBitmap> LoadFromBuf(BITMAPINFO* pbmi, void* pData);
-  static RetainPtr<CFX_DIBitmap> LoadFromFile(const wchar_t* filename);
-  static RetainPtr<CFX_DIBitmap> LoadFromFile(const char* filename);
-  static RetainPtr<CFX_DIBitmap> LoadDIBitmap(WINDIB_Open_Args_ args);
-
-  HBITMAP GetWindowsBitmap() const { return m_hBitmap; }
-
-  void LoadFromDevice(HDC hDC, int left, int top);
-  void SetToDevice(HDC hDC, int left, int top);
-
- private:
-  CFX_WindowsDIB(HDC hDC, int width, int height);
-  ~CFX_WindowsDIB() override;
-
-  HDC m_hMemDC;
-  HBITMAP m_hBitmap;
-  HBITMAP m_hOldBitmap;
+  CFX_WindowsDIB() = delete;
+  CFX_WindowsDIB(const CFX_WindowsDIB&) = delete;
+  CFX_WindowsDIB& operator=(const CFX_WindowsDIB&) = delete;
 };
 
 #endif  // CORE_FXGE_WIN32_CFX_WINDOWSDIB_H_
diff --git a/core/fxge/win32/cgdi_plus_ext.cpp b/core/fxge/win32/cgdi_plus_ext.cpp
index 4e915a5..344a5d7 100644
--- a/core/fxge/win32/cgdi_plus_ext.cpp
+++ b/core/fxge/win32/cgdi_plus_ext.cpp
@@ -17,12 +17,13 @@
 #include <vector>
 
 #include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxge/cfx_fillrenderoptions.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
-#include "core/fxge/win32/cfx_windowsdib.h"
+#include "core/fxge/dib/cfx_dibitmap.h"
 #include "core/fxge/win32/cwin32_platform.h"
 #include "third_party/base/span.h"
 #include "third_party/base/stl_util.h"
@@ -650,110 +651,6 @@
   std::ostringstream m_InterStream;
 };
 
-struct PREVIEW3_DIBITMAP {
-  BITMAPINFO* pbmi;
-  int Stride;
-  LPBYTE pScan0;
-  Gdiplus::GpBitmap* pBitmap;
-  Gdiplus::BitmapData* pBitmapData;
-  GpStream* pStream;
-};
-
-struct DIBitmapDeleter {
-  void operator()(PREVIEW3_DIBITMAP* bitmap) const {
-    const CGdiplusExt& GdiplusExt = GetGdiplusExt();
-    CallFunc(GdipBitmapUnlockBits)(bitmap->pBitmap, bitmap->pBitmapData);
-    CallFunc(GdipDisposeImage)(bitmap->pBitmap);
-    FX_Free(bitmap->pBitmapData);
-    FX_Free((LPBYTE)bitmap->pbmi);
-    if (bitmap->pStream)
-      bitmap->pStream->Release();
-    FX_Free(bitmap);
-  }
-};
-
-using ScopedDIBitmap = std::unique_ptr<PREVIEW3_DIBITMAP, DIBitmapDeleter>;
-
-ScopedDIBitmap LoadDIBitmapImpl(WINDIB_Open_Args_ args) {
-  Gdiplus::GpBitmap* pBitmap;
-  GpStream* pStream = nullptr;
-  const CGdiplusExt& GdiplusExt = GetGdiplusExt();
-  if (args.flags == WINDIB_OPEN_PATHNAME) {
-    if (CallFunc(GdipCreateBitmapFromFileICM)(args.path_name, &pBitmap) !=
-        Gdiplus::Ok) {
-      return nullptr;
-    }
-  } else {
-    if (args.memory_size == 0 || !args.memory_base)
-      return nullptr;
-
-    pStream = new GpStream;
-    pStream->Write(args.memory_base, (ULONG)args.memory_size, nullptr);
-    if (CallFunc(GdipCreateBitmapFromStreamICM)(pStream, &pBitmap) !=
-        Gdiplus::Ok) {
-      pStream->Release();
-      return nullptr;
-    }
-  }
-
-  UINT height;
-  UINT width;
-  CallFunc(GdipGetImageHeight)(pBitmap, &height);
-  CallFunc(GdipGetImageWidth)(pBitmap, &width);
-  Gdiplus::PixelFormat pixel_format;
-  CallFunc(GdipGetImagePixelFormat)(pBitmap, &pixel_format);
-  int info_size = sizeof(BITMAPINFOHEADER);
-  int bpp = 24;
-  int dest_pixel_format = PixelFormat24bppRGB;
-  if (pixel_format == PixelFormat1bppIndexed) {
-    info_size += 8;
-    bpp = 1;
-    dest_pixel_format = PixelFormat1bppIndexed;
-  } else if (pixel_format == PixelFormat8bppIndexed) {
-    info_size += 1024;
-    bpp = 8;
-    dest_pixel_format = PixelFormat8bppIndexed;
-  } else if (pixel_format == PixelFormat32bppARGB) {
-    bpp = 32;
-    dest_pixel_format = PixelFormat32bppARGB;
-  }
-  LPBYTE buf = FX_Alloc(BYTE, info_size);
-  BITMAPINFOHEADER* pbmih = (BITMAPINFOHEADER*)buf;
-  pbmih->biBitCount = bpp;
-  pbmih->biCompression = BI_RGB;
-  pbmih->biHeight = -(int)height;
-  pbmih->biPlanes = 1;
-  pbmih->biWidth = width;
-  Gdiplus::Rect rect(0, 0, width, height);
-  Gdiplus::BitmapData* pBitmapData = FX_Alloc(Gdiplus::BitmapData, 1);
-  CallFunc(GdipBitmapLockBits)(pBitmap, &rect, Gdiplus::ImageLockModeRead,
-                               dest_pixel_format, pBitmapData);
-  if (pixel_format == PixelFormat1bppIndexed ||
-      pixel_format == PixelFormat8bppIndexed) {
-    DWORD* ppal = (DWORD*)(buf + sizeof(BITMAPINFOHEADER));
-    struct {
-      UINT flags;
-      UINT Count;
-      DWORD Entries[256];
-    } pal;
-    int size = 0;
-    CallFunc(GdipGetImagePaletteSize)(pBitmap, &size);
-    CallFunc(GdipGetImagePalette)(pBitmap, (Gdiplus::ColorPalette*)&pal, size);
-    int entries = pixel_format == PixelFormat1bppIndexed ? 2 : 256;
-    for (int i = 0; i < entries; i++) {
-      ppal[i] = pal.Entries[i] & 0x00ffffff;
-    }
-  }
-  ScopedDIBitmap pInfo(FX_Alloc(PREVIEW3_DIBITMAP, 1));
-  pInfo->pbmi = (BITMAPINFO*)buf;
-  pInfo->pScan0 = (LPBYTE)pBitmapData->Scan0;
-  pInfo->Stride = pBitmapData->Stride;
-  pInfo->pBitmap = pBitmap;
-  pInfo->pBitmapData = pBitmapData;
-  pInfo->pStream = pStream;
-  return pInfo;
-}
-
 }  // namespace
 
 CGdiplusExt::CGdiplusExt() = default;
@@ -979,26 +876,3 @@
   CallFunc(GdipDeleteGraphics)(pGraphics);
   return true;
 }
-
-RetainPtr<CFX_DIBitmap> CGdiplusExt::LoadDIBitmap(WINDIB_Open_Args_ args) {
-  ScopedDIBitmap pInfo = LoadDIBitmapImpl(args);
-  if (!pInfo)
-    return nullptr;
-
-  int height = abs(pInfo->pbmi->bmiHeader.biHeight);
-  int width = pInfo->pbmi->bmiHeader.biWidth;
-  int dest_pitch = (width * pInfo->pbmi->bmiHeader.biBitCount + 31) / 32 * 4;
-  std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
-      pdfium::Vector2D<uint8_t, FxAllocAllocator<uint8_t>>(dest_pitch, height);
-  if (dest_pitch == pInfo->Stride) {
-    memcpy(data.data(), pInfo->pScan0, dest_pitch * height);
-  } else {
-    for (int i = 0; i < height; i++) {
-      memcpy(data.data() + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i,
-             dest_pitch);
-    }
-  }
-  RetainPtr<CFX_DIBitmap> pDIBitmap =
-      CFX_WindowsDIB::LoadFromBuf(pInfo->pbmi, data.data());
-  return pDIBitmap;
-}
diff --git a/core/fxge/win32/cgdi_plus_ext.h b/core/fxge/win32/cgdi_plus_ext.h
index fe6a6a8..9a495a9 100644
--- a/core/fxge/win32/cgdi_plus_ext.h
+++ b/core/fxge/win32/cgdi_plus_ext.h
@@ -21,7 +21,6 @@
 struct CFX_FillRenderOptions;
 struct FXDIB_ResampleOptions;
 struct FX_RECT;
-struct WINDIB_Open_Args_;
 
 class CGdiplusExt {
  public:
@@ -46,8 +45,6 @@
                 uint32_t stroke_argb,
                 const CFX_FillRenderOptions& fill_options);
 
-  RetainPtr<CFX_DIBitmap> LoadDIBitmap(WINDIB_Open_Args_ args);
-
   std::vector<FARPROC> m_Functions;
 
  private: