Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Side by Side Diff: chrome/browser/printing/printed_document.cc

Issue 149181: Move Emf class to the printing library. Also creates a platform agnostic Nat... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/printing/printed_document.h ('k') | chrome/browser/printing/printed_page.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium 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 #include "chrome/browser/printing/printed_document.h" 5 #include "chrome/browser/printing/printed_document.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "app/gfx/font.h" 9 #include "app/gfx/font.h"
10 #include "app/gfx/text_elider.h" 10 #include "app/gfx/text_elider.h"
11 #include "app/win_util.h" 11 #include "app/win_util.h"
12 #include "base/file_util.h" 12 #include "base/file_util.h"
13 #include "base/message_loop.h" 13 #include "base/message_loop.h"
14 #include "base/singleton.h" 14 #include "base/singleton.h"
15 #include "base/string_util.h" 15 #include "base/string_util.h"
16 #include "base/time.h" 16 #include "base/time.h"
17 #include "chrome/browser/printing/page_number.h" 17 #include "chrome/browser/printing/page_number.h"
18 #include "chrome/browser/printing/page_overlays.h" 18 #include "chrome/browser/printing/page_overlays.h"
19 #include "chrome/browser/printing/printed_pages_source.h" 19 #include "chrome/browser/printing/printed_pages_source.h"
20 #include "chrome/browser/printing/printed_page.h" 20 #include "chrome/browser/printing/printed_page.h"
21 #include "chrome/common/gfx/emf.h"
22 #include "printing/units.h" 21 #include "printing/units.h"
23 #include "skia/ext/platform_device.h" 22 #include "skia/ext/platform_device.h"
24 23
25 using base::Time; 24 using base::Time;
26 25
27 namespace { 26 namespace {
28 27
29 struct PrintDebugDumpPath { 28 struct PrintDebugDumpPath {
30 PrintDebugDumpPath() 29 PrintDebugDumpPath()
31 : enabled(false) { 30 : enabled(false) {
(...skipping 21 matching lines...) Expand all
53 for (unsigned i = 0; i < settings.ranges.size(); ++i) { 52 for (unsigned i = 0; i < settings.ranges.size(); ++i) {
54 const PageRange& range = settings.ranges[i]; 53 const PageRange& range = settings.ranges[i];
55 mutable_.expected_page_count_ += range.to - range.from + 1; 54 mutable_.expected_page_count_ += range.to - range.from + 1;
56 } 55 }
57 } 56 }
58 } 57 }
59 58
60 PrintedDocument::~PrintedDocument() { 59 PrintedDocument::~PrintedDocument() {
61 } 60 }
62 61
63 void PrintedDocument::SetPage(int page_number, gfx::Emf* emf, double shrink) { 62 void PrintedDocument::SetPage(int page_number,
63 NativeMetafile* metafile,
64 double shrink) {
64 // Notice the page_number + 1, the reason is that this is the value that will 65 // Notice the page_number + 1, the reason is that this is the value that will
65 // be shown. Users dislike 0-based counting. 66 // be shown. Users dislike 0-based counting.
66 scoped_refptr<PrintedPage> page( 67 scoped_refptr<PrintedPage> page(
67 new PrintedPage(page_number + 1, 68 new PrintedPage(page_number + 1,
68 emf, immutable_.settings_.page_setup_pixels().physical_size())); 69 metafile, immutable_.settings_.page_setup_pixels().physical_size()));
69 { 70 {
70 AutoLock lock(lock_); 71 AutoLock lock(lock_);
71 mutable_.pages_[page_number] = page; 72 mutable_.pages_[page_number] = page;
72 if (mutable_.shrink_factor == 0) { 73 if (mutable_.shrink_factor == 0) {
73 mutable_.shrink_factor = shrink; 74 mutable_.shrink_factor = shrink;
74 } else { 75 } else {
75 DCHECK_EQ(mutable_.shrink_factor, shrink); 76 DCHECK_EQ(mutable_.shrink_factor, shrink);
76 } 77 }
77 } 78 }
78 DebugDump(*page); 79 DebugDump(*page);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 XFORM xform = { 0 }; 117 XFORM xform = { 0 };
117 xform.eDx = static_cast<float>( 118 xform.eDx = static_cast<float>(
118 immutable_.settings_.page_setup_pixels().content_area().x()); 119 immutable_.settings_.page_setup_pixels().content_area().x());
119 xform.eDy = static_cast<float>( 120 xform.eDy = static_cast<float>(
120 immutable_.settings_.page_setup_pixels().content_area().y()); 121 immutable_.settings_.page_setup_pixels().content_area().y());
121 xform.eM11 = static_cast<float>(1. / mutable_.shrink_factor); 122 xform.eM11 = static_cast<float>(1. / mutable_.shrink_factor);
122 xform.eM22 = static_cast<float>(1. / mutable_.shrink_factor); 123 xform.eM22 = static_cast<float>(1. / mutable_.shrink_factor);
123 BOOL res = ModifyWorldTransform(context, &xform, MWT_LEFTMULTIPLY); 124 BOOL res = ModifyWorldTransform(context, &xform, MWT_LEFTMULTIPLY);
124 DCHECK_NE(res, 0); 125 DCHECK_NE(res, 0);
125 126
126 if (!page.emf()->SafePlayback(context)) { 127 if (!page.native_metafile()->SafePlayback(context)) {
127 NOTREACHED(); 128 NOTREACHED();
128 } 129 }
129 130
130 res = RestoreDC(context, saved_state); 131 res = RestoreDC(context, saved_state);
131 DCHECK_NE(res, 0); 132 DCHECK_NE(res, 0);
132 } 133 }
133 134
134 // Print the header and footer. 135 // Print the header and footer.
135 int base_font_size = gfx::Font().height(); 136 int base_font_size = gfx::Font().height();
136 int new_font_size = ConvertUnit(10, 137 int new_font_size = ConvertUnit(10,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 bool PrintedDocument::IsComplete() const { 170 bool PrintedDocument::IsComplete() const {
170 AutoLock lock(lock_); 171 AutoLock lock(lock_);
171 if (!mutable_.page_count_) 172 if (!mutable_.page_count_)
172 return false; 173 return false;
173 PageNumber page(immutable_.settings_, mutable_.page_count_); 174 PageNumber page(immutable_.settings_, mutable_.page_count_);
174 if (page == PageNumber::npos()) 175 if (page == PageNumber::npos())
175 return false; 176 return false;
176 for (; page != PageNumber::npos(); ++page) { 177 for (; page != PageNumber::npos(); ++page) {
177 PrintedPages::const_iterator itr = mutable_.pages_.find(page.ToInt()); 178 PrintedPages::const_iterator itr = mutable_.pages_.find(page.ToInt());
178 if (itr == mutable_.pages_.end() || !itr->second.get() || 179 if (itr == mutable_.pages_.end() || !itr->second.get() ||
179 !itr->second->emf()) 180 !itr->second->native_metafile())
180 return false; 181 return false;
181 } 182 }
182 return true; 183 return true;
183 } 184 }
184 185
185 void PrintedDocument::DisconnectSource() { 186 void PrintedDocument::DisconnectSource() {
186 AutoLock lock(lock_); 187 AutoLock lock(lock_);
187 mutable_.source_ = NULL; 188 mutable_.source_ = NULL;
188 } 189 }
189 190
190 size_t PrintedDocument::MemoryUsage() const { 191 size_t PrintedDocument::MemoryUsage() const {
191 std::vector<scoped_refptr<PrintedPage>> pages_copy; 192 std::vector<scoped_refptr<PrintedPage>> pages_copy;
192 { 193 {
193 AutoLock lock(lock_); 194 AutoLock lock(lock_);
194 pages_copy.reserve(mutable_.pages_.size()); 195 pages_copy.reserve(mutable_.pages_.size());
195 PrintedPages::const_iterator end = mutable_.pages_.end(); 196 PrintedPages::const_iterator end = mutable_.pages_.end();
196 for (PrintedPages::const_iterator itr = mutable_.pages_.begin(); 197 for (PrintedPages::const_iterator itr = mutable_.pages_.begin();
197 itr != end; ++itr) { 198 itr != end; ++itr) {
198 if (itr->second.get()) { 199 if (itr->second.get()) {
199 pages_copy.push_back(itr->second); 200 pages_copy.push_back(itr->second);
200 } 201 }
201 } 202 }
202 } 203 }
203 size_t total = 0; 204 size_t total = 0;
204 for (size_t i = 0; i < pages_copy.size(); ++i) { 205 for (size_t i = 0; i < pages_copy.size(); ++i) {
205 total += pages_copy[i]->emf()->GetDataSize(); 206 total += pages_copy[i]->native_metafile()->GetDataSize();
206 } 207 }
207 return total; 208 return total;
208 } 209 }
209 210
210 void PrintedDocument::set_page_count(int max_page) { 211 void PrintedDocument::set_page_count(int max_page) {
211 AutoLock lock(lock_); 212 AutoLock lock(lock_);
212 DCHECK_EQ(0, mutable_.page_count_); 213 DCHECK_EQ(0, mutable_.page_count_);
213 mutable_.page_count_ = max_page; 214 mutable_.page_count_ = max_page;
214 if (immutable_.settings_.ranges.empty()) { 215 if (immutable_.settings_.ranges.empty()) {
215 mutable_.expected_page_count_ = max_page; 216 mutable_.expected_page_count_ = max_page;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 filename += L"_"; 315 filename += L"_";
315 filename += time(); 316 filename += time();
316 filename += L"_"; 317 filename += L"_";
317 filename += name(); 318 filename += name();
318 filename += L"_"; 319 filename += L"_";
319 filename += StringPrintf(L"%02d", page.page_number()); 320 filename += StringPrintf(L"%02d", page.page_number());
320 filename += L"_.emf"; 321 filename += L"_.emf";
321 file_util::ReplaceIllegalCharacters(&filename, '_'); 322 file_util::ReplaceIllegalCharacters(&filename, '_');
322 std::wstring path(g_debug_dump_info->debug_dump_path); 323 std::wstring path(g_debug_dump_info->debug_dump_path);
323 file_util::AppendToPath(&path, filename); 324 file_util::AppendToPath(&path, filename);
324 page.emf()->SaveTo(path); 325 page.native_metafile()->SaveTo(path);
325 } 326 }
326 327
327 void PrintedDocument::set_debug_dump_path(const std::wstring& debug_dump_path) { 328 void PrintedDocument::set_debug_dump_path(const std::wstring& debug_dump_path) {
328 g_debug_dump_info->enabled = !debug_dump_path.empty(); 329 g_debug_dump_info->enabled = !debug_dump_path.empty();
329 g_debug_dump_info->debug_dump_path = debug_dump_path; 330 g_debug_dump_info->debug_dump_path = debug_dump_path;
330 } 331 }
331 332
332 const std::wstring& PrintedDocument::debug_dump_path() { 333 const std::wstring& PrintedDocument::debug_dump_path() {
333 return g_debug_dump_info->debug_dump_path; 334 return g_debug_dump_info->debug_dump_path;
334 } 335 }
(...skipping 21 matching lines...) Expand all
356 date_ = win_util::FormatSystemDate(systemtime, std::wstring()); 357 date_ = win_util::FormatSystemDate(systemtime, std::wstring());
357 time_ = win_util::FormatSystemTime(systemtime, std::wstring()); 358 time_ = win_util::FormatSystemTime(systemtime, std::wstring());
358 #else 359 #else
359 Time now = Time::Now(); 360 Time now = Time::Now();
360 date_ = TimeFormat::ShortDateNumeric(now); 361 date_ = TimeFormat::ShortDateNumeric(now);
361 time_ = TimeFormat::TimeOfDay(now); 362 time_ = TimeFormat::TimeOfDay(now);
362 #endif // WIN32 363 #endif // WIN32
363 } 364 }
364 365
365 } // namespace printing 366 } // namespace printing
OLDNEW
« no previous file with comments | « chrome/browser/printing/printed_document.h ('k') | chrome/browser/printing/printed_page.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698