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 15 namespace views { 16 17 class NativeViewHost; 18 19 // Aura implementation of NativeViewHostWrapper. 20 class 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