| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "views/widget/widget.h" | 5 #include "views/widget/widget.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "views/focus/view_storage.h" | 9 #include "views/focus/view_storage.h" |
| 10 #include "views/widget/default_theme_provider.h" | 10 #include "views/widget/default_theme_provider.h" |
| 11 #include "views/widget/root_view.h" | 11 #include "views/widget/root_view.h" |
| 12 #include "views/widget/native_widget.h" | 12 #include "views/widget/native_widget.h" |
| 13 | 13 |
| 14 namespace views { | 14 namespace views { |
| 15 | 15 |
| 16 //////////////////////////////////////////////////////////////////////////////// | 16 //////////////////////////////////////////////////////////////////////////////// |
| 17 // Widget, public: | 17 // Widget, public: |
| 18 | 18 |
| 19 Widget::Widget() | 19 Widget::Widget() |
| 20 : native_widget_(NULL), | 20 : native_widget_(NULL), |
| 21 widget_delegate_(NULL), | 21 widget_delegate_(NULL), |
| 22 dragged_view_(NULL) { | 22 dragged_view_(NULL) { |
| 23 } | 23 } |
| 24 | 24 |
| 25 Widget::~Widget() { | 25 Widget::~Widget() { |
| 26 } | 26 } |
| 27 | 27 |
| 28 // Unconverted methods (see header) -------------------------------------------- |
| 29 |
| 28 void Widget::Init(gfx::NativeView parent, const gfx::Rect& bounds) { | 30 void Widget::Init(gfx::NativeView parent, const gfx::Rect& bounds) { |
| 29 GetRootView(); | 31 GetRootView(); |
| 30 default_theme_provider_.reset(new DefaultThemeProvider); | 32 default_theme_provider_.reset(new DefaultThemeProvider); |
| 31 } | 33 } |
| 32 | 34 |
| 33 void Widget::InitWithWidget(Widget* parent, const gfx::Rect& bounds) { | 35 void Widget::InitWithWidget(Widget* parent, const gfx::Rect& bounds) { |
| 34 } | 36 } |
| 35 | 37 |
| 38 gfx::NativeView Widget::GetNativeView() const { |
| 39 return NULL; |
| 40 } |
| 41 |
| 42 void Widget::GenerateMousePressedForView(View* view, const gfx::Point& point) { |
| 43 } |
| 44 |
| 45 bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) { |
| 46 return false; |
| 47 } |
| 48 |
| 49 Window* Widget::GetWindow() { |
| 50 return NULL; |
| 51 } |
| 52 |
| 53 const Window* Widget::GetWindow() const { |
| 54 return NULL; |
| 55 } |
| 56 |
| 57 void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) { |
| 58 if (!is_add) { |
| 59 if (child == dragged_view_) |
| 60 dragged_view_ = NULL; |
| 61 |
| 62 FocusManager* focus_manager = GetFocusManager(); |
| 63 if (focus_manager) { |
| 64 if (focus_manager->GetFocusedView() == child) |
| 65 focus_manager->SetFocusedView(NULL); |
| 66 focus_manager->ViewRemoved(parent, child); |
| 67 } |
| 68 ViewStorage::GetInstance()->ViewRemoved(parent, child); |
| 69 } |
| 70 } |
| 71 |
| 72 // Converted methods (see header) ---------------------------------------------- |
| 73 |
| 36 Widget* Widget::GetTopLevelWidget() { | 74 Widget* Widget::GetTopLevelWidget() { |
| 37 return const_cast<Widget*>( | 75 return const_cast<Widget*>( |
| 38 const_cast<const Widget*>(this)->GetTopLevelWidget()); | 76 const_cast<const Widget*>(this)->GetTopLevelWidget()); |
| 39 } | 77 } |
| 40 | 78 |
| 41 const Widget* Widget::GetTopLevelWidget() const { | 79 const Widget* Widget::GetTopLevelWidget() const { |
| 42 NativeWidget* native_widget = | 80 NativeWidget* native_widget = |
| 43 NativeWidget::GetTopLevelNativeWidget(GetNativeView()); | 81 NativeWidget::GetTopLevelNativeWidget(GetNativeView()); |
| 44 return native_widget ? native_widget->GetWidget() : NULL; | 82 return native_widget ? native_widget->GetWidget() : NULL; |
| 45 } | 83 } |
| 46 | 84 |
| 47 void Widget::SetContentsView(View* view) { | 85 void Widget::SetContentsView(View* view) { |
| 48 root_view_->SetContentsView(view); | 86 root_view_->SetContentsView(view); |
| 49 } | 87 } |
| 50 | 88 |
| 51 gfx::Rect Widget::GetWindowScreenBounds() const { | 89 gfx::Rect Widget::GetWindowScreenBounds() const { |
| 52 return native_widget_->GetWindowScreenBounds(); | 90 return native_widget_->GetWindowScreenBounds(); |
| 53 } | 91 } |
| 54 | 92 |
| 55 gfx::Rect Widget::GetClientAreaScreenBounds() const { | 93 gfx::Rect Widget::GetClientAreaScreenBounds() const { |
| 56 return native_widget_->GetClientAreaScreenBounds(); | 94 return native_widget_->GetClientAreaScreenBounds(); |
| 57 } | 95 } |
| 58 | 96 |
| 59 void Widget::SetBounds(const gfx::Rect& bounds) { | 97 void Widget::SetBounds(const gfx::Rect& bounds) { |
| 98 native_widget_->SetBounds(bounds); |
| 60 } | 99 } |
| 61 | 100 |
| 62 void Widget::MoveAbove(Widget* widget) { | 101 void Widget::MoveAbove(Widget* widget) { |
| 102 native_widget_->MoveAbove(widget); |
| 63 } | 103 } |
| 64 | 104 |
| 65 void Widget::SetShape(gfx::NativeRegion shape) { | 105 void Widget::SetShape(gfx::NativeRegion shape) { |
| 106 native_widget_->SetShape(shape); |
| 66 } | 107 } |
| 67 | 108 |
| 68 void Widget::Close() { | 109 void Widget::Close() { |
| 110 native_widget_->Close(); |
| 69 } | 111 } |
| 70 | 112 |
| 71 void Widget::CloseNow() { | 113 void Widget::CloseNow() { |
| 114 native_widget_->CloseNow(); |
| 72 } | 115 } |
| 73 | 116 |
| 74 void Widget::Show() { | 117 void Widget::Show() { |
| 118 native_widget_->Show(); |
| 75 } | 119 } |
| 76 | 120 |
| 77 void Widget::Hide() { | 121 void Widget::Hide() { |
| 78 } | 122 native_widget_->Hide(); |
| 79 | |
| 80 gfx::NativeView Widget::GetNativeView() const { | |
| 81 return NULL; | |
| 82 } | 123 } |
| 83 | 124 |
| 84 void Widget::SetOpacity(unsigned char opacity) { | 125 void Widget::SetOpacity(unsigned char opacity) { |
| 126 native_widget_->SetOpacity(opacity); |
| 85 } | 127 } |
| 86 | 128 |
| 87 void Widget::SetAlwaysOnTop(bool on_top) { | 129 void Widget::SetAlwaysOnTop(bool on_top) { |
| 130 native_widget_->SetAlwaysOnTop(on_top); |
| 88 } | 131 } |
| 89 | 132 |
| 90 RootView* Widget::GetRootView() { | 133 RootView* Widget::GetRootView() { |
| 91 if (!root_view_.get()) { | 134 if (!root_view_.get()) { |
| 92 // First time the root view is being asked for, create it now. | 135 // First time the root view is being asked for, create it now. |
| 93 root_view_.reset(CreateRootView()); | 136 root_view_.reset(CreateRootView()); |
| 94 } | 137 } |
| 95 return root_view_.get(); | 138 return root_view_.get(); |
| 96 } | 139 } |
| 97 | 140 |
| 98 bool Widget::IsVisible() const { | 141 bool Widget::IsVisible() const { |
| 99 return false; | 142 return native_widget_->IsVisible(); |
| 100 } | 143 } |
| 101 | 144 |
| 102 bool Widget::IsActive() const { | 145 bool Widget::IsActive() const { |
| 103 return false; | 146 return native_widget_->IsActive(); |
| 104 } | 147 } |
| 105 | 148 |
| 106 bool Widget::IsAccessibleWidget() const { | 149 bool Widget::IsAccessibleWidget() const { |
| 107 return false; | 150 return native_widget_->IsAccessibleWidget(); |
| 108 } | |
| 109 | |
| 110 void Widget::GenerateMousePressedForView(View* view, const gfx::Point& point) { | |
| 111 } | |
| 112 | |
| 113 bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) { | |
| 114 return false; | |
| 115 } | |
| 116 | |
| 117 Window* Widget::GetWindow() { | |
| 118 return NULL; | |
| 119 } | |
| 120 | |
| 121 const Window* Widget::GetWindow() const { | |
| 122 return NULL; | |
| 123 } | 151 } |
| 124 | 152 |
| 125 ThemeProvider* Widget::GetThemeProvider() const { | 153 ThemeProvider* Widget::GetThemeProvider() const { |
| 126 const Widget* root_widget = GetTopLevelWidget(); | 154 const Widget* root_widget = GetTopLevelWidget(); |
| 127 if (root_widget && root_widget != this) { | 155 if (root_widget && root_widget != this) { |
| 128 // Attempt to get the theme provider, and fall back to the default theme | 156 // Attempt to get the theme provider, and fall back to the default theme |
| 129 // provider if not found. | 157 // provider if not found. |
| 130 ThemeProvider* provider = root_widget->GetThemeProvider(); | 158 ThemeProvider* provider = root_widget->GetThemeProvider(); |
| 131 if (provider) | 159 if (provider) |
| 132 return provider; | 160 return provider; |
| 133 | 161 |
| 134 provider = root_widget->default_theme_provider_.get(); | 162 provider = root_widget->default_theme_provider_.get(); |
| 135 if (provider) | 163 if (provider) |
| 136 return provider; | 164 return provider; |
| 137 } | 165 } |
| 138 return default_theme_provider_.get(); | 166 return default_theme_provider_.get(); |
| 139 } | 167 } |
| 140 | 168 |
| 141 FocusManager* Widget::GetFocusManager() { | 169 FocusManager* Widget::GetFocusManager() { |
| 142 Widget* toplevel_widget = GetTopLevelWidget(); | 170 Widget* toplevel_widget = GetTopLevelWidget(); |
| 143 if (toplevel_widget && toplevel_widget != this) | 171 if (toplevel_widget && toplevel_widget != this) |
| 144 return toplevel_widget->focus_manager_.get(); | 172 return toplevel_widget->focus_manager_.get(); |
| 145 | 173 |
| 146 return focus_manager_.get(); | 174 return focus_manager_.get(); |
| 147 } | 175 } |
| 148 | 176 |
| 149 void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) { | |
| 150 if (!is_add) { | |
| 151 if (child == dragged_view_) | |
| 152 dragged_view_ = NULL; | |
| 153 | |
| 154 FocusManager* focus_manager = GetFocusManager(); | |
| 155 if (focus_manager) { | |
| 156 if (focus_manager->GetFocusedView() == child) | |
| 157 focus_manager->SetFocusedView(NULL); | |
| 158 focus_manager->ViewRemoved(parent, child); | |
| 159 } | |
| 160 ViewStorage::GetInstance()->ViewRemoved(parent, child); | |
| 161 } | |
| 162 } | |
| 163 | |
| 164 bool Widget::ContainsNativeView(gfx::NativeView native_view) { | 177 bool Widget::ContainsNativeView(gfx::NativeView native_view) { |
| 165 if (native_widget_->ContainsNativeView(native_view)) | 178 if (native_widget_->ContainsNativeView(native_view)) |
| 166 return true; | 179 return true; |
| 167 | 180 |
| 168 // A views::NativeViewHost may contain the given native view, without it being | 181 // A views::NativeViewHost may contain the given native view, without it being |
| 169 // an ancestor of hwnd(), so traverse the views::View hierarchy looking for | 182 // an ancestor of hwnd(), so traverse the views::View hierarchy looking for |
| 170 // such views. | 183 // such views. |
| 171 return GetRootView()->ContainsNativeView(native_view); | 184 return GetRootView()->ContainsNativeView(native_view); |
| 172 } | 185 } |
| 173 | 186 |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 FocusManager* focus_manager = focus_manager_.release(); | 296 FocusManager* focus_manager = focus_manager_.release(); |
| 284 if (focus_manager) | 297 if (focus_manager) |
| 285 MessageLoop::current()->DeleteSoon(FROM_HERE, focus_manager); | 298 MessageLoop::current()->DeleteSoon(FROM_HERE, focus_manager); |
| 286 } | 299 } |
| 287 | 300 |
| 288 void Widget::ReplaceFocusManager(FocusManager* focus_manager) { | 301 void Widget::ReplaceFocusManager(FocusManager* focus_manager) { |
| 289 focus_manager_.reset(focus_manager); | 302 focus_manager_.reset(focus_manager); |
| 290 } | 303 } |
| 291 | 304 |
| 292 } // namespace views | 305 } // namespace views |
| OLD | NEW |