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

Unified Diff: views/controls/native/native_view_host_win.cc

Issue 114059: Refactors HWNDView, NativeViewHostGtk and NativeViewHost so that they match t... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 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 | « views/controls/native/native_view_host_win.h ('k') | views/controls/native/native_view_host_wrapper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: views/controls/native/native_view_host_win.cc
===================================================================
--- views/controls/native/native_view_host_win.cc (revision 0)
+++ views/controls/native/native_view_host_win.cc (working copy)
@@ -2,137 +2,134 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "views/controls/hwnd_view.h"
+#include "views/controls/native/native_view_host_win.h"
#include "app/gfx/canvas.h"
#include "base/logging.h"
+#include "views/controls/native/native_view_host.h"
#include "views/focus/focus_manager.h"
#include "views/widget/widget.h"
namespace views {
-static const char kViewClassName[] = "views/HWNDView";
+////////////////////////////////////////////////////////////////////////////////
+// NativeViewHostWin, public:
-HWNDView::HWNDView() : NativeViewHost() {
+NativeViewHostWin::NativeViewHostWin(NativeViewHost* host)
+ : host_(host),
+ installed_clip_(false) {
}
-HWNDView::~HWNDView() {
+NativeViewHostWin::~NativeViewHostWin() {
}
-void HWNDView::Attach(HWND hwnd) {
- DCHECK(native_view() == NULL);
- DCHECK(hwnd) << "Impossible detatched tab case; See crbug.com/6316";
+////////////////////////////////////////////////////////////////////////////////
+// NativeViewHostWin, NativeViewHostWrapper implementation:
- set_native_view(hwnd);
+void NativeViewHostWin::NativeViewAttached() {
+ DCHECK(host_->native_view())
+ << "Impossible detatched tab case; See crbug.com/6316";
// First hide the new window. We don't want anything to draw (like sub-hwnd
// borders), when we change the parent below.
- ShowWindow(hwnd, SW_HIDE);
+ ShowWindow(host_->native_view(), SW_HIDE);
// Need to set the HWND's parent before changing its size to avoid flashing.
- ::SetParent(hwnd, GetWidget()->GetNativeView());
- Layout();
+ SetParent(host_->native_view(), host_->GetWidget()->GetNativeView());
+ host_->Layout();
// Register with the focus manager so the associated view is focused when the
// native control gets the focus.
- FocusManager::InstallFocusSubclass(
- hwnd, associated_focus_view() ? associated_focus_view() : this);
+ View* focus_view = host_->focus_view() ? host_->focus_view() : host_;
+ FocusManager::InstallFocusSubclass(host_->native_view(), focus_view);
}
-void HWNDView::Detach() {
- DCHECK(native_view());
- FocusManager::UninstallFocusSubclass(native_view());
- set_native_view(NULL);
- set_installed_clip(false);
+void NativeViewHostWin::NativeViewDetaching() {
+ DCHECK(host_->native_view());
+ FocusManager::UninstallFocusSubclass(host_->native_view());
+ installed_clip_ = false;
}
-void HWNDView::Paint(gfx::Canvas* 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 HWND, and the HWND
- // 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 (installed_clip())
- canvas->FillRectInt(SkColorSetRGB(255, 255, 255), 0, 0, width(), height());
+void NativeViewHostWin::AddedToWidget() {
+ HWND parent_hwnd = GetParent(host_->native_view());
+ HWND widget_hwnd = host_->GetWidget()->GetNativeView();
+ if (parent_hwnd != widget_hwnd)
+ SetParent(host_->native_view(), widget_hwnd);
+ if (host_->IsVisibleInRootView())
+ ShowWindow(host_->native_view(), SW_SHOW);
+ else
+ ShowWindow(host_->native_view(), SW_HIDE);
+ host_->Layout();
}
-std::string HWNDView::GetClassName() const {
- return kViewClassName;
+void NativeViewHostWin::RemovedFromWidget() {
+ ShowWindow(host_->native_view(), SW_HIDE);
+ SetParent(host_->native_view(), NULL);
}
-void HWNDView::ViewHierarchyChanged(bool is_add, View *parent, View *child) {
- if (!native_view())
- return;
-
- Widget* widget = GetWidget();
- if (is_add && widget) {
- HWND parent_hwnd = ::GetParent(native_view());
- HWND widget_hwnd = widget->GetNativeView();
- if (parent_hwnd != widget_hwnd)
- ::SetParent(native_view(), widget_hwnd);
- if (IsVisibleInRootView())
- ::ShowWindow(native_view(), SW_SHOW);
- else
- ::ShowWindow(native_view(), SW_HIDE);
- Layout();
- } else if (!is_add) {
- ::ShowWindow(native_view(), SW_HIDE);
- ::SetParent(native_view(), NULL);
- }
-}
-
-void HWNDView::Focus() {
- ::SetFocus(native_view());
-}
-
-void HWNDView::InstallClip(int x, int y, int w, int h) {
+void NativeViewHostWin::InstallClip(int x, int y, int w, int h) {
HRGN clip_region = CreateRectRgn(x, y, x + w, y + h);
// NOTE: SetWindowRgn owns the region (as well as the deleting the
// current region), as such we don't delete the old region.
- SetWindowRgn(native_view(), clip_region, FALSE);
+ SetWindowRgn(host_->native_view(), clip_region, FALSE);
+ installed_clip_ = true;
}
-void HWNDView::UninstallClip() {
- SetWindowRgn(native_view(), 0, FALSE);
+bool NativeViewHostWin::HasInstalledClip() {
+ return installed_clip_;
}
-void HWNDView::ShowWidget(int x, int y, int w, int h) {
+void NativeViewHostWin::UninstallClip() {
+ SetWindowRgn(host_->native_view(), 0, FALSE);
+ installed_clip_ = false;
+}
+
+void NativeViewHostWin::ShowWidget(int x, int y, int w, int h) {
UINT swp_flags = SWP_DEFERERASE |
SWP_NOACTIVATE |
SWP_NOCOPYBITS |
SWP_NOOWNERZORDER |
SWP_NOZORDER;
// Only send the SHOWWINDOW flag if we're invisible, to avoid flashing.
- if (!::IsWindowVisible(native_view()))
+ if (!IsWindowVisible(host_->native_view()))
swp_flags = (swp_flags | SWP_SHOWWINDOW) & ~SWP_NOREDRAW;
- if (fast_resize()) {
+ if (host_->fast_resize()) {
// In a fast resize, we move the window and clip it with SetWindowRgn.
RECT win_rect;
- GetWindowRect(native_view(), &win_rect);
+ GetWindowRect(host_->native_view(), &win_rect);
gfx::Rect rect(win_rect);
- ::SetWindowPos(native_view(), 0, x, y, rect.width(), rect.height(),
- swp_flags);
+ SetWindowPos(host_->native_view(), 0, x, y, rect.width(), rect.height(),
+ swp_flags);
- HRGN clip_region = CreateRectRgn(0, 0, w, h);
- SetWindowRgn(native_view(), clip_region, FALSE);
- set_installed_clip(true);
+ InstallClip(0, 0, w, h);
} else {
- ::SetWindowPos(native_view(), 0, x, y, w, h, swp_flags);
+ SetWindowPos(host_->native_view(), 0, x, y, w, h, swp_flags);
}
}
-void HWNDView::HideWidget() {
- if (!::IsWindowVisible(native_view()))
+void NativeViewHostWin::HideWidget() {
+ if (!IsWindowVisible(host_->native_view()))
return; // Currently not visible, nothing to do.
// The window is currently visible, but its clipped by another view. Hide
// it.
- ::SetWindowPos(native_view(), 0, 0, 0, 0, 0,
- SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER |
- SWP_NOREDRAW | SWP_NOOWNERZORDER);
+ SetWindowPos(host_->native_view(), 0, 0, 0, 0, 0,
+ SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER |
+ SWP_NOREDRAW | SWP_NOOWNERZORDER);
}
+void NativeViewHostWin::SetFocus() {
+ ::SetFocus(host_->native_view());
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NativeViewHostWrapper, public:
+
+// static
+NativeViewHostWrapper* NativeViewHostWrapper::CreateWrapper(
+ NativeViewHost* host) {
+ return new NativeViewHostWin(host);
+}
+
} // namespace views
« no previous file with comments | « views/controls/native/native_view_host_win.h ('k') | views/controls/native/native_view_host_wrapper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698