diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-08 00:34:05 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-08 00:34:05 +0000 |
commit | 2362e4fe2905ab75d3230ebc3e307ae53e2b8362 (patch) | |
tree | e6d88357a2021811e0e354f618247217be8bb3da /views/view_win.cc | |
parent | db23ac3e713dc17509b2b15d3ee634968da45715 (diff) | |
download | chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.zip chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.gz chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.bz2 |
Move src/chrome/views to src/views. RS=darin http://crbug.com/11387
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/view_win.cc')
-rw-r--r-- | views/view_win.cc | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/views/view_win.cc b/views/view_win.cc new file mode 100644 index 0000000..6dfe183 --- /dev/null +++ b/views/view_win.cc @@ -0,0 +1,95 @@ +// Copyright (c) 2009 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/view.h" + +#include "app/drag_drop_types.h" +#include "app/gfx/chrome_canvas.h" +#include "app/gfx/path.h" +#include "app/os_exchange_data.h" +#include "base/scoped_handle.h" +#include "base/string_util.h" +#include "views/accessibility/view_accessibility_wrapper.h" +#include "views/border.h" +#include "views/widget/root_view.h" +#include "views/widget/widget.h" + +namespace views { + +FocusManager* View::GetFocusManager() { + Widget* widget = GetWidget(); + if (!widget) + return NULL; + + HWND hwnd = widget->GetNativeView(); + if (!hwnd) + return NULL; + + return FocusManager::GetFocusManager(hwnd); +} + +void View::DoDrag(const MouseEvent& e, int press_x, int press_y) { + int drag_operations = GetDragOperations(press_x, press_y); + if (drag_operations == DragDropTypes::DRAG_NONE) + return; + + scoped_refptr<OSExchangeData> data = new OSExchangeData; + WriteDragData(press_x, press_y, data.get()); + + // Message the RootView to do the drag and drop. That way if we're removed + // the RootView can detect it and avoid calling us back. + RootView* root_view = GetRootView(); + root_view->StartDragForViewFromMouseEvent(this, data, drag_operations); +} + +ViewAccessibilityWrapper* View::GetViewAccessibilityWrapper() { + if (accessibility_.get() == NULL) { + accessibility_.reset(new ViewAccessibilityWrapper(this)); + } + return accessibility_.get(); +} + +bool View::HitTest(const gfx::Point& l) const { + if (l.x() >= 0 && l.x() < static_cast<int>(width()) && + l.y() >= 0 && l.y() < static_cast<int>(height())) { + if (HasHitTestMask()) { + gfx::Path mask; + GetHitTestMask(&mask); + ScopedHRGN rgn(mask.CreateHRGN()); + return !!PtInRegion(rgn, l.x(), l.y()); + } + // No mask, but inside our bounds. + return true; + } + // Outside our bounds. + return false; +} + +HCURSOR View::GetCursorForPoint(Event::EventType event_type, int x, int y) { + return NULL; +} + +void View::Focus() { + // Set the native focus to the root view window so it receives the keyboard + // messages. + FocusManager* focus_manager = GetFocusManager(); + if (focus_manager) + focus_manager->FocusHWND(GetRootView()->GetWidget()->GetNativeView()); +} + +int View::GetHorizontalDragThreshold() { + static int threshold = -1; + if (threshold == -1) + threshold = GetSystemMetrics(SM_CXDRAG) / 2; + return threshold; +} + +int View::GetVerticalDragThreshold() { + static int threshold = -1; + if (threshold == -1) + threshold = GetSystemMetrics(SM_CYDRAG) / 2; + return threshold; +} + +} // namespace views |