| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2009 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 VIEWS_CONTROLS_NATIVE_VIEW_HOST_H_ | |
| 6 #define VIEWS_CONTROLS_NATIVE_VIEW_HOST_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 | |
| 10 #include "views/view.h" | |
| 11 | |
| 12 #include "base/gfx/native_widget_types.h" | |
| 13 | |
| 14 namespace views { | |
| 15 | |
| 16 // Base class for embedding native widgets in a view. | |
| 17 class NativeViewHost : public View { | |
| 18 public: | |
| 19 NativeViewHost(); | |
| 20 virtual ~NativeViewHost(); | |
| 21 | |
| 22 void SetPreferredSize(const gfx::Size& size); | |
| 23 virtual gfx::Size GetPreferredSize(); | |
| 24 | |
| 25 // Overriden to invoke Layout. | |
| 26 virtual void VisibilityChanged(View* starting_from, bool is_visible); | |
| 27 | |
| 28 // Invokes any of InstallClip, UninstallClip, ShowWidget or HideWidget | |
| 29 // depending upon what portion of the widget is view in the parent. | |
| 30 virtual void Layout(); | |
| 31 | |
| 32 // A NativeViewHost has an associated focus View so that the focus of the | |
| 33 // native control and of the View are kept in sync. In simple cases where the | |
| 34 // NativeViewHost directly wraps a native window as is, the associated view | |
| 35 // is this View. In other cases where the NativeViewHost is part of another | |
| 36 // view (such as TextField), the actual View is not the NativeViewHost and | |
| 37 // this method must be called to set that. | |
| 38 // This method must be called before Attach(). | |
| 39 void SetAssociatedFocusView(View* view) { focus_view_ = view; } | |
| 40 View* associated_focus_view() { return focus_view_; } | |
| 41 | |
| 42 void set_fast_resize(bool fast_resize) { fast_resize_ = fast_resize; } | |
| 43 bool fast_resize() const { return fast_resize_; } | |
| 44 | |
| 45 // The embedded native view. | |
| 46 gfx::NativeView native_view() const { return native_view_; } | |
| 47 | |
| 48 protected: | |
| 49 // Notification that our visible bounds relative to the root has changed. | |
| 50 // Invokes Layout to make sure the widget is positioned correctly. | |
| 51 virtual void VisibleBoundsInRootChanged(); | |
| 52 | |
| 53 // Sets the native view. Subclasses will typically invoke Layout after setting | |
| 54 // the widget. | |
| 55 void set_native_view(gfx::NativeView widget) { native_view_ = widget; } | |
| 56 | |
| 57 // Installs a clip on the native widget. | |
| 58 virtual void InstallClip(int x, int y, int w, int h) = 0; | |
| 59 | |
| 60 // Removes the clip installed on the native widget by way of InstallClip. | |
| 61 virtual void UninstallClip() = 0; | |
| 62 | |
| 63 // Shows the widget at the specified position (relative to the parent widget). | |
| 64 virtual void ShowWidget(int x, int y, int w, int h) = 0; | |
| 65 | |
| 66 // Hides the widget. NOTE: this may be invoked when the widget is already | |
| 67 // hidden. | |
| 68 virtual void HideWidget() = 0; | |
| 69 | |
| 70 void set_installed_clip(bool installed_clip) { | |
| 71 installed_clip_ = installed_clip; | |
| 72 } | |
| 73 bool installed_clip() const { return installed_clip_; } | |
| 74 | |
| 75 private: | |
| 76 gfx::NativeView native_view_; | |
| 77 | |
| 78 // The preferred size of this View | |
| 79 gfx::Size preferred_size_; | |
| 80 | |
| 81 // Have we installed a region on the HWND used to clip to only the visible | |
| 82 // portion of the HWND? | |
| 83 bool installed_clip_; | |
| 84 | |
| 85 // Fast resizing will move the hwnd and clip its window region, this will | |
| 86 // result in white areas and will not resize the content (so scrollbars | |
| 87 // will be all wrong and content will flow offscreen). Only use this | |
| 88 // when you're doing extremely quick, high-framerate vertical resizes | |
| 89 // and don't care about accuracy. Make sure you do a real resize at the | |
| 90 // end. USE WITH CAUTION. | |
| 91 bool fast_resize_; | |
| 92 | |
| 93 // The view that should be given focus when this NativeViewHost is focused. | |
| 94 View* focus_view_; | |
| 95 | |
| 96 DISALLOW_COPY_AND_ASSIGN(NativeViewHost); | |
| 97 }; | |
| 98 | |
| 99 } // namespace views | |
| 100 | |
| 101 #endif // VIEWS_CONTROLS_NATIVE_VIEW_HOST_H_ | |
| OLD | NEW |