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

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

Issue 8052020: Revert 103021 - PrintPreview: Printing preview of a PDF on Mac with Skia only previews the last p... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 2 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 | « webkit/plugins/ppapi/ppapi_plugin_instance.h ('k') | 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 // 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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 RectToPPRect(printable_area, &print_settings.printable_area); 844 RectToPPRect(printable_area, &print_settings.printable_area);
845 print_settings.dpi = printer_dpi; 845 print_settings.dpi = printer_dpi;
846 print_settings.orientation = PP_PRINTORIENTATION_NORMAL; 846 print_settings.orientation = PP_PRINTORIENTATION_NORMAL;
847 print_settings.grayscale = PP_FALSE; 847 print_settings.grayscale = PP_FALSE;
848 print_settings.format = format; 848 print_settings.format = format;
849 num_pages = plugin_print_interface_->Begin(pp_instance(), 849 num_pages = plugin_print_interface_->Begin(pp_instance(),
850 &print_settings); 850 &print_settings);
851 if (!num_pages) 851 if (!num_pages)
852 return 0; 852 return 0;
853 current_print_settings_ = print_settings; 853 current_print_settings_ = print_settings;
854 #if defined(USE_SKIA) 854 #if defined(OS_LINUX) || defined(OS_WIN)
855 canvas_ = NULL; 855 canvas_ = NULL;
856 ranges_.clear(); 856 ranges_.clear();
857 #endif // USE_SKIA 857 #endif // OS_LINUX || OS_WIN
858 return num_pages; 858 return num_pages;
859 } 859 }
860 860
861 bool PluginInstance::PrintPage(int page_number, WebKit::WebCanvas* canvas) { 861 bool PluginInstance::PrintPage(int page_number, WebKit::WebCanvas* canvas) {
862 DCHECK(plugin_print_interface_); 862 DCHECK(plugin_print_interface_);
863 PP_PrintPageNumberRange_Dev page_range; 863 PP_PrintPageNumberRange_Dev page_range;
864 page_range.first_page_number = page_range.last_page_number = page_number; 864 page_range.first_page_number = page_range.last_page_number = page_number;
865 #if defined(USE_SKIA) 865 #if defined(OS_LINUX) || defined(OS_WIN)
866 // The canvas only has a metafile on it for print preview. 866 // The canvas only has a metafile on it for print preview.
867 bool save_for_later = 867 if (printing::MetafileSkiaWrapper::GetMetafileFromCanvas(canvas)) {
868 (printing::MetafileSkiaWrapper::GetMetafileFromCanvas(*canvas) != NULL);
869 #if defined(OS_MACOSX) || defined(OS_WIN)
870 save_for_later = save_for_later && skia::IsPreviewMetafile(*canvas);
871 #endif
872 if (save_for_later) {
873 ranges_.push_back(page_range); 868 ranges_.push_back(page_range);
874 canvas_ = canvas; 869 canvas_ = canvas;
875 return true; 870 return true;
876 } else 871 } else
877 #endif // USE_SKIA 872 #endif // OS_LINUX || OS_WIN
878 { 873 {
879 return PrintPageHelper(&page_range, 1, canvas); 874 return PrintPageHelper(&page_range, 1, canvas);
880 } 875 }
881 } 876 }
882 877
883 bool PluginInstance::PrintPageHelper(PP_PrintPageNumberRange_Dev* page_ranges, 878 bool PluginInstance::PrintPageHelper(PP_PrintPageNumberRange_Dev* page_ranges,
884 int num_ranges, 879 int num_ranges,
885 WebKit::WebCanvas* canvas) { 880 WebKit::WebCanvas* canvas) {
886 // Keep a reference on the stack. See NOTE above. 881 // Keep a reference on the stack. See NOTE above.
887 scoped_refptr<PluginInstance> ref(this); 882 scoped_refptr<PluginInstance> ref(this);
(...skipping 11 matching lines...) Expand all
899 894
900 // Now we need to release the print output resource. 895 // Now we need to release the print output resource.
901 PluginModule::GetCore()->ReleaseResource(print_output); 896 PluginModule::GetCore()->ReleaseResource(print_output);
902 897
903 return ret; 898 return ret;
904 } 899 }
905 900
906 void PluginInstance::PrintEnd() { 901 void PluginInstance::PrintEnd() {
907 // Keep a reference on the stack. See NOTE above. 902 // Keep a reference on the stack. See NOTE above.
908 scoped_refptr<PluginInstance> ref(this); 903 scoped_refptr<PluginInstance> ref(this);
909 #if defined(USE_SKIA) 904 #if defined(OS_LINUX) || defined(OS_WIN)
910 if (!ranges_.empty()) 905 if (!ranges_.empty())
911 PrintPageHelper(&(ranges_.front()), ranges_.size(), canvas_.get()); 906 PrintPageHelper(&(ranges_.front()), ranges_.size(), canvas_.get());
912 canvas_ = NULL; 907 canvas_ = NULL;
913 ranges_.clear(); 908 ranges_.clear();
914 #endif // USE_SKIA 909 #endif // OS_LINUX || OS_WIN
915 910
916 DCHECK(plugin_print_interface_); 911 DCHECK(plugin_print_interface_);
917 if (plugin_print_interface_) 912 if (plugin_print_interface_)
918 plugin_print_interface_->End(pp_instance()); 913 plugin_print_interface_->End(pp_instance());
919 914
920 memset(&current_print_settings_, 0, sizeof(current_print_settings_)); 915 memset(&current_print_settings_, 0, sizeof(current_print_settings_));
921 #if defined(OS_MACOSX) 916 #if defined(OS_MACOSX)
922 last_printed_page_ = NULL; 917 last_printed_page_ = NULL;
923 #endif // defined(OS_MACOSX) 918 #endif // defined(OS_MACOSX)
924 } 919 }
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 if (!render_proc) 1054 if (!render_proc)
1060 return false; 1055 return false;
1061 #endif // defined(OS_WIN) 1056 #endif // defined(OS_WIN)
1062 1057
1063 bool ret = false; 1058 bool ret = false;
1064 #if defined(OS_LINUX) || (defined(OS_MACOSX) && defined(USE_SKIA)) 1059 #if defined(OS_LINUX) || (defined(OS_MACOSX) && defined(USE_SKIA))
1065 // On Linux we just set the final bits in the native metafile 1060 // On Linux we just set the final bits in the native metafile
1066 // (NativeMetafile and PreviewMetafile must have compatible formats, 1061 // (NativeMetafile and PreviewMetafile must have compatible formats,
1067 // i.e. both PDF for this to work). 1062 // i.e. both PDF for this to work).
1068 printing::Metafile* metafile = 1063 printing::Metafile* metafile =
1069 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(*canvas); 1064 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(canvas);
1070 DCHECK(metafile != NULL); 1065 DCHECK(metafile != NULL);
1071 if (metafile) 1066 if (metafile)
1072 ret = metafile->InitFromData(mapper.data(), mapper.size()); 1067 ret = metafile->InitFromData(mapper.data(), mapper.size());
1073 #elif defined(OS_MACOSX) 1068 #elif defined(OS_MACOSX)
1074 printing::NativeMetafile metafile; 1069 printing::NativeMetafile metafile;
1075 // Create a PDF metafile and render from there into the passed in context. 1070 // Create a PDF metafile and render from there into the passed in context.
1076 if (metafile.InitFromData(mapper.data(), mapper.size())) { 1071 if (metafile.InitFromData(mapper.data(), mapper.size())) {
1077 // Flip the transform. 1072 // Flip the transform.
1078 CGContextRef cgContext = canvas; 1073 CGContextRef cgContext = canvas;
1079 CGContextSaveGState(cgContext); 1074 CGContextSaveGState(cgContext);
1080 CGContextTranslateCTM(cgContext, 0, 1075 CGContextTranslateCTM(cgContext, 0,
1081 current_print_settings_.printable_area.size.height); 1076 current_print_settings_.printable_area.size.height);
1082 CGContextScaleCTM(cgContext, 1.0, -1.0); 1077 CGContextScaleCTM(cgContext, 1.0, -1.0);
1083 CGRect page_rect; 1078 CGRect page_rect;
1084 page_rect.origin.x = current_print_settings_.printable_area.point.x; 1079 page_rect.origin.x = current_print_settings_.printable_area.point.x;
1085 page_rect.origin.y = current_print_settings_.printable_area.point.y; 1080 page_rect.origin.y = current_print_settings_.printable_area.point.y;
1086 page_rect.size.width = current_print_settings_.printable_area.size.width; 1081 page_rect.size.width = current_print_settings_.printable_area.size.width;
1087 page_rect.size.height = current_print_settings_.printable_area.size.height; 1082 page_rect.size.height = current_print_settings_.printable_area.size.height;
1088 1083
1089 ret = metafile.RenderPage(1, cgContext, page_rect, true, false, true, true); 1084 ret = metafile.RenderPage(1, cgContext, page_rect, true, false, true, true);
1090 CGContextRestoreGState(cgContext); 1085 CGContextRestoreGState(cgContext);
1091 } 1086 }
1092 #elif defined(OS_WIN) 1087 #elif defined(OS_WIN)
1093 printing::Metafile* metafile = 1088 printing::Metafile* metafile =
1094 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(*canvas); 1089 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(canvas);
1095 if (metafile) { 1090 if (metafile) {
1096 // We only have a metafile when doing print preview, so we just want to 1091 // We only have a metafile when doing print preview, so we just want to
1097 // pass the PDF off to preview. 1092 // pass the PDF off to preview.
1098 ret = metafile->InitFromData(mapper.data(), mapper.size()); 1093 ret = metafile->InitFromData(mapper.data(), mapper.size());
1099 } else { 1094 } else {
1100 // On Windows, we now need to render the PDF to the DC that backs the 1095 // On Windows, we now need to render the PDF to the DC that backs the
1101 // supplied canvas. 1096 // supplied canvas.
1102 HDC dc = skia::BeginPlatformPaint(canvas); 1097 HDC dc = skia::BeginPlatformPaint(canvas);
1103 gfx::Size size_in_pixels; 1098 gfx::Size size_in_pixels;
1104 size_in_pixels.set_width(printing::ConvertUnit( 1099 size_in_pixels.set_width(printing::ConvertUnit(
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
1659 } 1654 }
1660 1655
1661 void PluginInstance::DoSetCursor(WebCursorInfo* cursor) { 1656 void PluginInstance::DoSetCursor(WebCursorInfo* cursor) {
1662 cursor_.reset(cursor); 1657 cursor_.reset(cursor);
1663 if (fullscreen_container_) 1658 if (fullscreen_container_)
1664 fullscreen_container_->DidChangeCursor(*cursor); 1659 fullscreen_container_->DidChangeCursor(*cursor);
1665 } 1660 }
1666 1661
1667 } // namespace ppapi 1662 } // namespace ppapi
1668 } // namespace webkit 1663 } // namespace webkit
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppapi_plugin_instance.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698