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

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

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