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

Side by Side Diff: webkit/plugins/ppapi/ppapi_plugin_instance.cc

Issue 10083059: [Print Preview] Modified PP_PrintSettings_Dev interface to support auto fit to page functionality. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 8 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/linked_ptr.h" 10 #include "base/memory/linked_ptr.h"
(...skipping 1119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 return GetPreferredPrintOutputFormat(&format); 1130 return GetPreferredPrintOutputFormat(&format);
1131 } 1131 }
1132 1132
1133 bool PluginInstance::IsPrintScalingDisabled() { 1133 bool PluginInstance::IsPrintScalingDisabled() {
1134 DCHECK(plugin_print_interface_); 1134 DCHECK(plugin_print_interface_);
1135 if (!plugin_print_interface_) 1135 if (!plugin_print_interface_)
1136 return false; 1136 return false;
1137 return plugin_print_interface_->IsScalingDisabled(pp_instance()) == PP_TRUE; 1137 return plugin_print_interface_->IsScalingDisabled(pp_instance()) == PP_TRUE;
1138 } 1138 }
1139 1139
1140 int PluginInstance::PrintBegin(const gfx::Rect& printable_area, 1140 int PluginInstance::PrintBegin(const gfx::Rect& content_area,
1141 const gfx::Rect& printable_area,
1142 const gfx::Size& paper_size,
1143 bool fit_to_paper_size,
1141 int printer_dpi) { 1144 int printer_dpi) {
1142 // Keep a reference on the stack. See NOTE above. 1145 // Keep a reference on the stack. See NOTE above.
1143 scoped_refptr<PluginInstance> ref(this); 1146 scoped_refptr<PluginInstance> ref(this);
1144 PP_PrintOutputFormat_Dev format; 1147 PP_PrintOutputFormat_Dev format;
1145 if (!GetPreferredPrintOutputFormat(&format)) { 1148 if (!GetPreferredPrintOutputFormat(&format)) {
1146 // PrintBegin should not have been called since SupportsPrintInterface 1149 // PrintBegin should not have been called since SupportsPrintInterface
1147 // would have returned false; 1150 // would have returned false;
1148 NOTREACHED(); 1151 NOTREACHED();
1149 return 0; 1152 return 0;
1150 } 1153 }
1151 1154
1152 int num_pages = 0; 1155 int num_pages = 0;
1153 PP_PrintSettings_Dev print_settings; 1156 PP_PrintSettings_Dev print_settings;
1154 print_settings.printable_area = PP_FromGfxRect(printable_area); 1157 print_settings.printable_area = PP_FromGfxRect(printable_area);
1158 print_settings.content_area = PP_FromGfxRect(content_area);
1159 print_settings.paper_size = PP_FromGfxSize(paper_size);
1155 print_settings.dpi = printer_dpi; 1160 print_settings.dpi = printer_dpi;
1156 print_settings.orientation = PP_PRINTORIENTATION_NORMAL; 1161 print_settings.orientation = PP_PRINTORIENTATION_NORMAL;
1157 print_settings.grayscale = PP_FALSE; 1162 print_settings.grayscale = PP_FALSE;
1163 print_settings.fit_to_paper_size = PP_FromBool(fit_to_paper_size);
1158 print_settings.format = format; 1164 print_settings.format = format;
1159 num_pages = plugin_print_interface_->Begin(pp_instance(), 1165 num_pages = plugin_print_interface_->Begin(pp_instance(),
1160 &print_settings); 1166 &print_settings);
1161 if (!num_pages) 1167 if (!num_pages)
1162 return 0; 1168 return 0;
1163 current_print_settings_ = print_settings; 1169 current_print_settings_ = print_settings;
1164 #if defined(USE_SKIA) 1170 #if defined(USE_SKIA)
1165 canvas_ = NULL; 1171 canvas_ = NULL;
1166 ranges_.clear(); 1172 ranges_.clear();
1167 #endif // USE_SKIA 1173 #endif // USE_SKIA
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1449 if (metafile) 1455 if (metafile)
1450 ret = metafile->InitFromData(mapper.data(), mapper.size()); 1456 ret = metafile->InitFromData(mapper.data(), mapper.size());
1451 #elif defined(OS_MACOSX) 1457 #elif defined(OS_MACOSX)
1452 printing::NativeMetafile metafile; 1458 printing::NativeMetafile metafile;
1453 // Create a PDF metafile and render from there into the passed in context. 1459 // Create a PDF metafile and render from there into the passed in context.
1454 if (metafile.InitFromData(mapper.data(), mapper.size())) { 1460 if (metafile.InitFromData(mapper.data(), mapper.size())) {
1455 // Flip the transform. 1461 // Flip the transform.
1456 CGContextRef cgContext = canvas; 1462 CGContextRef cgContext = canvas;
1457 CGContextSaveGState(cgContext); 1463 CGContextSaveGState(cgContext);
1458 CGContextTranslateCTM(cgContext, 0, 1464 CGContextTranslateCTM(cgContext, 0,
1459 current_print_settings_.printable_area.size.height); 1465 current_print_settings_.content_area.size.height);
1460 CGContextScaleCTM(cgContext, 1.0, -1.0); 1466 CGContextScaleCTM(cgContext, 1.0, -1.0);
1461 CGRect page_rect; 1467 CGRect page_rect;
1462 page_rect.origin.x = current_print_settings_.printable_area.point.x; 1468 page_rect.origin.x = current_print_settings_.printable_area.point.x;
1463 page_rect.origin.y = current_print_settings_.printable_area.point.y; 1469 page_rect.origin.y = current_print_settings_.printable_area.point.y;
1464 page_rect.size.width = current_print_settings_.printable_area.size.width; 1470 page_rect.size.width = current_print_settings_.printable_area.size.width;
1465 page_rect.size.height = current_print_settings_.printable_area.size.height; 1471 page_rect.size.height = current_print_settings_.printable_area.size.height;
1466 1472
1467 ret = metafile.RenderPage(1, cgContext, page_rect, true, false, true, true); 1473 ret = metafile.RenderPage(1, cgContext, page_rect, true, false, true, true);
1468 CGContextRestoreGState(cgContext); 1474 CGContextRestoreGState(cgContext);
1469 } 1475 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1522 1528
1523 const SkBitmap* bitmap = image->GetMappedBitmap(); 1529 const SkBitmap* bitmap = image->GetMappedBitmap();
1524 if (!bitmap) 1530 if (!bitmap)
1525 return false; 1531 return false;
1526 1532
1527 // Draw the printed image into the supplied canvas. 1533 // Draw the printed image into the supplied canvas.
1528 SkIRect src_rect; 1534 SkIRect src_rect;
1529 src_rect.set(0, 0, bitmap->width(), bitmap->height()); 1535 src_rect.set(0, 0, bitmap->width(), bitmap->height());
1530 SkRect dest_rect; 1536 SkRect dest_rect;
1531 dest_rect.set( 1537 dest_rect.set(
1532 SkIntToScalar(current_print_settings_.printable_area.point.x), 1538 SkIntToScalar(current_print_settings_.content_area.point.x),
1533 SkIntToScalar(current_print_settings_.printable_area.point.y), 1539 SkIntToScalar(current_print_settings_.content_area.point.y),
1534 SkIntToScalar(current_print_settings_.printable_area.point.x + 1540 SkIntToScalar(current_print_settings_.content_area.point.x +
1535 current_print_settings_.printable_area.size.width), 1541 current_print_settings_.content_area.size.width),
1536 SkIntToScalar(current_print_settings_.printable_area.point.y + 1542 SkIntToScalar(current_print_settings_.content_area.point.y +
1537 current_print_settings_.printable_area.size.height)); 1543 current_print_settings_.content_area.size.height));
1538 bool draw_to_canvas = true; 1544 bool draw_to_canvas = true;
1539 gfx::Rect dest_rect_gfx; 1545 gfx::Rect dest_rect_gfx;
1540 dest_rect_gfx.set_x(current_print_settings_.printable_area.point.x); 1546 dest_rect_gfx.set_x(current_print_settings_.content_area.point.x);
1541 dest_rect_gfx.set_y(current_print_settings_.printable_area.point.y); 1547 dest_rect_gfx.set_y(current_print_settings_.content_area.point.y);
1542 dest_rect_gfx.set_width(current_print_settings_.printable_area.size.width); 1548 dest_rect_gfx.set_width(current_print_settings_.content_area.size.width);
1543 dest_rect_gfx.set_height(current_print_settings_.printable_area.size.height); 1549 dest_rect_gfx.set_height(current_print_settings_.content_area.size.height);
1544 1550
1545 #if defined(OS_WIN) 1551 #if defined(OS_WIN)
1546 // Since this is a raster output, the size of the bitmap can be 1552 // Since this is a raster output, the size of the bitmap can be
1547 // huge (especially at high printer DPIs). On Windows, this can 1553 // huge (especially at high printer DPIs). On Windows, this can
1548 // result in a HUGE EMF (on Mac and Linux the output goes to PDF 1554 // result in a HUGE EMF (on Mac and Linux the output goes to PDF
1549 // which appears to Flate compress the bitmap). So, if this bitmap 1555 // which appears to Flate compress the bitmap). So, if this bitmap
1550 // is larger than 20 MB, we save the bitmap as a JPEG into the EMF 1556 // is larger than 20 MB, we save the bitmap as a JPEG into the EMF
1551 // DC. Note: We chose JPEG over PNG because JPEG compression seems 1557 // DC. Note: We chose JPEG over PNG because JPEG compression seems
1552 // way faster (about 4 times faster). 1558 // way faster (about 4 times faster).
1553 static const int kCompressionThreshold = 20 * 1024 * 1024; 1559 static const int kCompressionThreshold = 20 * 1024 * 1024;
1554 if (bitmap->getSize() > kCompressionThreshold) { 1560 if (bitmap->getSize() > kCompressionThreshold) {
1555 DrawJPEGToPlatformDC(*bitmap, dest_rect_gfx, canvas); 1561 DrawJPEGToPlatformDC(*bitmap, dest_rect_gfx, canvas);
1556 draw_to_canvas = false; 1562 draw_to_canvas = false;
1557 } 1563 }
1558 #endif // defined(OS_WIN) 1564 #endif // defined(OS_WIN)
1559 #if defined(OS_MACOSX) && !defined(USE_SKIA) 1565 #if defined(OS_MACOSX) && !defined(USE_SKIA)
1560 draw_to_canvas = false; 1566 draw_to_canvas = false;
1561 DrawSkBitmapToCanvas(*bitmap, canvas, dest_rect_gfx, 1567 DrawSkBitmapToCanvas(*bitmap, canvas, dest_rect_gfx,
1562 current_print_settings_.printable_area.size.height); 1568 current_print_settings_.content_area.size.height);
1563 // See comments in the header file. 1569 // See comments in the header file.
1564 last_printed_page_ = image; 1570 last_printed_page_ = image;
1565 #else // defined(OS_MACOSX) && !defined(USE_SKIA) 1571 #else // defined(OS_MACOSX) && !defined(USE_SKIA)
1566 if (draw_to_canvas) 1572 if (draw_to_canvas)
1567 canvas->drawBitmapRect(*bitmap, &src_rect, dest_rect); 1573 canvas->drawBitmapRect(*bitmap, &src_rect, dest_rect);
1568 #endif // defined(OS_MACOSX) && !defined(USE_SKIA) 1574 #endif // defined(OS_MACOSX) && !defined(USE_SKIA)
1569 return true; 1575 return true;
1570 } 1576 }
1571 1577
1572 #if defined(OS_WIN) 1578 #if defined(OS_WIN)
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
2185 screen_size_for_fullscreen_ = gfx::Size(); 2191 screen_size_for_fullscreen_ = gfx::Size();
2186 WebElement element = container_->element(); 2192 WebElement element = container_->element();
2187 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); 2193 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_);
2188 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); 2194 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_);
2189 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); 2195 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_);
2190 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); 2196 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_);
2191 } 2197 }
2192 2198
2193 } // namespace ppapi 2199 } // namespace ppapi
2194 } // namespace webkit 2200 } // namespace webkit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698