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

Side by Side Diff: third_party/WebKit/Source/web/WebLocalFrameImpl.cpp

Issue 2743143002: Fix incorrect print preview clipping (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 278
279 public: 279 public:
280 ChromePrintContext(LocalFrame* frame) 280 ChromePrintContext(LocalFrame* frame)
281 : PrintContext(frame), m_printedPageWidth(0) {} 281 : PrintContext(frame), m_printedPageWidth(0) {}
282 282
283 ~ChromePrintContext() override {} 283 ~ChromePrintContext() override {}
284 284
285 virtual void begin(float width, float height) { 285 virtual void begin(float width, float height) {
286 DCHECK(!m_printedPageWidth); 286 DCHECK(!m_printedPageWidth);
287 m_printedPageWidth = width; 287 m_printedPageWidth = width;
288 m_printedPageHeight = height;
288 PrintContext::begin(m_printedPageWidth, height); 289 PrintContext::begin(m_printedPageWidth, height);
289 } 290 }
290 291
291 virtual float getPageShrink(int pageNumber) const { 292 virtual float getPageShrink(int pageNumber) const {
292 IntRect pageRect = m_pageRects[pageNumber]; 293 IntRect pageRect = m_pageRects[pageNumber];
293 return m_printedPageWidth / pageRect.width(); 294 return m_printedPageWidth / pageRect.width();
294 } 295 }
295 296
296 float spoolSinglePage(WebCanvas* canvas, int pageNumber) { 297 float spoolSinglePage(WebCanvas* canvas, int pageNumber) {
297 dispatchEventsForPrintingOnAllFrames(); 298 dispatchEventsForPrintingOnAllFrames();
298 if (!frame()->document() || frame()->document()->layoutViewItem().isNull()) 299 if (!frame()->document() || frame()->document()->layoutViewItem().isNull())
299 return 0; 300 return 0;
300 301
301 frame()->view()->updateAllLifecyclePhasesExceptPaint(); 302 frame()->view()->updateAllLifecyclePhasesExceptPaint();
302 if (!frame()->document() || frame()->document()->layoutViewItem().isNull()) 303 if (!frame()->document() || frame()->document()->layoutViewItem().isNull())
303 return 0; 304 return 0;
304 305
305 IntRect pageRect = m_pageRects[pageNumber]; 306 // The page rect gets scaled and translated, so specify the entire
306 PaintRecordBuilder builder(pageRect, &canvas->getMetaData()); 307 // print content area here as the recording rect.
308 IntRect printedPageRect(0, 0, m_printedPageHeight, m_printedPageWidth);
309 PaintRecordBuilder builder(printedPageRect, &canvas->getMetaData());
307 builder.context().setPrinting(true); 310 builder.context().setPrinting(true);
308 311
309 float scale = spoolPage(builder, pageNumber); 312 float scale = spoolPage(builder, pageNumber);
310 canvas->drawPicture(builder.endRecording()); 313 canvas->drawPicture(builder.endRecording());
311 return scale; 314 return scale;
312 } 315 }
313 316
314 void spoolAllPagesWithBoundaries(WebCanvas* canvas, 317 void spoolAllPagesWithBoundaries(WebCanvas* canvas,
315 const FloatSize& pageSizeInPixels) { 318 const FloatSize& pageSizeInPixels) {
316 dispatchEventsForPrintingOnAllFrames(); 319 dispatchEventsForPrintingOnAllFrames();
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 if (currentFrame->isLocalFrame()) 422 if (currentFrame->isLocalFrame())
420 documents.push_back(toLocalFrame(currentFrame)->document()); 423 documents.push_back(toLocalFrame(currentFrame)->document());
421 } 424 }
422 425
423 for (auto& doc : documents) 426 for (auto& doc : documents)
424 doc->dispatchEventsForPrinting(); 427 doc->dispatchEventsForPrinting();
425 } 428 }
426 429
427 // Set when printing. 430 // Set when printing.
428 float m_printedPageWidth; 431 float m_printedPageWidth;
432 float m_printedPageHeight;
429 }; 433 };
430 434
431 // Simple class to override some of PrintContext behavior. This is used when 435 // Simple class to override some of PrintContext behavior. This is used when
432 // the frame hosts a plugin that supports custom printing. In this case, we 436 // the frame hosts a plugin that supports custom printing. In this case, we
433 // want to delegate all printing related calls to the plugin. 437 // want to delegate all printing related calls to the plugin.
434 class ChromePluginPrintContext final : public ChromePrintContext { 438 class ChromePluginPrintContext final : public ChromePrintContext {
435 public: 439 public:
436 ChromePluginPrintContext(LocalFrame* frame, 440 ChromePluginPrintContext(LocalFrame* frame,
437 WebPluginContainerImpl* plugin, 441 WebPluginContainerImpl* plugin,
438 const WebPrintParams& printParams) 442 const WebPrintParams& printParams)
(...skipping 2021 matching lines...) Expand 10 before | Expand all | Expand 10 after
2460 createMarkup(startPosition, endPosition, AnnotateForInterchange, 2464 createMarkup(startPosition, endPosition, AnnotateForInterchange,
2461 ConvertBlocksToInlines::NotConvert, ResolveNonLocalURLs); 2465 ConvertBlocksToInlines::NotConvert, ResolveNonLocalURLs);
2462 } else { 2466 } else {
2463 clipHtml = 2467 clipHtml =
2464 createMarkup(endPosition, startPosition, AnnotateForInterchange, 2468 createMarkup(endPosition, startPosition, AnnotateForInterchange,
2465 ConvertBlocksToInlines::NotConvert, ResolveNonLocalURLs); 2469 ConvertBlocksToInlines::NotConvert, ResolveNonLocalURLs);
2466 } 2470 }
2467 } 2471 }
2468 2472
2469 } // namespace blink 2473 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698