bookmark_drop_info.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/bookmarks/bookmark_drop_info.h"
6
7#if defined(OS_WIN)
8#include <windows.h>
9#endif
10
11#include "base/basictypes.h"
12#include "views/event.h"
13#include "views/view_constants.h"
14
15BookmarkDropInfo::BookmarkDropInfo(gfx::NativeWindow wnd, int top_margin)
16    : source_operations_(0),
17      is_control_down_(false),
18      last_y_(0),
19      drop_operation_(0),
20      wnd_(wnd),
21      top_margin_(top_margin),
22      scroll_up_(false) {
23}
24
25void BookmarkDropInfo::Update(const views::DropTargetEvent& event) {
26  source_operations_ = event.GetSourceOperations();
27  is_control_down_ = event.IsControlDown();
28  last_y_ = event.y();
29
30#if defined(OS_WIN)
31  RECT client_rect;
32  GetClientRect(wnd_, &client_rect);
33  bool scroll_down = (last_y_ >= client_rect.bottom - views::kAutoscrollSize);
34#else
35  // TODO(port): Get the dimensions of the appropriate view/widget.
36  NOTIMPLEMENTED();
37  bool scroll_down = false;
38#endif
39  scroll_up_ = (last_y_ <= top_margin_ + views::kAutoscrollSize);
40  if (scroll_up_ || scroll_down) {
41    if (!scroll_timer_.IsRunning()) {
42      scroll_timer_.Start(
43          base::TimeDelta::FromMilliseconds(views::kAutoscrollRowTimerMS),
44          this,
45          &BookmarkDropInfo::Scroll);
46    }
47  } else {
48    scroll_timer_.Stop();
49  }
50}
51
52void BookmarkDropInfo::Scroll() {
53#if defined(OS_WIN)
54  SendMessage(wnd_, WM_VSCROLL, scroll_up_ ? SB_LINEUP : SB_LINEDOWN, NULL);
55  Scrolled();
56#else
57  // TODO(port): Scroll the appropriate view/widget.
58  NOTIMPLEMENTED();
59#endif
60}
61