diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-24 23:54:35 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-24 23:54:35 +0000 |
commit | 65fffb56ebe6c8df9448f7a1e3bb6a86234de026 (patch) | |
tree | e374390a3d3fbc20ae2776ce5790131272707443 /views/widget | |
parent | 09733b45d3254d0f270c9ac2f9134dbc69f08304 (diff) | |
download | chromium_src-65fffb56ebe6c8df9448f7a1e3bb6a86234de026.zip chromium_src-65fffb56ebe6c8df9448f7a1e3bb6a86234de026.tar.gz chromium_src-65fffb56ebe6c8df9448f7a1e3bb6a86234de026.tar.bz2 |
Hook up more of the NativeWidgetViews.
- Move NativeWidgetView to its own file.
- Enhances the example to contain a button.
http://crbug.com/83663
TEST=none
Review URL: http://codereview.chromium.org/7065042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86527 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget')
-rw-r--r-- | views/widget/native_widget_view.cc | 108 | ||||
-rw-r--r-- | views/widget/native_widget_view.h | 66 | ||||
-rw-r--r-- | views/widget/native_widget_views.cc | 26 | ||||
-rw-r--r-- | views/widget/native_widget_views.h | 24 |
4 files changed, 197 insertions, 27 deletions
diff --git a/views/widget/native_widget_view.cc b/views/widget/native_widget_view.cc new file mode 100644 index 0000000..525de8e --- /dev/null +++ b/views/widget/native_widget_view.cc @@ -0,0 +1,108 @@ +// Copyright (c) 2011 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. + +#include "views/widget/native_widget_view.h" + +#include "ui/gfx/canvas.h" + +namespace views { +namespace internal { + +//////////////////////////////////////////////////////////////////////////////// +// NativeWidgetView, public: + +NativeWidgetView::NativeWidgetView(NativeWidgetViews* native_widget) + : native_widget_(native_widget) { +} + +NativeWidgetView::~NativeWidgetView() { +} + +//////////////////////////////////////////////////////////////////////////////// +// NativeWidgetView, View overrides: + +void NativeWidgetView::ViewHierarchyChanged(bool is_add, View* parent, + View* child) { + if (is_add && child == this) + delegate()->OnNativeWidgetCreated(); +} + +void NativeWidgetView::OnBoundsChanged(const gfx::Rect& previous_bounds) { + delegate()->OnSizeChanged(size()); +} + +void NativeWidgetView::OnPaint(gfx::Canvas* canvas) { + canvas->FillRectInt(SK_ColorRED, 0, 0, width(), height()); + delegate()->OnNativeWidgetPaint(canvas); +} + +bool NativeWidgetView::OnMousePressed(const MouseEvent& event) { + MouseEvent e(event, this); + return delegate()->OnMouseEvent(event); +} + +bool NativeWidgetView::OnMouseDragged(const MouseEvent& event) { + MouseEvent e(event, this); + return delegate()->OnMouseEvent(event); +} + +void NativeWidgetView::OnMouseReleased(const MouseEvent& event) { + MouseEvent e(event, this); + delegate()->OnMouseEvent(event); +} + +void NativeWidgetView::OnMouseCaptureLost() { + delegate()->OnMouseCaptureLost(); +} + +void NativeWidgetView::OnMouseMoved(const MouseEvent& event) { + MouseEvent e(event, this); + delegate()->OnMouseEvent(event); +} + +void NativeWidgetView::OnMouseEntered(const MouseEvent& event) { + MouseEvent e(event, this); + delegate()->OnMouseEvent(event); +} + +void NativeWidgetView::OnMouseExited(const MouseEvent& event) { + MouseEvent e(event, this); + delegate()->OnMouseEvent(event); +} + +#if defined(TOUCH_UI) +View::TouchStatus NativeWidgetView::OnTouchEvent(const TouchEvent& event) { + NOTIMPLEMENTED(); + // TODO(beng): TouchEvents don't go through the Widget right now... so we + // can't just pass them to the delegate... + return TOUCH_STATUS_UNKNOWN; +} +#endif + +bool NativeWidgetView::OnKeyPressed(const KeyEvent& event) { + return delegate()->OnKeyEvent(event); +} + +bool NativeWidgetView::OnKeyReleased(const KeyEvent& event) { + return delegate()->OnKeyEvent(event); +} + +bool NativeWidgetView::OnMouseWheel(const MouseWheelEvent& event) { + MouseWheelEvent e(event, this); + return delegate()->OnMouseEvent(event); +} + +void NativeWidgetView::OnFocus() { + // TODO(beng): check if we have to do this. + //delegate()->OnNativeFocus(NULL); +} + +void NativeWidgetView::OnBlur() { + // TODO(beng): check if we have to do this. + //delegate()->OnNativeBlur(NULL); +} + +} // namespace internal +} // namespace views + diff --git a/views/widget/native_widget_view.h b/views/widget/native_widget_view.h new file mode 100644 index 0000000..75084cd --- /dev/null +++ b/views/widget/native_widget_view.h @@ -0,0 +1,66 @@ +// Copyright (c) 2011 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 VIEWS_WIDGET_NATIVE_WIDGET_VIEW_H_ +#define VIEWS_WIDGET_NATIVE_WIDGET_VIEW_H_ +#pragma once + +#include "views/view.h" +#include "views/widget/native_widget_delegate.h" +#include "views/widget/native_widget_views.h" + +namespace views { +class NativeWidgetViews; + +namespace internal { + +//////////////////////////////////////////////////////////////////////////////// +// NativeWidgetView +// +// This class represents the View that is the "native view" for a +// NativeWidgetViews. It is the View that is a member of the parent Widget's +// View hierarchy. It is responsible for receiving relevant events from that +// hierarchy and forwarding them to its NativeWidgetViews' delegate's hierarchy. +// +class NativeWidgetView : public View { + public: + explicit NativeWidgetView(NativeWidgetViews* native_widget); + virtual ~NativeWidgetView(); + + private: + // Overridden from View: + virtual void ViewHierarchyChanged(bool is_add, + View* parent, + View* child) OVERRIDE; + virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; + virtual bool OnMousePressed(const MouseEvent& event) OVERRIDE; + virtual bool OnMouseDragged(const MouseEvent& event) OVERRIDE; + virtual void OnMouseReleased(const MouseEvent& event) OVERRIDE; + virtual void OnMouseCaptureLost() OVERRIDE; + virtual void OnMouseMoved(const MouseEvent& event) OVERRIDE; + virtual void OnMouseEntered(const MouseEvent& event) OVERRIDE; + virtual void OnMouseExited(const MouseEvent& event) OVERRIDE; +#if defined(TOUCH_UI) + virtual TouchStatus OnTouchEvent(const TouchEvent& event) OVERRIDE; +#endif + virtual bool OnKeyPressed(const KeyEvent& event) OVERRIDE; + virtual bool OnKeyReleased(const KeyEvent& event) OVERRIDE; + virtual bool OnMouseWheel(const MouseWheelEvent& event) OVERRIDE; + virtual void OnFocus() OVERRIDE; + virtual void OnBlur() OVERRIDE; + + internal::NativeWidgetDelegate* delegate() { + return native_widget_->delegate(); + } + + NativeWidgetViews* native_widget_; + + DISALLOW_COPY_AND_ASSIGN(NativeWidgetView); +}; + +} // namespace internal +} // namespace views + +#endif // VIEWS_WIDGET_NATIVE_WIDGET_VIEW_H_ diff --git a/views/widget/native_widget_views.cc b/views/widget/native_widget_views.cc index 5928f36..8e0df5a 100644 --- a/views/widget/native_widget_views.cc +++ b/views/widget/native_widget_views.cc @@ -4,34 +4,19 @@ #include "views/widget/native_widget_views.h" -#include "ui/gfx/canvas.h" #include "views/view.h" +#include "views/widget/native_widget_view.h" namespace views { //////////////////////////////////////////////////////////////////////////////// -// NativeWidgetViews::NativeWidgetView: - -class NativeWidgetViews::NativeWidgetView : public View { - public: - NativeWidgetView() {} - virtual ~NativeWidgetView() {} - - // Overridden from View: - virtual void OnPaint(gfx::Canvas* canvas) { - canvas->FillRectInt(SK_ColorRED, 0, 0, width(), height()); - } - - private: - DISALLOW_COPY_AND_ASSIGN(NativeWidgetView); -}; - -//////////////////////////////////////////////////////////////////////////////// // NativeWidgetViews, public: -NativeWidgetViews::NativeWidgetViews(internal::NativeWidgetDelegate* delegate) +NativeWidgetViews::NativeWidgetViews(View* host, + internal::NativeWidgetDelegate* delegate) : delegate_(delegate), view_(NULL), + host_view_(host), ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)) { } @@ -46,7 +31,8 @@ View* NativeWidgetViews::GetView() { // NativeWidgetViews, NativeWidget implementation: void NativeWidgetViews::InitNativeWidget(const Widget::InitParams& params) { - view_ = new NativeWidgetView; + view_ = new internal::NativeWidgetView(this); + host_view_->AddChildView(view_); // TODO(beng): handle parenting. // TODO(beng): SetInitParams(). diff --git a/views/widget/native_widget_views.h b/views/widget/native_widget_views.h index dbd0a57..c0d6a25 100644 --- a/views/widget/native_widget_views.h +++ b/views/widget/native_widget_views.h @@ -2,26 +2,34 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_ -#define VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_ +#ifndef VIEWS_WIDGET_NATIVE_WIDGET_VIEWS_H_ +#define VIEWS_WIDGET_NATIVE_WIDGET_VIEWS_H_ #pragma once #include "base/message_loop.h" #include "views/widget/native_widget.h" namespace views { +namespace internal { +class NativeWidgetView; +} +//////////////////////////////////////////////////////////////////////////////// +// NativeWidgetViews +// +// A NativeWidget implementation that uses another View as its native widget. +// class NativeWidgetViews : public NativeWidget { public: - explicit NativeWidgetViews(internal::NativeWidgetDelegate* delegate); + NativeWidgetViews(View* host, internal::NativeWidgetDelegate* delegate); virtual ~NativeWidgetViews(); // TODO(beng): remove. View* GetView(); - private: - class NativeWidgetView; + internal::NativeWidgetDelegate* delegate() { return delegate_; } + private: // Overridden from NativeWidget: virtual void InitNativeWidget(const Widget::InitParams& params) OVERRIDE; virtual Widget* GetWidget() OVERRIDE; @@ -72,7 +80,9 @@ class NativeWidgetViews : public NativeWidget { internal::NativeWidgetDelegate* delegate_; - NativeWidgetView* view_; + internal::NativeWidgetView* view_; + + View* host_view_; // The following factory is used for calls to close the NativeWidgetViews // instance. @@ -83,4 +93,4 @@ class NativeWidgetViews : public NativeWidget { } -#endif // VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_ +#endif // VIEWS_WIDGET_NATIVE_WIDGET_VIEWS_H_ |