Chromium Code Reviews| Index: ui/gl/gl_image_io_surface.mm |
| diff --git a/ui/gl/gl_image_io_surface.cc b/ui/gl/gl_image_io_surface.mm |
| similarity index 82% |
| rename from ui/gl/gl_image_io_surface.cc |
| rename to ui/gl/gl_image_io_surface.mm |
| index adcadee363ab5499ca14bd43fbf5bff11378ba51..39a0a000e0da40c6509b93aaa064706159866593 100644 |
| --- a/ui/gl/gl_image_io_surface.cc |
| +++ b/ui/gl/gl_image_io_surface.mm |
| @@ -4,15 +4,23 @@ |
| #include "ui/gl/gl_image_io_surface.h" |
| +#include <map> |
| + |
| +#include "base/lazy_instance.h" |
| +#include "base/mac/foundation_util.h" |
| #include "ui/gl/gl_bindings.h" |
| #include "ui/gl/gl_context.h" |
| // Note that this must be included after gl_bindings.h to avoid conflicts. |
| +#include <Quartz/Quartz.h> |
| #include <OpenGL/CGLIOSurface.h> |
|
Avi (use Gerrit)
2015/07/23 20:13:57
Alphabetical?
ccameron
2015/07/23 22:16:39
Done.
|
| namespace gfx { |
| namespace { |
| +typedef std::map<gfx::AcceleratedWidget,CALayer*> WidgetToLayerMap; |
| +base::LazyInstance<WidgetToLayerMap> g_widget_to_layer_map; |
| + |
| bool ValidInternalFormat(unsigned internalformat) { |
| switch (internalformat) { |
| case GL_R8: |
| @@ -192,7 +200,31 @@ bool GLImageIOSurface::ScheduleOverlayPlane(gfx::AcceleratedWidget widget, |
| OverlayTransform transform, |
| const Rect& bounds_rect, |
| const RectF& crop_rect) { |
| - return false; |
| + // Only simple overlay planes are currently supported. |
| + DCHECK_EQ(z_order, 0); |
|
Avi (use Gerrit)
2015/07/23 20:13:57
expected value first.
ccameron
2015/07/23 22:16:39
Done.
|
| + DCHECK_EQ(crop_rect.ToString(), gfx::RectF(0, 0, 1, 1).ToString()); |
| + DCHECK_EQ(transform, gfx::OVERLAY_TRANSFORM_NONE); |
|
Avi (use Gerrit)
2015/07/23 20:13:57
expected value first
ccameron
2015/07/23 22:16:39
Done.
|
| + |
| + // Convert the phony widget to the appropriate CALayer. |
| + auto found = g_widget_to_layer_map.Pointer()->find(widget); |
| + if (found == g_widget_to_layer_map.Pointer()->end()) |
| + return false; |
| + CALayer* layer = found->second; |
| + |
| + // Also note that transactions are not disabled. The caller must ensure that |
| + // all changes to the CALayer tree happen atomically. |
| + [layer setContents:static_cast<id>(io_surface_.get())]; |
| + [layer setFrame:bounds_rect.ToCGRect()]; |
| + return true; |
| +} |
| + |
| +// static |
| +void GLImageIOSurface::SetLayerForWidget( |
| + gfx::AcceleratedWidget widget, CALayer* layer) { |
| + if (layer) |
| + g_widget_to_layer_map.Pointer()->insert(std::make_pair(widget, layer)); |
| + else |
| + g_widget_to_layer_map.Pointer()->erase(widget); |
| } |
| } // namespace gfx |