Index: chrome/common/gfx/emf.h |
=================================================================== |
--- chrome/common/gfx/emf.h (revision 19913) |
+++ chrome/common/gfx/emf.h (working copy) |
@@ -1,179 +0,0 @@ |
-// Copyright (c) 2006-2008 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. |
- |
-#ifndef CHROME_COMMON_GFX_EMF_H__ |
-#define CHROME_COMMON_GFX_EMF_H__ |
- |
-#include <windows.h> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
- |
-namespace gfx { |
- |
-class Rect; |
- |
-// Simple wrapper class that manage an EMF data stream and its virtual HDC. |
-class Emf { |
- public: |
- class Record; |
- class Enumerator; |
- struct EnumerationContext; |
- |
- Emf(); |
- ~Emf(); |
- |
- // Generates a virtual HDC that will record every GDI commands and compile it |
- // in a EMF data stream. |
- // hdc is used to setup the default DPI and color settings. hdc is optional. |
- // rect specifies the dimensions (in .01-millimeter units) of the EMF. rect is |
- // optional. |
- bool CreateDc(HDC sibling, const RECT* rect); |
- |
- // Load a EMF data stream. buffer contains EMF data. |
- bool CreateFromData(const void* buffer, size_t size); |
- |
- // TODO(maruel): CreateFromFile(). If ever used. Maybe users would like to |
- // have the ability to save web pages to an EMF file? Afterward, it is easy to |
- // convert to PDF or PS. |
- |
- // Closes the HDC created by CreateDc() and generates the compiled EMF |
- // data. |
- bool CloseDc(); |
- |
- // Closes the EMF data handle when it is not needed anymore. |
- void CloseEmf(); |
- |
- // "Plays" the EMF buffer in a HDC. It is the same effect as calling the |
- // original GDI function that were called when recording the EMF. |rect| is in |
- // "logical units" and is optional. If |rect| is NULL, the natural EMF bounds |
- // are used. |
- // Note: Windows has been known to have stack buffer overflow in its GDI |
- // functions, whether used directly or indirectly through precompiled EMF |
- // data. We have to accept the risk here. Since it is used only for printing, |
- // it requires user intervention. |
- bool Playback(HDC hdc, const RECT* rect) const; |
- |
- // The slow version of Playback(). It enumerates all the records and play them |
- // back in the HDC. The trick is that it skip over the records known to have |
- // issue with some printers. See Emf::Record::SafePlayback implementation for |
- // details. |
- bool SafePlayback(HDC hdc) const; |
- |
- // Retrieves the bounds of the painted area by this EMF buffer. This value |
- // should be passed to Playback to keep the exact same size. |
- gfx::Rect GetBounds() const; |
- |
- // Retrieves the EMF stream size. |
- unsigned GetDataSize() const; |
- |
- // Retrieves the EMF stream. |
- bool GetData(void* buffer, size_t size) const; |
- |
- // Retrieves the EMF stream. It is an helper function. |
- bool GetData(std::vector<uint8>* buffer) const; |
- |
- HENHMETAFILE emf() const { |
- return emf_; |
- } |
- |
- HDC hdc() const { |
- return hdc_; |
- } |
- |
- // Saves the EMF data to a file as-is. It is recommended to use the .emf file |
- // extension but it is not enforced. This function synchronously writes to the |
- // file. For testing only. |
- bool SaveTo(const std::wstring& filename) const; |
- |
- private: |
- // Playbacks safely one EMF record. |
- static int CALLBACK SafePlaybackProc(HDC hdc, |
- HANDLETABLE* handle_table, |
- const ENHMETARECORD* record, |
- int objects_count, |
- LPARAM param); |
- |
- // Compiled EMF data handle. |
- HENHMETAFILE emf_; |
- |
- // Valid when generating EMF data through a virtual HDC. |
- HDC hdc_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(Emf); |
-}; |
- |
-struct Emf::EnumerationContext { |
- HANDLETABLE* handle_table; |
- int objects_count; |
- HDC hdc; |
-}; |
- |
-// One EMF record. It keeps pointers to the EMF buffer held by Emf::emf_. |
-// The entries become invalid once Emf::CloseEmf() is called. |
-class Emf::Record { |
- public: |
- Record(); |
- |
- // Plays the record. |
- bool Play() const; |
- |
- // Plays the record working around quirks with SetLayout, |
- // SetWorldTransform and ModifyWorldTransform. See implementation for details. |
- bool SafePlayback(const XFORM* base_matrix) const; |
- |
- // Access the underlying EMF record. |
- const ENHMETARECORD* record() const { return record_; } |
- |
- protected: |
- Record(const EnumerationContext* context, |
- const ENHMETARECORD* record); |
- |
- private: |
- friend class Emf; |
- friend class Enumerator; |
- const ENHMETARECORD* record_; |
- const EnumerationContext* context_; |
-}; |
- |
-// Retrieves individual records out of a Emf buffer. The main use is to skip |
-// over records that are unsupported on a specific printer or to play back |
-// only a part of an EMF buffer. |
-class Emf::Enumerator { |
- public: |
- // Iterator type used for iterating the records. |
- typedef std::vector<Record>::const_iterator const_iterator; |
- |
- // Enumerates the records at construction time. |hdc| and |rect| are |
- // both optional at the same time or must both be valid. |
- // Warning: |emf| must be kept valid for the time this object is alive. |
- Enumerator(const Emf& emf, HDC hdc, const RECT* rect); |
- |
- // Retrieves the first Record. |
- const_iterator begin() const; |
- |
- // Retrieves the end of the array. |
- const_iterator end() const; |
- |
- private: |
- // Processes one EMF record and saves it in the items_ array. |
- static int CALLBACK EnhMetaFileProc(HDC hdc, |
- HANDLETABLE* handle_table, |
- const ENHMETARECORD* record, |
- int objects_count, |
- LPARAM param); |
- |
- // The collection of every EMF records in the currently loaded EMF buffer. |
- // Initialized by Enumerate(). It keeps pointers to the EMF buffer held by |
- // Emf::emf_. The entries become invalid once Emf::CloseEmf() is called. |
- std::vector<Record> items_; |
- |
- EnumerationContext context_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(Enumerator); |
-}; |
- |
-} // namespace gfx |
- |
-#endif // CHROME_COMMON_GFX_EMF_H__ |