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 3// found in the LICENSE file. 4 5#ifndef UI_VIEWS_CONTROLS_NATIVE_NATIVE_VIEW_HOST_AURA_H_ 6#define UI_VIEWS_CONTROLS_NATIVE_NATIVE_VIEW_HOST_AURA_H_ 7 8#include "base/basictypes.h" 9#include "base/compiler_specific.h" 10#include "ui/aura/window.h" 11#include "ui/aura/window_observer.h" 12#include "ui/views/controls/native/native_view_host_wrapper.h" 13#include "ui/views/views_export.h" 14 15namespace views { 16 17class NativeViewHost; 18 19// Aura implementation of NativeViewHostWrapper. 20class VIEWS_EXPORT NativeViewHostAura : public NativeViewHostWrapper, 21 public aura::WindowObserver { 22 public: 23 explicit NativeViewHostAura(NativeViewHost* host); 24 virtual ~NativeViewHostAura(); 25 26 // Overridden from NativeViewHostWrapper: 27 virtual void AttachNativeView() OVERRIDE; 28 virtual void NativeViewDetaching(bool destroyed) OVERRIDE; 29 virtual void AddedToWidget() OVERRIDE; 30 virtual void RemovedFromWidget() OVERRIDE; 31 virtual void InstallClip(int x, int y, int w, int h) OVERRIDE; 32 virtual bool HasInstalledClip() OVERRIDE; 33 virtual void UninstallClip() OVERRIDE; 34 virtual void ShowWidget(int x, int y, int w, int h) OVERRIDE; 35 virtual void HideWidget() OVERRIDE; 36 virtual void SetFocus() OVERRIDE; 37 virtual gfx::NativeViewAccessible GetNativeViewAccessible() OVERRIDE; 38 virtual gfx::NativeCursor GetCursor(int x, int y) OVERRIDE; 39 40 private: 41 friend class NativeViewHostAuraTest; 42 43 class ClippingWindowDelegate; 44 45 // Overridden from aura::WindowObserver: 46 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; 47 virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; 48 49 // Reparents the native view with the clipping window existing between it and 50 // its old parent, so that the fast resize path works. 51 void AddClippingWindow(); 52 53 // If the native view has been reparented via AddClippingWindow, this call 54 // undoes it. 55 void RemoveClippingWindow(); 56 57 // Our associated NativeViewHost. 58 NativeViewHost* host_; 59 60 scoped_ptr<ClippingWindowDelegate> clipping_window_delegate_; 61 62 // Window that exists between the native view and the parent that allows for 63 // clipping to occur. This is positioned in the coordinate space of 64 // host_->GetWidget(). 65 aura::Window clipping_window_; 66 scoped_ptr<gfx::Rect> clip_rect_; 67 68 DISALLOW_COPY_AND_ASSIGN(NativeViewHostAura); 69}; 70 71} // namespace views 72 73#endif // UI_VIEWS_CONTROLS_NATIVE_NATIVE_VIEW_HOST_AURA_H_ 74