| OLD | NEW |
| 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 "content/browser/renderer_host/render_widget_host_view_gtk.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_gtk.h" |
| 6 | 6 |
| 7 // If this gets included after the gtk headers, then a bunch of compiler | 7 // If this gets included after the gtk headers, then a bunch of compiler |
| 8 // errors happen because of a "#define Status int" in Xlib.h, which interacts | 8 // errors happen because of a "#define Status int" in Xlib.h, which interacts |
| 9 // badly with net::URLRequestStatus::Status. | 9 // badly with net::URLRequestStatus::Status. |
| 10 #include "content/common/view_messages.h" | 10 #include "content/common/view_messages.h" |
| (...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 ui::GetVisualFromGtkWidget(view_.get()), | 1044 ui::GetVisualFromGtkWidget(view_.get()), |
| 1045 depth); | 1045 depth); |
| 1046 } | 1046 } |
| 1047 | 1047 |
| 1048 // NOTE: |output| is initialized with the size of |src_subrect|, and |dst_size| | 1048 // NOTE: |output| is initialized with the size of |src_subrect|, and |dst_size| |
| 1049 // is ignored on GTK. | 1049 // is ignored on GTK. |
| 1050 void RenderWidgetHostViewGtk::CopyFromCompositingSurface( | 1050 void RenderWidgetHostViewGtk::CopyFromCompositingSurface( |
| 1051 const gfx::Rect& src_subrect, | 1051 const gfx::Rect& src_subrect, |
| 1052 const gfx::Size& /* dst_size */, | 1052 const gfx::Size& /* dst_size */, |
| 1053 const base::Callback<void(bool, const SkBitmap&)>& callback) { | 1053 const base::Callback<void(bool, const SkBitmap&)>& callback) { |
| 1054 base::ScopedClosureRunner scoped_callback_runner( | 1054 // Grab the snapshot from the renderer as that's the only reliable way to |
| 1055 base::Bind(callback, false, SkBitmap())); | 1055 // readback from the GPU for this platform right now. |
| 1056 | 1056 GetRenderWidgetHost()->GetSnapshotFromRenderer(src_subrect, callback); |
| 1057 XID parent_window = ui::GetParentWindow(compositing_surface_); | |
| 1058 if (parent_window == None) | |
| 1059 return; | |
| 1060 | |
| 1061 // Get the window offset with respect to its parent. | |
| 1062 XWindowAttributes attr; | |
| 1063 if (!XGetWindowAttributes(ui::GetXDisplay(), compositing_surface_, &attr)) | |
| 1064 return; | |
| 1065 | |
| 1066 gfx::Rect src_subrect_in_parent(src_subrect); | |
| 1067 src_subrect_in_parent.Offset(attr.x, attr.y); | |
| 1068 | |
| 1069 ui::XScopedImage image(XGetImage(ui::GetXDisplay(), parent_window, | |
| 1070 src_subrect_in_parent.x(), | |
| 1071 src_subrect_in_parent.y(), | |
| 1072 src_subrect_in_parent.width(), | |
| 1073 src_subrect_in_parent.height(), | |
| 1074 AllPlanes, ZPixmap)); | |
| 1075 if (!image.get()) | |
| 1076 return; | |
| 1077 | |
| 1078 SkBitmap bitmap; | |
| 1079 bitmap.setConfig(SkBitmap::kARGB_8888_Config, | |
| 1080 image->width, | |
| 1081 image->height, | |
| 1082 image->bytes_per_line); | |
| 1083 if (!bitmap.allocPixels()) | |
| 1084 return; | |
| 1085 bitmap.setIsOpaque(true); | |
| 1086 | |
| 1087 const size_t bitmap_size = bitmap.getSize(); | |
| 1088 DCHECK_EQ(bitmap_size, | |
| 1089 static_cast<size_t>(image->height * image->bytes_per_line)); | |
| 1090 unsigned char* pixels = static_cast<unsigned char*>(bitmap.getPixels()); | |
| 1091 memcpy(pixels, image->data, bitmap_size); | |
| 1092 | |
| 1093 scoped_callback_runner.Release(); | |
| 1094 callback.Run(true, bitmap); | |
| 1095 } | 1057 } |
| 1096 | 1058 |
| 1097 void RenderWidgetHostViewGtk::CopyFromCompositingSurfaceToVideoFrame( | 1059 void RenderWidgetHostViewGtk::CopyFromCompositingSurfaceToVideoFrame( |
| 1098 const gfx::Rect& src_subrect, | 1060 const gfx::Rect& src_subrect, |
| 1099 const scoped_refptr<media::VideoFrame>& target, | 1061 const scoped_refptr<media::VideoFrame>& target, |
| 1100 const base::Callback<void(bool)>& callback) { | 1062 const base::Callback<void(bool)>& callback) { |
| 1101 NOTIMPLEMENTED(); | 1063 NOTIMPLEMENTED(); |
| 1102 callback.Run(false); | 1064 callback.Run(false); |
| 1103 } | 1065 } |
| 1104 | 1066 |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 gfx::PluginWindowHandle id) { | 1576 gfx::PluginWindowHandle id) { |
| 1615 plugin_container_manager_.CreatePluginContainer(id); | 1577 plugin_container_manager_.CreatePluginContainer(id); |
| 1616 } | 1578 } |
| 1617 | 1579 |
| 1618 void RenderWidgetHostViewGtk::OnDestroyPluginContainer( | 1580 void RenderWidgetHostViewGtk::OnDestroyPluginContainer( |
| 1619 gfx::PluginWindowHandle id) { | 1581 gfx::PluginWindowHandle id) { |
| 1620 plugin_container_manager_.DestroyPluginContainer(id); | 1582 plugin_container_manager_.DestroyPluginContainer(id); |
| 1621 } | 1583 } |
| 1622 | 1584 |
| 1623 } // namespace content | 1585 } // namespace content |
| OLD | NEW |