| 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 |