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

Unified Diff: ui/views/controls/native/native_view_host.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 | « ui/views/controls/native/native_view_host.h ('k') | ui/views/controls/native/native_view_host_aura.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/native/native_view_host.cc
diff --git a/ui/views/controls/native/native_view_host.cc b/ui/views/controls/native/native_view_host.cc
deleted file mode 100644
index d706fc3dc4a8c4ebd8e1d6b0b86828aa4625aa86..0000000000000000000000000000000000000000
--- a/ui/views/controls/native/native_view_host.cc
+++ /dev/null
@@ -1,223 +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 "ui/views/controls/native/native_view_host.h"
-
-#include "base/logging.h"
-#include "ui/base/cursor/cursor.h"
-#include "ui/gfx/canvas.h"
-#include "ui/views/accessibility/native_view_accessibility.h"
-#include "ui/views/controls/native/native_view_host_wrapper.h"
-#include "ui/views/widget/widget.h"
-
-namespace views {
-
-// static
-const char NativeViewHost::kViewClassName[] = "NativeViewHost";
-const char kWidgetNativeViewHostKey[] = "WidgetNativeViewHost";
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeViewHost, public:
-
-NativeViewHost::NativeViewHost()
- : native_view_(NULL),
- fast_resize_(false),
- fast_resize_at_last_layout_(false),
- focus_view_(NULL) {
-}
-
-NativeViewHost::~NativeViewHost() {
-}
-
-void NativeViewHost::Attach(gfx::NativeView native_view) {
- DCHECK(native_view);
- DCHECK(!native_view_);
- native_view_ = native_view;
- // If set_focus_view() has not been invoked, this view is the one that should
- // be seen as focused when the native view receives focus.
- if (!focus_view_)
- focus_view_ = this;
- native_wrapper_->AttachNativeView();
- Layout();
-
- Widget* widget = Widget::GetWidgetForNativeView(native_view);
- if (widget)
- widget->SetNativeWindowProperty(kWidgetNativeViewHostKey, this);
-}
-
-void NativeViewHost::Detach() {
- Detach(false);
-}
-
-void NativeViewHost::SetPreferredSize(const gfx::Size& size) {
- preferred_size_ = size;
- PreferredSizeChanged();
-}
-
-void NativeViewHost::NativeViewDestroyed() {
- // Detach so we can clear our state and notify the native_wrapper_ to release
- // ref on the native view.
- Detach(true);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeViewHost, View overrides:
-
-gfx::Size NativeViewHost::GetPreferredSize() const {
- return preferred_size_;
-}
-
-void NativeViewHost::Layout() {
- if (!native_view_ || !native_wrapper_.get())
- return;
-
- gfx::Rect vis_bounds = GetVisibleBounds();
- bool visible = !vis_bounds.IsEmpty();
-
- if (visible && !fast_resize_) {
- if (vis_bounds.size() != size()) {
- // Only a portion of the Widget is really visible.
- int x = vis_bounds.x();
- int y = vis_bounds.y();
- native_wrapper_->InstallClip(x, y, vis_bounds.width(),
- vis_bounds.height());
- } else if (native_wrapper_->HasInstalledClip()) {
- // The whole widget is visible but we installed a clip on the widget,
- // uninstall it.
- native_wrapper_->UninstallClip();
- }
- }
-
- if (visible) {
- // Since widgets know nothing about the View hierarchy (they are direct
- // children of the Widget that hosts our View hierarchy) they need to be
- // positioned in the coordinate system of the Widget, not the current
- // view. Also, they should be positioned respecting the border insets
- // of the native view.
- gfx::Rect local_bounds = ConvertRectToWidget(GetContentsBounds());
- native_wrapper_->ShowWidget(local_bounds.x(), local_bounds.y(),
- local_bounds.width(),
- local_bounds.height());
- } else {
- native_wrapper_->HideWidget();
- }
- fast_resize_at_last_layout_ = visible && fast_resize_;
-}
-
-void NativeViewHost::OnPaint(gfx::Canvas* canvas) {
- // Paint background if there is one. NativeViewHost needs to paint
- // a background when it is hosted in a TabbedPane. For Gtk implementation,
- // NativeTabbedPaneGtk uses a NativeWidgetGtk as page container and because
- // NativeWidgetGtk hook "expose" with its root view's paint, we need to
- // fill the content. Otherwise, the tab page's background is not properly
- // cleared. For Windows case, it appears okay to not paint background because
- // we don't have a container window in-between. However if you want to use
- // customized background, then this becomes necessary.
- OnPaintBackground(canvas);
-
- // The area behind our window is black, so during a fast resize (where our
- // content doesn't draw over the full size of our native view, and the native
- // view background color doesn't show up), we need to cover that blackness
- // with something so that fast resizes don't result in black flash.
- //
- // It would be nice if this used some approximation of the page's
- // current background color.
- if (native_wrapper_->HasInstalledClip())
- canvas->FillRect(GetLocalBounds(), SK_ColorWHITE);
-}
-
-void NativeViewHost::VisibilityChanged(View* starting_from, bool is_visible) {
- Layout();
-}
-
-bool NativeViewHost::GetNeedsNotificationWhenVisibleBoundsChange() const {
- // The native widget is placed relative to the root. As such, we need to
- // know when the position of any ancestor changes, or our visibility relative
- // to other views changed as it'll effect our position relative to the root.
- return true;
-}
-
-void NativeViewHost::OnVisibleBoundsChanged() {
- Layout();
-}
-
-void NativeViewHost::ViewHierarchyChanged(
- const ViewHierarchyChangedDetails& details) {
- views::Widget* this_widget = GetWidget();
-
- // A non-NULL |details.move_view| indicates a move operation i.e. |this| is
- // is being reparented. If the previous and new parents belong to the same
- // widget, don't remove |this| from the widget. This saves resources from
- // removing from widget and immediately followed by adding to widget; in
- // particular, there wouldn't be spurious visibilitychange events for web
- // contents of |WebView|.
- if (details.move_view && this_widget &&
- details.move_view->GetWidget() == this_widget) {
- return;
- }
-
- if (details.is_add && this_widget) {
- if (!native_wrapper_.get())
- native_wrapper_.reset(NativeViewHostWrapper::CreateWrapper(this));
- native_wrapper_->AddedToWidget();
- } else if (!details.is_add) {
- native_wrapper_->RemovedFromWidget();
- }
-}
-
-const char* NativeViewHost::GetClassName() const {
- return kViewClassName;
-}
-
-void NativeViewHost::OnFocus() {
- native_wrapper_->SetFocus();
- NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, true);
-}
-
-gfx::NativeViewAccessible NativeViewHost::GetNativeViewAccessible() {
- if (native_wrapper_.get()) {
- gfx::NativeViewAccessible accessible_view =
- native_wrapper_->GetNativeViewAccessible();
- if (accessible_view)
- return accessible_view;
- }
-
- return View::GetNativeViewAccessible();
-}
-
-gfx::NativeCursor NativeViewHost::GetCursor(const ui::MouseEvent& event) {
- return native_wrapper_->GetCursor(event.x(), event.y());
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeViewHost, private:
-
-void NativeViewHost::Detach(bool destroyed) {
- if (native_view_) {
- if (!destroyed) {
- Widget* widget = Widget::GetWidgetForNativeView(native_view_);
- if (widget)
- widget->SetNativeWindowProperty(kWidgetNativeViewHostKey, NULL);
- ClearFocus();
- }
- native_wrapper_->NativeViewDetaching(destroyed);
- native_view_ = NULL;
- }
-}
-
-void NativeViewHost::ClearFocus() {
- FocusManager* focus_manager = GetFocusManager();
- if (!focus_manager || !focus_manager->GetFocusedView())
- return;
-
- Widget::Widgets widgets;
- Widget::GetAllChildWidgets(native_view(), &widgets);
- for (Widget::Widgets::iterator i = widgets.begin(); i != widgets.end(); ++i) {
- focus_manager->ViewRemoved((*i)->GetRootView());
- if (!focus_manager->GetFocusedView())
- return;
- }
-}
-
-} // namespace views
« no previous file with comments | « ui/views/controls/native/native_view_host.h ('k') | ui/views/controls/native/native_view_host_aura.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698