diff options
author | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-04 19:29:08 +0000 |
---|---|---|
committer | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-04 19:29:08 +0000 |
commit | f28cbb7246977eb443650f7d2fc9675b573317b2 (patch) | |
tree | dda1262734dd45010df771821e869b687b9d1b6a /chrome/browser/bookmarks/bookmark_drop_info.cc | |
parent | 431c16ea953a80b9153ba9a8c0b17b07a96f4a24 (diff) | |
download | chromium_src-f28cbb7246977eb443650f7d2fc9675b573317b2.zip chromium_src-f28cbb7246977eb443650f7d2fc9675b573317b2.tar.gz chromium_src-f28cbb7246977eb443650f7d2fc9675b573317b2.tar.bz2 |
Adds support for autoscrolling on drag to bookmark tree/table.
BUG=674
TEST=none
Review URL: http://codereview.chromium.org/9042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4625 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/bookmarks/bookmark_drop_info.cc')
-rw-r--r-- | chrome/browser/bookmarks/bookmark_drop_info.cc | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/chrome/browser/bookmarks/bookmark_drop_info.cc b/chrome/browser/bookmarks/bookmark_drop_info.cc new file mode 100644 index 0000000..646b35b --- /dev/null +++ b/chrome/browser/bookmarks/bookmark_drop_info.cc @@ -0,0 +1,44 @@ +// Copyright (c) 2006-2008 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 "chrome/browser/bookmarks/bookmark_drop_info.h" + +#include "chrome/views/event.h" +#include "chrome/views/view_constants.h" + +BookmarkDropInfo::BookmarkDropInfo(HWND hwnd, int top_margin) + : source_operations_(0), + is_control_down_(false), + last_y_(0), + drop_operation_(0), + hwnd_(hwnd), + top_margin_(top_margin), + scroll_up_(false) { +} + +void BookmarkDropInfo::Update(const views::DropTargetEvent& event) { + source_operations_ = event.GetSourceOperations(); + is_control_down_ = event.IsControlDown(); + last_y_ = event.y(); + + RECT client_rect; + GetClientRect(hwnd_, &client_rect); + scroll_up_ = (last_y_ <= top_margin_ + views::kAutoscrollSize); + bool scroll_down = (last_y_ >= client_rect.bottom - views::kAutoscrollSize); + if (scroll_up_ || scroll_down) { + if (!scroll_timer_.IsRunning()) { + scroll_timer_.Start( + base::TimeDelta::FromMilliseconds(views::kAutoscrollRowTimerMS), + this, + &BookmarkDropInfo::Scroll); + } + } else { + scroll_timer_.Stop(); + } +} + +void BookmarkDropInfo::Scroll() { + SendMessage(hwnd_, WM_VSCROLL, scroll_up_ ? SB_LINEUP : SB_LINEDOWN, NULL); + Scrolled(); +} |