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

Unified Diff: ui/base/win/hwnd_subclass.cc

Issue 860873002: Continue deleting code in ui/. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: 2015 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/base/win/hwnd_subclass.h ('k') | ui/base/win/hwnd_subclass_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/win/hwnd_subclass.cc
diff --git a/ui/base/win/hwnd_subclass.cc b/ui/base/win/hwnd_subclass.cc
deleted file mode 100644
index 8628a7c2e8ba0cbff3fcb029f5ed3479a9ed9057..0000000000000000000000000000000000000000
--- a/ui/base/win/hwnd_subclass.cc
+++ /dev/null
@@ -1,170 +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/base/win/hwnd_subclass.h"
-
-#include <algorithm>
-
-#include "base/logging.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/singleton.h"
-#include "ui/gfx/win/dpi.h"
-#include "ui/gfx/win/hwnd_util.h"
-
-namespace {
-const char kHWNDSubclassKey[] = "__UI_BASE_WIN_HWND_SUBCLASS_PROC__";
-
-LRESULT CALLBACK WndProc(HWND hwnd,
- UINT message,
- WPARAM w_param,
- LPARAM l_param) {
- ui::HWNDSubclass* wrapped_wnd_proc =
- reinterpret_cast<ui::HWNDSubclass*>(
- ui::ViewProp::GetValue(hwnd, kHWNDSubclassKey));
- return wrapped_wnd_proc ? wrapped_wnd_proc->OnWndProc(hwnd,
- message,
- w_param,
- l_param)
- : DefWindowProc(hwnd, message, w_param, l_param);
-}
-
-WNDPROC GetCurrentWndProc(HWND target) {
- return reinterpret_cast<WNDPROC>(GetWindowLongPtr(target, GWLP_WNDPROC));
-}
-
-// Not defined before Win7
-BOOL GetTouchInputInfoWrapper(HTOUCHINPUT handle, UINT count,
- PTOUCHINPUT pointer, int size) {
- typedef BOOL(WINAPI *GetTouchInputInfoPtr)(HTOUCHINPUT, UINT,
- PTOUCHINPUT, int);
- GetTouchInputInfoPtr get_touch_input_info_func =
- reinterpret_cast<GetTouchInputInfoPtr>(
- GetProcAddress(GetModuleHandleA("user32.dll"), "GetTouchInputInfo"));
- if (get_touch_input_info_func)
- return get_touch_input_info_func(handle, count, pointer, size);
- return FALSE;
-}
-
-} // namespace
-
-namespace ui {
-
-// Singleton factory that creates and manages the lifetime of all
-// ui::HWNDSubclass objects.
-class HWNDSubclass::HWNDSubclassFactory {
- public:
- static HWNDSubclassFactory* GetInstance() {
- return Singleton<HWNDSubclassFactory,
- LeakySingletonTraits<HWNDSubclassFactory> >::get();
- }
-
- // Returns a non-null HWNDSubclass corresponding to the HWND |target|. Creates
- // one if none exists. Retains ownership of the returned pointer.
- HWNDSubclass* GetHwndSubclassForTarget(HWND target) {
- DCHECK(target);
- HWNDSubclass* subclass = reinterpret_cast<HWNDSubclass*>(
- ui::ViewProp::GetValue(target, kHWNDSubclassKey));
- if (!subclass) {
- subclass = new ui::HWNDSubclass(target);
- hwnd_subclasses_.push_back(subclass);
- }
- return subclass;
- }
-
- const ScopedVector<HWNDSubclass>& hwnd_subclasses() {
- return hwnd_subclasses_;
- }
-
- private:
- friend struct DefaultSingletonTraits<HWNDSubclassFactory>;
-
- HWNDSubclassFactory() {}
-
- ScopedVector<HWNDSubclass> hwnd_subclasses_;
-
- DISALLOW_COPY_AND_ASSIGN(HWNDSubclassFactory);
-};
-
-// static
-void HWNDSubclass::AddFilterToTarget(HWND target, HWNDMessageFilter* filter) {
- HWNDSubclassFactory::GetInstance()->GetHwndSubclassForTarget(
- target)->AddFilter(filter);
-}
-
-// static
-void HWNDSubclass::RemoveFilterFromAllTargets(HWNDMessageFilter* filter) {
- HWNDSubclassFactory* factory = HWNDSubclassFactory::GetInstance();
- ScopedVector<ui::HWNDSubclass>::const_iterator it;
- for (it = factory->hwnd_subclasses().begin();
- it != factory->hwnd_subclasses().end(); ++it)
- (*it)->RemoveFilter(filter);
-}
-
-// static
-HWNDSubclass* HWNDSubclass::GetHwndSubclassForTarget(HWND target) {
- return HWNDSubclassFactory::GetInstance()->GetHwndSubclassForTarget(target);
-}
-
-void HWNDSubclass::AddFilter(HWNDMessageFilter* filter) {
- DCHECK(filter);
- if (std::find(filters_.begin(), filters_.end(), filter) == filters_.end())
- filters_.push_back(filter);
-}
-
-void HWNDSubclass::RemoveFilter(HWNDMessageFilter* filter) {
- std::vector<HWNDMessageFilter*>::iterator it =
- std::find(filters_.begin(), filters_.end(), filter);
- if (it != filters_.end())
- filters_.erase(it);
-}
-
-HWNDSubclass::HWNDSubclass(HWND target)
- : target_(target),
- original_wnd_proc_(GetCurrentWndProc(target)),
- prop_(target, kHWNDSubclassKey, this) {
- gfx::SetWindowProc(target_, &WndProc);
-}
-
-HWNDSubclass::~HWNDSubclass() {
-}
-
-LRESULT HWNDSubclass::OnWndProc(HWND hwnd,
- UINT message,
- WPARAM w_param,
- LPARAM l_param) {
-
- // Touch messages are always passed in screen coordinates. If the OS is
- // scaled, but the app is not DPI aware, then then WM_TOUCH might be
- // intended for a different window.
- if (message == WM_TOUCH) {
- TOUCHINPUT point;
-
- if (GetTouchInputInfoWrapper(reinterpret_cast<HTOUCHINPUT>(l_param), 1,
- &point, sizeof(TOUCHINPUT))) {
- POINT touch_location = {TOUCH_COORD_TO_PIXEL(point.x),
- TOUCH_COORD_TO_PIXEL(point.y)};
- HWND actual_target = WindowFromPoint(touch_location);
- if (actual_target != hwnd) {
- return SendMessage(actual_target, message, w_param, l_param);
- }
- }
- }
-
- for (std::vector<HWNDMessageFilter*>::iterator it = filters_.begin();
- it != filters_.end(); ++it) {
- LRESULT l_result = 0;
- if ((*it)->FilterMessage(hwnd, message, w_param, l_param, &l_result))
- return l_result;
- }
-
- // In most cases, |original_wnd_proc_| will take care of calling
- // DefWindowProc.
- return CallWindowProc(original_wnd_proc_, hwnd, message, w_param, l_param);
-}
-
-HWNDMessageFilter::~HWNDMessageFilter() {
- HWNDSubclass::RemoveFilterFromAllTargets(this);
-}
-
-} // namespace ui
« no previous file with comments | « ui/base/win/hwnd_subclass.h ('k') | ui/base/win/hwnd_subclass_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698