Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2011)

Unified Diff: mojo/views/native_widget_mojo.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/views/native_widget_mojo.h ('k') | mojo/views/native_widget_view_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/views/native_widget_mojo.cc
diff --git a/mojo/views/native_widget_mojo.cc b/mojo/views/native_widget_mojo.cc
deleted file mode 100644
index 4a297ebea261a14d92f124d23a6c23e81083799c..0000000000000000000000000000000000000000
--- a/mojo/views/native_widget_mojo.cc
+++ /dev/null
@@ -1,646 +0,0 @@
-// Copyright (c) 2012 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 "mojo/views/native_widget_mojo.h"
-
-#include "base/bind.h"
-#include "base/thread_task_runner_handle.h"
-#include "mojo/aura/surface_context_factory.h"
-#include "mojo/converters/geometry/geometry_type_converters.h"
-#include "mojo/converters/input_events/input_events_type_converters.h"
-#include "ui/compositor/compositor.h"
-#include "ui/events/event.h"
-#include "ui/native_theme/native_theme_aura.h"
-#include "ui/views/ime/input_method.h"
-#include "ui/views/views_delegate.h"
-#include "ui/views/widget/native_widget_delegate.h"
-#include "ui/views/widget/widget_delegate.h"
-
-namespace gfx {
-class Canvas;
-}
-
-namespace mojo {
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeWidgetMojo, public:
-
-NativeWidgetMojo::NativeWidgetMojo(
- views::internal::NativeWidgetDelegate* delegate,
- mojo::Shell* shell,
- mojo::View* view)
- : delegate_(delegate),
- ownership_(views::Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET),
- view_(view),
- destroying_(false),
- close_widget_factory_(this) {
- context_factory_.reset(new SurfaceContextFactory(shell, view));
- compositor_.reset(new ui::Compositor(gfx::kNullAcceleratedWidget,
- context_factory_.get(),
- base::ThreadTaskRunnerHandle::Get()));
-
- gfx::Size size = view->bounds().To<gfx::Rect>().size();
- compositor_->SetScaleAndSize(1.0f, size);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeWidgetMojo, internal::NativeWidgetPrivate implementation:
-
-void NativeWidgetMojo::InitNativeWidget(
- const views::Widget::InitParams& params) {
- ownership_ = params.ownership;
-
- SetLayer(new ui::Layer(ui::LAYER_TEXTURED));
- layer()->SetVisible(true);
- layer()->set_delegate(this);
- compositor_->SetRootLayer(layer());
-
- // TODO(erg): The aura version sets shadows types on their window here.
- if (params.type == views::Widget::InitParams::TYPE_CONTROL)
- view_->SetVisible(true);
-
- delegate_->OnNativeWidgetCreated(false);
-
- gfx::Rect window_bounds = params.bounds;
- // TODO(erg): Handle params.child once we have child widgets, along with
- // params.parent.
-
- // Set properties before adding to the parent so that its layout manager sees
- // the correct values.
- OnSizeConstraintsChanged();
-
- // TODO(erg): Handle parent relations here.
-
- // Start observing property changes.
- view_->AddObserver(this);
-
- // TODO(erg): Do additional things related to the restore bounds and
- // maximization. See NWA.
- SetBounds(window_bounds);
-}
-
-views::NonClientFrameView* NativeWidgetMojo::CreateNonClientFrameView() {
- return nullptr;
-}
-
-bool NativeWidgetMojo::ShouldUseNativeFrame() const {
- // TODO(erg): We can probably remove this method; it's only used in windows
- // for Aero frames.
- return false;
-}
-
-bool NativeWidgetMojo::ShouldWindowContentsBeTransparent() const {
- return false;
-}
-
-void NativeWidgetMojo::FrameTypeChanged() {
- // This is called when the Theme has changed; forward the event to the root
- // widget.
- GetWidget()->ThemeChanged();
- GetWidget()->GetRootView()->SchedulePaint();
-}
-
-views::Widget* NativeWidgetMojo::GetWidget() {
- return delegate_->AsWidget();
-}
-
-const views::Widget* NativeWidgetMojo::GetWidget() const {
- return delegate_->AsWidget();
-}
-
-gfx::NativeView NativeWidgetMojo::GetNativeView() const {
- // TODO(erg): Actually implementing this will require moving off aura
- // entirely because of the NativeView typedefs. (Those will need to be
- // changed to mojo::View being the native view/window.)
- return nullptr;
-}
-
-gfx::NativeWindow NativeWidgetMojo::GetNativeWindow() const {
- return nullptr;
-}
-
-views::Widget* NativeWidgetMojo::GetTopLevelWidget() {
- NativeWidgetPrivate* native_widget = GetTopLevelNativeWidget(GetNativeView());
- return native_widget ? native_widget->GetWidget() : nullptr;
-}
-
-const ui::Compositor* NativeWidgetMojo::GetCompositor() const {
- return compositor_.get();
-}
-
-ui::Compositor* NativeWidgetMojo::GetCompositor() {
- return compositor_.get();
-}
-
-ui::Layer* NativeWidgetMojo::GetLayer() {
- return layer();
-}
-
-void NativeWidgetMojo::ReorderNativeViews() {
- // TODO(erg): Punting on this until we actually have something that uses
- // ui::Layer or NativeViewHost.
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::ViewRemoved(views::View* view) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::SetNativeWindowProperty(const char* name, void* value) {
- // TODO(erg): "Native Window" properties do not actually set things on the
- // system's native window; in mojo::View parlance, this is actually a local
- // property, not a shared one.
- NOTIMPLEMENTED();
-}
-
-void* NativeWidgetMojo::GetNativeWindowProperty(const char* name) const {
- NOTIMPLEMENTED();
- return nullptr;
-}
-
-views::TooltipManager* NativeWidgetMojo::GetTooltipManager() const {
- NOTIMPLEMENTED();
- return nullptr;
-}
-
-void NativeWidgetMojo::SetCapture() {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::ReleaseCapture() {
- NOTIMPLEMENTED();
-}
-
-bool NativeWidgetMojo::HasCapture() const {
- NOTIMPLEMENTED();
- return false;
-}
-
-views::InputMethod* NativeWidgetMojo::CreateInputMethod() {
- // TODO(erg): Implement this; having a NOTIMPLEMENTED() spews too much.
- return nullptr;
-}
-
-views::internal::InputMethodDelegate*
-NativeWidgetMojo::GetInputMethodDelegate() {
- NOTIMPLEMENTED();
- return nullptr;
-}
-
-ui::InputMethod* NativeWidgetMojo::GetHostInputMethod() {
- NOTIMPLEMENTED();
- return nullptr;
-}
-
-void NativeWidgetMojo::CenterWindow(const gfx::Size& size) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::GetWindowPlacement(
- gfx::Rect* bounds,
- ui::WindowShowState* show_state) const {
- // The interface specifies returning restored bounds, not current bounds.
- *bounds = GetRestoredBounds();
- // TODO(erg): Redo how we encode |show_state|.
-}
-
-bool NativeWidgetMojo::SetWindowTitle(const base::string16& title) {
- NOTIMPLEMENTED();
- return true;
-}
-
-void NativeWidgetMojo::SetWindowIcons(const gfx::ImageSkia& window_icon,
- const gfx::ImageSkia& app_icon) {
- // TODO(erg): If we add an interface for this, we should change the method
- // type to pass a representation of different icon sizes. The current
- // signature is a legacy of how Windows passes icons around.
-}
-
-void NativeWidgetMojo::InitModalType(ui::ModalType modal_type) {
- NOTIMPLEMENTED();
-}
-
-gfx::Rect NativeWidgetMojo::GetWindowBoundsInScreen() const {
- NOTIMPLEMENTED();
- return gfx::Rect();
-}
-
-gfx::Rect NativeWidgetMojo::GetClientAreaBoundsInScreen() const {
- // View-to-screen coordinate system transformations depend on this returning
- // the full window bounds, for example View::ConvertPointToScreen().
- NOTIMPLEMENTED();
- return gfx::Rect();
-}
-
-gfx::Rect NativeWidgetMojo::GetRestoredBounds() const {
- NOTIMPLEMENTED();
- return gfx::Rect();
-}
-
-void NativeWidgetMojo::SetBounds(const gfx::Rect& bounds) {
- if (!view_)
- return;
-
- view_->SetBounds(*mojo::Rect::From(bounds));
-
- gfx::Size size = bounds.size();
- compositor_->SetScaleAndSize(1.0f, size);
- layer()->SetBounds(gfx::Rect(size));
- delegate_->OnNativeWidgetSizeChanged(size);
-}
-
-void NativeWidgetMojo::SetSize(const gfx::Size& size) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::StackAbove(gfx::NativeView native_view) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::StackAtTop() {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::StackBelow(gfx::NativeView native_view) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::SetShape(gfx::NativeRegion region) {
- // TODO(erg): This is incomplete here. We also need to set the shape on the
- // mojo::View.
- NOTIMPLEMENTED();
- if (view_)
- layer()->SetAlphaShape(make_scoped_ptr(region));
- else
- delete region;
-}
-
-void NativeWidgetMojo::Close() {
- // |window_| may already be deleted by parent window. This can happen
- // when this widget is child widget or has transient parent
- // and ownership is WIDGET_OWNS_NATIVE_WIDGET.
- DCHECK(view_ ||
- ownership_ == views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET);
- if (view_) {
- Hide();
- // TODO(erg): Undo window modality here.
- }
-
- if (!close_widget_factory_.HasWeakPtrs()) {
- base::MessageLoop::current()->PostTask(
- FROM_HERE, base::Bind(&NativeWidgetMojo::CloseNow,
- close_widget_factory_.GetWeakPtr()));
- }
-}
-
-void NativeWidgetMojo::CloseNow() {
- view_->Destroy();
-}
-
-void NativeWidgetMojo::Show() {
- ShowWithWindowState(ui::SHOW_STATE_NORMAL);
-}
-
-void NativeWidgetMojo::Hide() {
- if (view_)
- view_->SetVisible(false);
-}
-
-void NativeWidgetMojo::ShowMaximizedWithBounds(
- const gfx::Rect& restored_bounds) {
- // TODO(erg): Save the restored bounds.
- ShowWithWindowState(ui::SHOW_STATE_MAXIMIZED);
-}
-
-void NativeWidgetMojo::ShowWithWindowState(ui::WindowShowState state) {
- if (!view_)
- return;
-
- // TODO(erg): Set |show_state|, if it still makes sense.
- view_->SetVisible(true);
- if (delegate_->CanActivate()) {
- if (state != ui::SHOW_STATE_INACTIVE)
- Activate();
- // SetInitialFocus() should be always be called, even for
- // SHOW_STATE_INACTIVE. If the window has to stay inactive, the method will
- // do the right thing.
- SetInitialFocus(state);
- }
-}
-
-bool NativeWidgetMojo::IsVisible() const {
- return view_ && view_->visible();
-}
-
-void NativeWidgetMojo::Activate() {
- // TODO(erg): Need to plumb activation to the window manager here.
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::Deactivate() {
- // TODO(erg): Need to plumb deactivation to the window manager here.
- NOTIMPLEMENTED();
-}
-
-bool NativeWidgetMojo::IsActive() const {
- return true;
-}
-
-void NativeWidgetMojo::SetAlwaysOnTop(bool on_top) {
- // TODO(erg): Plumb this to the window manager.
- NOTIMPLEMENTED();
-}
-
-bool NativeWidgetMojo::IsAlwaysOnTop() const {
- return false;
-}
-
-void NativeWidgetMojo::SetVisibleOnAllWorkspaces(bool always_visible) {
- // Not implemented on chromeos or for child widgets.
-}
-
-void NativeWidgetMojo::Maximize() {
- // TODO(erg): Everything about minimization/maximization should really be
- // part of the window manager; these methods should be replaced with
- // something like "RequestMaximize()".
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::Minimize() {
- NOTIMPLEMENTED();
-}
-
-bool NativeWidgetMojo::IsMaximized() const {
- return false;
-}
-
-bool NativeWidgetMojo::IsMinimized() const {
- return false;
-}
-
-void NativeWidgetMojo::Restore() {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::SetFullscreen(bool fullscreen) {
- NOTIMPLEMENTED();
-}
-
-bool NativeWidgetMojo::IsFullscreen() const {
- return false;
-}
-
-void NativeWidgetMojo::SetOpacity(unsigned char opacity) {
- // TODO(erg): Also need this on mojo::View.
- if (layer())
- layer()->SetOpacity(opacity / 255.0);
-}
-
-void NativeWidgetMojo::SetUseDragFrame(bool use_drag_frame) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::FlashFrame(bool flash) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::RunShellDrag(views::View* view,
- const ui::OSExchangeData& data,
- const gfx::Point& location,
- int operation,
- ui::DragDropTypes::DragEventSource source) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::SchedulePaintInRect(const gfx::Rect& rect) {
- layer()->SchedulePaint(rect);
-}
-
-void NativeWidgetMojo::SetCursor(gfx::NativeCursor cursor) {
- // TODO(erg): Requires a cursor client. Is so spammy that we don't put down a
- // NOTIMPLEMENTED().
-}
-
-bool NativeWidgetMojo::IsMouseEventsEnabled() const {
- // TODO(erg): Requires a cursor client.
- NOTIMPLEMENTED();
- return true;
-}
-
-void NativeWidgetMojo::ClearNativeFocus() {
- // TODO(erg): Requires an aura::client::FocusClient equivalent.
-}
-
-gfx::Rect NativeWidgetMojo::GetWorkAreaBoundsInScreen() const {
- // TODO(erg): Requires a gfx::Screen equivalent.
- return gfx::Rect();
-}
-
-views::Widget::MoveLoopResult NativeWidgetMojo::RunMoveLoop(
- const gfx::Vector2d& drag_offset,
- views::Widget::MoveLoopSource source,
- views::Widget::MoveLoopEscapeBehavior escape_behavior) {
- // TODO(erg): This is really complicated. Requires an
- // aura::client::WindowMoveClient equivalent.
- NOTIMPLEMENTED();
- return views::Widget::MOVE_LOOP_CANCELED;
-}
-
-void NativeWidgetMojo::EndMoveLoop() {
- // TODO(erg): Requires an aura::client::WindowMoveClient equivalent.
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::SetVisibilityChangedAnimationsEnabled(bool value) {
- NOTIMPLEMENTED();
-}
-
-ui::NativeTheme* NativeWidgetMojo::GetNativeTheme() const {
- // TODO(erg): NativeThemeAura does not actually use aura. When we remove
- // aura, this should be renamed to not be confusing.
- return ui::NativeThemeAura::instance();
-}
-
-void NativeWidgetMojo::OnRootViewLayout() {
-}
-
-bool NativeWidgetMojo::IsTranslucentWindowOpacitySupported() const {
- return true;
-}
-
-void NativeWidgetMojo::OnSizeConstraintsChanged() {
- // TODO(erg): In the aura version, we set Can{Maximize,Minimize,Resize}
- // properties on our backing window from the widget_delegate(). Figure out
- // what we do policy wise here.
-}
-
-void NativeWidgetMojo::RepostNativeEvent(gfx::NativeEvent native_event) {
- // TODO(erg): Remove this method from the whole views system. The one caller
- // is in WebDialogView, which I assume we'll never use in mojo.
- NOTREACHED();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeWidgetMojo, ui::EventHandler implementation:
-
-void NativeWidgetMojo::OnKeyEvent(ui::KeyEvent* event) {
- // TODO(erg): Key event handling is a pile of hurt. Rebuilding all of this
- // means dealing with the IME. For now, punt.
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::OnMouseEvent(ui::MouseEvent* event) {
- DCHECK(view_);
- DCHECK(view_->visible());
- if (event->type() == ui::ET_MOUSEWHEEL) {
- delegate_->OnMouseEvent(event);
- if (event->handled())
- return;
- }
-
- // TODO(erg): In the aura version, we do something with the
- // ToopltipManagerAura here.
- delegate_->OnMouseEvent(event);
-}
-
-void NativeWidgetMojo::OnScrollEvent(ui::ScrollEvent* event) {
- delegate_->OnScrollEvent(event);
-}
-
-void NativeWidgetMojo::OnGestureEvent(ui::GestureEvent* event) {
- DCHECK(view_);
- DCHECK(view_->visible() || event->IsEndingEvent());
- delegate_->OnGestureEvent(event);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeWidgetMojo, ViewObserver implementation:
-
-void NativeWidgetMojo::OnViewDestroying(View* view) {
- view->RemoveObserver(this);
- delegate_->OnNativeWidgetDestroying();
-}
-
-void NativeWidgetMojo::OnViewDestroyed(View* view) {
- DCHECK_EQ(view, view_);
- view_ = nullptr;
- delegate_->OnNativeWidgetDestroyed();
- if (ownership_ == views::Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET)
- delete this;
-}
-
-void NativeWidgetMojo::OnViewBoundsChanged(View* view,
- const Rect& mojo_old_bounds,
- const Rect& mojo_new_bounds) {
- gfx::Rect old_bounds = mojo_old_bounds.To<gfx::Rect>();
- gfx::Rect new_bounds = mojo_new_bounds.To<gfx::Rect>();
-
- gfx::Size size = new_bounds.size();
- compositor_->SetScaleAndSize(1.0f, size);
- layer()->SetBounds(gfx::Rect(size));
-
- // Assume that if the old bounds was completely empty a move happened. This
- // handles the case of a maximize animation acquiring the layer (acquiring a
- // layer results in clearing the bounds).
- if (old_bounds.origin() != new_bounds.origin() ||
- (old_bounds == gfx::Rect(0, 0, 0, 0) && !new_bounds.IsEmpty())) {
- delegate_->OnNativeWidgetMove();
- }
- if (old_bounds.size() != new_bounds.size())
- delegate_->OnNativeWidgetSizeChanged(new_bounds.size());
-}
-
-void NativeWidgetMojo::OnViewFocusChanged(View* gained_focus,
- View* lost_focus) {
- if (view_ == gained_focus) {
- if (GetWidget()->GetInputMethod()) // Null in tests.
- GetWidget()->GetInputMethod()->OnFocus();
-
- // TODO(erg): We need to set mojo::View* as the gfx::NativeView. Once that
- // is done, we can uncomment the line below.
- //
- // delegate_->OnNativeFocus(lost_focus);
- } else if (view_ == lost_focus) {
- // GetInputMethod() recreates the input method if it's previously been
- // destroyed. If we get called during destruction, the input method will be
- // gone, and creating a new one and telling it that we lost the focus will
- // trigger a DCHECK (the new input method doesn't think that we have the
- // focus and doesn't expect a blur). OnBlur() shouldn't be called during
- // destruction unless WIDGET_OWNS_NATIVE_WIDGET is set (which is just the
- // case in tests).
- if (!destroying_) {
- if (GetWidget()->GetInputMethod())
- GetWidget()->GetInputMethod()->OnBlur();
- } else {
- DCHECK_EQ(ownership_,
- views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET);
- }
-
- // TODO(erg): We need to set mojo::View* as the gfx::NativeView. Once that
- // is done, we can uncomment the line below.
- //
- // delegate_->OnNativeBlur(gained_focus);
- }
-}
-
-void NativeWidgetMojo::OnViewInputEvent(View* view, const EventPtr& event) {
- scoped_ptr<ui::Event> ui_event(event.To<scoped_ptr<ui::Event>>());
- if (ui_event)
- OnEvent(ui_event.get());
-}
-
-// TODO(erg): Add an OnViewActivationChanged() method and plumb that from the
-// window manager through the view manager to here.
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeWidgetMojo, LayerDelegate:
-
-void NativeWidgetMojo::OnPaintLayer(gfx::Canvas* canvas) {
- delegate_->OnNativeWidgetPaint(canvas);
-}
-
-void NativeWidgetMojo::OnDelegatedFrameDamage(
- const gfx::Rect& damage_rect_in_dip) {
- NOTIMPLEMENTED();
-}
-
-void NativeWidgetMojo::OnDeviceScaleFactorChanged(float device_scale_factor) {
- NOTIMPLEMENTED();
-}
-
-base::Closure NativeWidgetMojo::PrepareForLayerBoundsChange() {
- // TODO(erg): This needs a real implementation, but we don't NOTIMPLEMENTED()
- // because spam.
- return base::Closure();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeWidgetMojo, protected:
-
-NativeWidgetMojo::~NativeWidgetMojo() {
- destroying_ = true;
- if (ownership_ == views::Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET)
- delete delegate_;
- else
- CloseNow();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeWidgetMojo, private:
-
-void NativeWidgetMojo::SetInitialFocus(ui::WindowShowState show_state) {
- NOTIMPLEMENTED();
-}
-
-namespace internal {
-
-////////////////////////////////////////////////////////////////////////////////
-// internal::NativeWidgetPrivate, public:
-
-// TODO(erg): Re-implement the static NativeWidgetPrivate interface here. This
-// is already implemented in NativeWidgetAura, and we can't reimplement it here
-// until we delete it there.
-
-} // namespace internal
-} // namespace mojo
« no previous file with comments | « mojo/views/native_widget_mojo.h ('k') | mojo/views/native_widget_view_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698