OLD | NEW |
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 Loading... |
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 Loading... |
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(¤t_print_settings_, 0, sizeof(current_print_settings_)); | 920 memset(¤t_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 Loading... |
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 Loading... |
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 |
OLD | NEW |