blob: 5d22b873daea16a7e69df7d2be5378edb536c660 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_VIEW_MAC_H_
#define CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_VIEW_MAC_H_
#import <Cocoa/Cocoa.h>
#include <IOSurface/IOSurfaceAPI.h>
#include "base/mac/scoped_nsobject.h"
#include "cc/output/software_frame_data.h"
#include "content/browser/renderer_host/compositing_iosurface_layer_mac.h"
#include "content/browser/renderer_host/software_layer_mac.h"
#include "skia/ext/platform_canvas.h"
#include "ui/compositor/compositor.h"
#include "ui/gfx/geometry/size.h"
namespace content {
class BrowserCompositorViewMacHelper;
} // namespace content
// Additions to the NSView interface for compositor frames.
@interface NSView (BrowserCompositorView)
- (void)gotAcceleratedIOSurfaceFrame:(IOSurfaceID)surface_handle
withOutputSurfaceID:(int)surface_id
withPixelSize:(gfx::Size)pixel_size
withScaleFactor:(float)scale_factor;
- (void)gotSoftwareFrame:(cc::SoftwareFrameData*)frame_data
withScaleFactor:(float)scale_factor
withCanvas:(SkCanvas*)canvas;
@end // NSView (BrowserCompositorView)
// NSView drawn by a ui::Compositor. The superview of this view is responsible
// for changing the ui::Compositor SizeAndScale and calling layoutLayers when
// the size of the parent view may change. This interface is patterned after
// the needs of RenderWidgetHostViewCocoa, and could change.
@interface BrowserCompositorViewMac : NSView {
scoped_ptr<ui::Compositor> compositor_;
base::scoped_nsobject<CALayer> background_layer_;
base::scoped_nsobject<CompositingIOSurfaceLayer> accelerated_layer_;
int accelerated_layer_output_surface_id_;
base::scoped_nsobject<SoftwareLayer> software_layer_;
scoped_ptr<content::BrowserCompositorViewMacHelper> helper_;
}
// Initialize to render the content of a specific superview.
- (id)initWithSuperview:(NSView*)view;
// Re-position the layers to the correct place when this view's superview
// changes size, or when the accelerated or software content changes.
- (void)layoutLayers;
// Disallow further access to the client.
- (void)resetClient;
// Access the underlying ui::Compositor for this view.
- (ui::Compositor*)compositor;
@end // BrowserCompositorViewMac
#endif // CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_VIEW_MAC_H_