blob: 0092a68668bebd9467f5a660b7724ec320d346a2 [file]
// Copyright 2014 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "core/fxge/cfx_windowsrenderdevice.h"
#include <memory>
#include "core/fxge/cfx_gemodule.h"
#include "core/fxge/renderdevicedriver_iface.h"
#include "core/fxge/win32/cgdi_display_driver.h"
#include "core/fxge/win32/cgdi_printer_driver.h"
#include "core/fxge/win32/cps_printer_driver.h"
#include "core/fxge/win32/ctext_only_printer_driver.h"
namespace {
std::unique_ptr<RenderDeviceDriverIface> CreateDriver(
HDC hDC,
CFX_PSFontTracker* ps_font_tracker) {
int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY);
int obj_type = ::GetObjectType(hDC);
bool use_printer = device_type == DT_RASPRINTER ||
device_type == DT_PLOTTER ||
device_type == DT_CHARSTREAM || obj_type == OBJ_ENHMETADC;
if (!use_printer) {
return std::make_unique<CGdiDisplayDriver>(hDC);
}
WindowsPrintMode print_mode = CFX_GEModule::GetPrintMode();
if (print_mode == WindowsPrintMode::kEmf ||
print_mode == WindowsPrintMode::kEmfImageMasks) {
return std::make_unique<CGdiPrinterDriver>(hDC);
}
if (print_mode == WindowsPrintMode::kTextOnly) {
return std::make_unique<CTextOnlyPrinterDriver>(hDC);
}
return std::make_unique<CPSPrinterDriver>(
hDC, print_mode, ps_font_tracker, CFX_GEModule::Get()->GetEncoderIface());
}
} // namespace
CFX_WindowsRenderDevice::CFX_WindowsRenderDevice(
HDC hDC,
CFX_PSFontTracker* ps_font_tracker) {
SetDeviceDriver(CreateDriver(hDC, ps_font_tracker));
}
CFX_WindowsRenderDevice::~CFX_WindowsRenderDevice() = default;