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

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

Issue 1164683007: Copy SkMetaData before painting printed plugin contents. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 6 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 | « Source/platform/graphics/paint/SkPictureBuilder.h ('k') | Source/web/WebPluginContainerImpl.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 /* 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 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 #include "public/web/WebInputElement.h" 201 #include "public/web/WebInputElement.h"
202 #include "public/web/WebNode.h" 202 #include "public/web/WebNode.h"
203 #include "public/web/WebPerformance.h" 203 #include "public/web/WebPerformance.h"
204 #include "public/web/WebPlugin.h" 204 #include "public/web/WebPlugin.h"
205 #include "public/web/WebPrintParams.h" 205 #include "public/web/WebPrintParams.h"
206 #include "public/web/WebPrintPresetOptions.h" 206 #include "public/web/WebPrintPresetOptions.h"
207 #include "public/web/WebRange.h" 207 #include "public/web/WebRange.h"
208 #include "public/web/WebScriptSource.h" 208 #include "public/web/WebScriptSource.h"
209 #include "public/web/WebSerializedScriptValue.h" 209 #include "public/web/WebSerializedScriptValue.h"
210 #include "public/web/WebTreeScopeType.h" 210 #include "public/web/WebTreeScopeType.h"
211 #include "skia/ext/platform_device.h"
211 #include "web/AssociatedURLLoader.h" 212 #include "web/AssociatedURLLoader.h"
212 #include "web/CompositionUnderlineVectorBuilder.h" 213 #include "web/CompositionUnderlineVectorBuilder.h"
213 #include "web/FindInPageCoordinates.h" 214 #include "web/FindInPageCoordinates.h"
214 #include "web/GeolocationClientProxy.h" 215 #include "web/GeolocationClientProxy.h"
215 #include "web/InspectorOverlayImpl.h" 216 #include "web/InspectorOverlayImpl.h"
216 #include "web/LocalFileSystemClient.h" 217 #include "web/LocalFileSystemClient.h"
217 #include "web/MIDIClientProxy.h" 218 #include "web/MIDIClientProxy.h"
218 #include "web/NotificationPermissionClientImpl.h" 219 #include "web/NotificationPermissionClientImpl.h"
219 #include "web/PageOverlay.h" 220 #include "web/PageOverlay.h"
220 #include "web/RemoteBridgeFrameOwner.h" 221 #include "web/RemoteBridgeFrameOwner.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 { 354 {
354 dispatchEventsForPrintingOnAllFrames(); 355 dispatchEventsForPrintingOnAllFrames();
355 if (!frame()->document() || !frame()->document()->layoutView()) 356 if (!frame()->document() || !frame()->document()->layoutView())
356 return 0; 357 return 0;
357 358
358 frame()->view()->updateLayoutAndStyleForPainting(); 359 frame()->view()->updateLayoutAndStyleForPainting();
359 if (!frame()->document() || !frame()->document()->layoutView()) 360 if (!frame()->document() || !frame()->document()->layoutView())
360 return 0; 361 return 0;
361 362
362 IntRect pageRect = m_pageRects[pageNumber]; 363 IntRect pageRect = m_pageRects[pageNumber];
363 SkPictureBuilder pictureBuilder(pageRect); 364 SkPictureBuilder pictureBuilder(pageRect, GraphicsContext::NothingDisabl ed, &skia::getMetaData(*canvas));
365 pictureBuilder.context().setPrinting(true);
364 366
365 float scale = spoolPage(pictureBuilder.context(), pageNumber); 367 float scale = spoolPage(pictureBuilder.context(), pageNumber);
366 pictureBuilder.endRecording()->playback(canvas); 368 pictureBuilder.endRecording()->playback(canvas);
367 return scale; 369 return scale;
368 } 370 }
369 371
370 void spoolAllPagesWithBoundaries(WebCanvas* canvas, const FloatSize& pageSiz eInPixels) 372 void spoolAllPagesWithBoundaries(WebCanvas* canvas, const FloatSize& pageSiz eInPixels)
371 { 373 {
372 dispatchEventsForPrintingOnAllFrames(); 374 dispatchEventsForPrintingOnAllFrames();
373 if (!frame()->document() || !frame()->document()->layoutView()) 375 if (!frame()->document() || !frame()->document()->layoutView())
374 return; 376 return;
375 377
376 frame()->view()->updateLayoutAndStyleForPainting(); 378 frame()->view()->updateLayoutAndStyleForPainting();
377 if (!frame()->document() || !frame()->document()->layoutView()) 379 if (!frame()->document() || !frame()->document()->layoutView())
378 return; 380 return;
379 381
380 float pageHeight; 382 float pageHeight;
381 computePageRects(FloatRect(FloatPoint(0, 0), pageSizeInPixels), 0, 0, 1, pageHeight); 383 computePageRects(FloatRect(FloatPoint(0, 0), pageSizeInPixels), 0, 0, 1, pageHeight);
382 384
383 const float pageWidth = pageSizeInPixels.width(); 385 const float pageWidth = pageSizeInPixels.width();
384 size_t numPages = pageRects().size(); 386 size_t numPages = pageRects().size();
385 int totalHeight = numPages * (pageSizeInPixels.height() + 1) - 1; 387 int totalHeight = numPages * (pageSizeInPixels.height() + 1) - 1;
386 IntRect allPagesRect(0, 0, pageWidth, totalHeight); 388 IntRect allPagesRect(0, 0, pageWidth, totalHeight);
387 389
388 SkPictureBuilder pictureBuilder(allPagesRect); 390 SkPictureBuilder pictureBuilder(allPagesRect, GraphicsContext::NothingDi sabled, &skia::getMetaData(*canvas));
391 pictureBuilder.context().setPrinting(true);
392
389 GraphicsContext& context = pictureBuilder.context(); 393 GraphicsContext& context = pictureBuilder.context();
390 394
391 // Fill the whole background by white. 395 // Fill the whole background by white.
392 { 396 {
393 DrawingRecorder backgroundRecorder(context, *this, DisplayItem::Prin tedContentBackground, allPagesRect); 397 DrawingRecorder backgroundRecorder(context, *this, DisplayItem::Prin tedContentBackground, allPagesRect);
394 if (!backgroundRecorder.canUseCachedDrawing()) 398 if (!backgroundRecorder.canUseCachedDrawing())
395 context.fillRect(FloatRect(0, 0, pageWidth, totalHeight), Color: :white); 399 context.fillRect(FloatRect(0, 0, pageWidth, totalHeight), Color: :white);
396 } 400 }
397 401
398 int currentHeight = 0; 402 int currentHeight = 0;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 // Spools the printed page, a subrect of frame(). Skip the scale step. 438 // Spools the printed page, a subrect of frame(). Skip the scale step.
435 // NativeTheme doesn't play well with scaling. Scaling is done browser side 439 // NativeTheme doesn't play well with scaling. Scaling is done browser side
436 // instead. Returns the scale to be applied. 440 // instead. Returns the scale to be applied.
437 // On Linux, we don't have the problem with NativeTheme, hence we let WebKit 441 // On Linux, we don't have the problem with NativeTheme, hence we let WebKit
438 // do the scaling and ignore the return value. 442 // do the scaling and ignore the return value.
439 virtual float spoolPage(GraphicsContext& context, int pageNumber) 443 virtual float spoolPage(GraphicsContext& context, int pageNumber)
440 { 444 {
441 IntRect pageRect = m_pageRects[pageNumber]; 445 IntRect pageRect = m_pageRects[pageNumber];
442 float scale = m_printedPageWidth / pageRect.width(); 446 float scale = m_printedPageWidth / pageRect.width();
443 447
444 context.setPrinting(true);
445
446 AffineTransform transform; 448 AffineTransform transform;
447 #if OS(POSIX) && !OS(MACOSX) 449 #if OS(POSIX) && !OS(MACOSX)
448 transform.scale(scale); 450 transform.scale(scale);
449 #endif 451 #endif
450 transform.translate(static_cast<float>(-pageRect.x()), static_cast<float >(-pageRect.y())); 452 transform.translate(static_cast<float>(-pageRect.x()), static_cast<float >(-pageRect.y()));
451 TransformRecorder transformRecorder(context, *this, transform); 453 TransformRecorder transformRecorder(context, *this, transform);
452 454
453 ClipRecorder clipRecorder(context, *this, DisplayItem::ClipPrintedPage, LayoutRect(pageRect)); 455 ClipRecorder clipRecorder(context, *this, DisplayItem::ClipPrintedPage, LayoutRect(pageRect));
454 456
455 frame()->view()->paintContents(&context, pageRect); 457 frame()->view()->paintContents(&context, pageRect);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 { 515 {
514 ASSERT_NOT_REACHED(); 516 ASSERT_NOT_REACHED();
515 } 517 }
516 518
517 protected: 519 protected:
518 // Spools the printed page, a subrect of frame(). Skip the scale step. 520 // Spools the printed page, a subrect of frame(). Skip the scale step.
519 // NativeTheme doesn't play well with scaling. Scaling is done browser side 521 // NativeTheme doesn't play well with scaling. Scaling is done browser side
520 // instead. Returns the scale to be applied. 522 // instead. Returns the scale to be applied.
521 virtual float spoolPage(GraphicsContext& context, int pageNumber) override 523 virtual float spoolPage(GraphicsContext& context, int pageNumber) override
522 { 524 {
523 m_plugin->printPage(pageNumber, &context); 525 IntRect pageRect = m_pageRects[pageNumber];
526 m_plugin->printPage(pageNumber, &context, pageRect);
527
524 return 1.0; 528 return 1.0;
525 } 529 }
526 530
527 private: 531 private:
528 // Set when printing. 532 // Set when printing.
529 WebPluginContainerImpl* m_plugin; 533 WebPluginContainerImpl* m_plugin;
530 WebPrintParams m_printParams; 534 WebPrintParams m_printParams;
531 }; 535 };
532 536
533 static WebDataSource* DataSourceForDocLoader(DocumentLoader* loader) 537 static WebDataSource* DataSourceForDocLoader(DocumentLoader* loader)
(...skipping 1574 matching lines...) Expand 10 before | Expand all | Expand 10 after
2108 { 2112 {
2109 m_frameWidget = frameWidget; 2113 m_frameWidget = frameWidget;
2110 } 2114 }
2111 2115
2112 WebFrameWidgetImpl* WebLocalFrameImpl::frameWidget() const 2116 WebFrameWidgetImpl* WebLocalFrameImpl::frameWidget() const
2113 { 2117 {
2114 return m_frameWidget; 2118 return m_frameWidget;
2115 } 2119 }
2116 2120
2117 } // namespace blink 2121 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/graphics/paint/SkPictureBuilder.h ('k') | Source/web/WebPluginContainerImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698