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

Side by Side Diff: chrome/renderer/print_web_view_helper_mac.mm

Issue 7544018: Print preview page selection should not require a rerendering of draft pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove blank line Created 9 years, 4 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/renderer/print_web_view_helper.h" 5 #include "chrome/renderer/print_web_view_helper.h"
6 6
7 #import <AppKit/AppKit.h> 7 #import <AppKit/AppKit.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/mac/scoped_nsautorelease_pool.h" 10 #include "base/mac/scoped_nsautorelease_pool.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 Send(new PrintHostMsg_DidPrintPage(routing_id(), page_params)); 59 Send(new PrintHostMsg_DidPrintPage(routing_id(), page_params));
60 } 60 }
61 61
62 void PrintWebViewHelper::RenderPreviewPage(int page_number) { 62 void PrintWebViewHelper::RenderPreviewPage(int page_number) {
63 float scale_factor = print_preview_context_.frame()->getPrintPageShrink(0); 63 float scale_factor = print_preview_context_.frame()->getPrintPageShrink(0);
64 PrintMsg_Print_Params printParams = print_preview_context_.print_params(); 64 PrintMsg_Print_Params printParams = print_preview_context_.print_params();
65 gfx::Rect content_area(printParams.margin_left, printParams.margin_top, 65 gfx::Rect content_area(printParams.margin_left, printParams.margin_top,
66 printParams.printable_size.width(), 66 printParams.printable_size.width(),
67 printParams.printable_size.height()); 67 printParams.printable_size.height());
68 68
69 scoped_ptr<printing::Metafile> draft_metafile;
69 printing::Metafile* initial_render_metafile = 70 printing::Metafile* initial_render_metafile =
70 print_preview_context_.metafile(); 71 print_preview_context_.metafile();
71 #if !defined(USE_SKIA) 72
72 if (print_preview_context_.IsModifiable()) { 73 if (print_preview_context_.IsModifiable() &&
73 initial_render_metafile = new printing::PreviewMetafile(); 74 #if defined(USE_SKIA)
74 if (!initial_render_metafile->Init()) { 75 is_complete_metafile_sent_) {
76 #else
77 print_preview_context_.generate_draft_pages()) {
78 #endif
79 draft_metafile.reset(new printing::PreviewMetafile());
80 if (!draft_metafile->Init()) {
75 DidFinishPrinting(FAIL_PREVIEW); 81 DidFinishPrinting(FAIL_PREVIEW);
76 return; 82 return;
77 } 83 }
84 initial_render_metafile = draft_metafile.get();
78 } 85 }
79 #endif
80 86
81 base::TimeTicks begin_time = base::TimeTicks::Now(); 87 base::TimeTicks begin_time = base::TimeTicks::Now();
82 RenderPage(printParams.page_size, content_area, scale_factor, page_number, 88 RenderPage(printParams.page_size, content_area, scale_factor, page_number,
83 print_preview_context_.frame(), initial_render_metafile); 89 print_preview_context_.frame(), initial_render_metafile);
84 print_preview_context_.RenderedPreviewPage( 90 print_preview_context_.RenderedPreviewPage(
85 base::TimeTicks::Now() - begin_time); 91 base::TimeTicks::Now() - begin_time);
86 92
87 printing::Metafile* draft_metafile = NULL;
88 if (print_preview_context_.IsModifiable()) { 93 if (print_preview_context_.IsModifiable()) {
vandebo (ex-Chrome) 2011/08/08 20:11:46 Not sure it if would be cleaner, but if you like,
kmadhusu 2011/08/09 22:09:26 Done.
94 if (draft_metafile.get()) {
95 draft_metafile->FinishDocument();
96 #if !defined(USE_SKIA)
97 if (!is_complete_metafile_sent_) {
98 bool success = print_preview_context_.metafile()->StartPage(
99 printParams.page_size, content_area, scale_factor);
100 DCHECK(success);
101 // With CG, we rendered into a new metafile so we could get it as a
102 // draft document. Now we need to add it to complete document.
103 draft_metafile->RenderPage(1,
104 print_preview_context_.metafile()->context(),
105 CGRectMake(content_area.x(), content_area.y(),
106 content_area.width(),
107 content_area.height()),
108 false /*shrunk_to_fit*/,
109 false /*stretch_to_fit*/,
110 true /*center_horizontally*/,
111 true /*center_vertically*/);
112 print_preview_context_.metafile()->FinishPage();
113 }
114 #endif
115 } else {
vandebo (ex-Chrome) 2011/08/08 20:11:46 Actually, does this need to check ppc_generate_dra
kmadhusu 2011/08/09 22:09:26 Yes, I need to check ppc_generate_draft_pages(), b
89 #if defined(USE_SKIA) 116 #if defined(USE_SKIA)
90 draft_metafile = reinterpret_cast<printing::PreviewMetafile*>( 117 draft_metafile.reset(reinterpret_cast<printing::PreviewMetafile*>(
91 print_preview_context_.metafile())->GetMetafileForCurrentPage(); 118 initial_render_metafile)->GetMetafileForCurrentPage());
92 #else
93 draft_metafile = initial_render_metafile;
94 draft_metafile->FinishDocument();
95
96 // With CG, we rendered into a new metafile so we could get it as a draft
97 // document. Now we need to add it to complete document.
98 draft_metafile->RenderPage(1,
99 print_preview_context_.metafile()->context(),
100 CGRectMake(content_area.x(), content_area.y(),
101 content_area.width(),
102 content_area.height()),
103 false /*shrunk_to_fit*/,
104 false /*stretch_to_fit*/,
105 true /*center_horizontally*/,
106 true /*center_vertically*/);
107 #endif 119 #endif
120 }
108 } 121 }
109 122
110 PreviewPageRendered(page_number, draft_metafile); 123 PreviewPageRendered(page_number, draft_metafile.get());
111 } 124 }
112 125
113 void PrintWebViewHelper::RenderPage( 126 void PrintWebViewHelper::RenderPage(
114 const gfx::Size& page_size, const gfx::Rect& content_area, 127 const gfx::Size& page_size, const gfx::Rect& content_area,
115 const float& scale_factor, int page_number, WebFrame* frame, 128 const float& scale_factor, int page_number, WebFrame* frame,
116 printing::Metafile* metafile) { 129 printing::Metafile* metafile) {
117 130
118 { 131 {
119 #if defined(USE_SKIA) 132 #if defined(USE_SKIA)
120 SkDevice* device = metafile->StartPageForVectorCanvas( 133 SkDevice* device = metafile->StartPageForVectorCanvas(
121 page_size, content_area, scale_factor); 134 page_size, content_area, scale_factor);
122 if (!device) 135 if (!device)
123 return; 136 return;
124 137
125 SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device); 138 SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device);
126 canvas->unref(); // SkRefPtr and new both took a reference. 139 canvas->unref(); // SkRefPtr and new both took a reference.
127 WebKit::WebCanvas* canvasPtr = canvas.get(); 140 WebKit::WebCanvas* canvasPtr = canvas.get();
128 printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvasPtr, metafile); 141 printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvasPtr, metafile);
142 printing::MetafileSkiaWrapper::SetDraftMode(canvasPtr,
143 is_complete_metafile_sent_);
129 #else 144 #else
130 bool success = metafile->StartPage(page_size, content_area, scale_factor); 145 bool success = metafile->StartPage(page_size, content_area, scale_factor);
131 DCHECK(success); 146 DCHECK(success);
132 // printPage can create autoreleased references to |context|. PDF contexts 147 // printPage can create autoreleased references to |context|. PDF contexts
133 // don't write all their data until they are destroyed, so we need to make 148 // don't write all their data until they are destroyed, so we need to make
134 // certain that there are no lingering references. 149 // certain that there are no lingering references.
135 base::mac::ScopedNSAutoreleasePool pool; 150 base::mac::ScopedNSAutoreleasePool pool;
136 CGContextRef cgContext = metafile->context(); 151 CGContextRef cgContext = metafile->context();
137 CGContextRef canvasPtr = cgContext; 152 CGContextRef canvasPtr = cgContext;
138 #endif 153 #endif
139 frame->printPage(page_number, canvasPtr); 154 frame->printPage(page_number, canvasPtr);
140 } 155 }
141 156
142 // Done printing. Close the device context to retrieve the compiled metafile. 157 // Done printing. Close the device context to retrieve the compiled metafile.
143 metafile->FinishPage(); 158 metafile->FinishPage();
144 } 159 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698