Index: chrome/renderer/mock_printer_driver_win.cc |
=================================================================== |
--- chrome/renderer/mock_printer_driver_win.cc (revision 20864) |
+++ chrome/renderer/mock_printer_driver_win.cc (working copy) |
@@ -1,125 +0,0 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/renderer/mock_printer_driver_win.h" |
- |
-#include "base/gfx/gdi_util.h" |
-#include "base/logging.h" |
-#include "printing/emf_win.h" |
-#include "chrome/renderer/mock_printer.h" |
-#include "skia/ext/platform_device.h" |
- |
-namespace { |
- |
-// A simple class which temporarily overrides system settings. |
-// The bitmap image rendered via the PlayEnhMetaFile() function depends on |
-// some system settings. |
-// As a workaround for such dependency, this class saves the system settings |
-// and changes them. This class also restore the saved settings in its |
-// destructor. |
-class SystemSettingsOverride { |
- public: |
- SystemSettingsOverride() : font_smoothing_(0) { |
- } |
- |
- ~SystemSettingsOverride() { |
- SystemParametersInfo(SPI_SETFONTSMOOTHING, font_smoothing_, NULL, 0); |
- } |
- |
- BOOL Init(BOOL font_smoothing) { |
- if (!SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, &font_smoothing_, 0)) |
- return FALSE; |
- return SystemParametersInfo(SPI_SETFONTSMOOTHING, font_smoothing, NULL, 0); |
- } |
- |
- private: |
- BOOL font_smoothing_; |
-}; |
- |
-// A class which renders an EMF data and returns a raw bitmap data. |
-// The bitmap data returned from Create() is deleted in the destructor of this |
-// class. So, we need to create a copy of this bitmap data if it is used after |
-// this object is deleted, |
-class EmfRenderer { |
- public: |
- EmfRenderer() : dc_(NULL), bitmap_(NULL) { |
- } |
- |
- ~EmfRenderer() { |
- if (bitmap_) { |
- DeleteObject(bitmap_); |
- bitmap_ = NULL; |
- } |
- if (dc_) { |
- DeleteDC(dc_); |
- dc_ = NULL; |
- } |
- } |
- |
- const void* Create(int width, int height, const printing::Emf* emf) { |
- CHECK(!dc_ && !bitmap_); |
- |
- BITMAPV4HEADER header; |
- gfx::CreateBitmapV4Header(width, height, &header); |
- |
- dc_ = CreateCompatibleDC(NULL); |
- if (!dc_) |
- return NULL; |
- |
- void* bits; |
- bitmap_ = CreateDIBSection(dc_, reinterpret_cast<BITMAPINFO*>(&header), 0, |
- &bits, NULL, 0); |
- if (!bitmap_ || !bits) |
- return NULL; |
- |
- SelectObject(dc_, bitmap_); |
- |
- skia::PlatformDevice::InitializeDC(dc_); |
- emf->Playback(dc_, NULL); |
- |
- return reinterpret_cast<uint8*>(bits); |
- } |
- |
- private: |
- HDC dc_; |
- HBITMAP bitmap_; |
-}; |
- |
-} // namespace |
- |
-MockPrinterDriverWin::MockPrinterDriverWin() { |
-} |
- |
-MockPrinterDriverWin::~MockPrinterDriverWin() { |
-} |
- |
-MockPrinterPage* MockPrinterDriverWin::LoadSource(const void* source_data, |
- size_t source_size) { |
- // This code is mostly copied from the Image::LoadEMF() function in |
- // "src/chrome/browser/printing/printing_layout_uitest.cc". |
- printing::Emf emf; |
- emf.CreateFromData(source_data, source_size); |
- gfx::Rect rect(emf.GetBounds()); |
- |
- // Create a temporary DC and bitmap to retrieve the renderered data. |
- if (rect.width() <= 0 || rect.height() <= 0) |
- return NULL; |
- |
- // Disable the font-smoothing feature of Windows. |
- SystemSettingsOverride system_settings; |
- system_settings.Init(FALSE); |
- |
- // Render the EMF data and create a bitmap. |
- EmfRenderer renderer; |
- const void* bitmap_data = renderer.Create(rect.width(), rect.height(), &emf); |
- if (!bitmap_data) |
- return NULL; |
- |
- // Create a new MockPrinterPage instance and return it. |
- size_t row_byte_width = rect.width() * 4; |
- size_t bitmap_size = row_byte_width * rect.height(); |
- return new MockPrinterPage(rect.width(), rect.height(), |
- source_data, source_size, |
- bitmap_data, bitmap_size); |
-} |