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/events/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 25BookmarkDropInfo::~BookmarkDropInfo() { 26} 27 28void BookmarkDropInfo::Update(const views::DropTargetEvent& event) { 29 source_operations_ = event.source_operations(); 30 is_control_down_ = event.IsControlDown(); 31 last_y_ = event.y(); 32 33#if defined(OS_WIN) 34 RECT client_rect; 35 GetClientRect(wnd_, &client_rect); 36 bool scroll_down = (last_y_ >= client_rect.bottom - views::kAutoscrollSize); 37#else 38 // TODO(port): Get the dimensions of the appropriate view/widget. 39 NOTIMPLEMENTED(); 40 bool scroll_down = false; 41#endif 42 scroll_up_ = (last_y_ <= top_margin_ + views::kAutoscrollSize); 43 if (scroll_up_ || scroll_down) { 44 if (!scroll_timer_.IsRunning()) { 45 scroll_timer_.Start( 46 base::TimeDelta::FromMilliseconds(views::kAutoscrollRowTimerMS), 47 this, 48 &BookmarkDropInfo::Scroll); 49 } 50 } else { 51 scroll_timer_.Stop(); 52 } 53} 54 55void BookmarkDropInfo::Scroll() { 56#if defined(OS_WIN) 57 SendMessage(wnd_, WM_VSCROLL, scroll_up_ ? SB_LINEUP : SB_LINEDOWN, NULL); 58 Scrolled(); 59#else 60 // TODO(port): Scroll the appropriate view/widget. 61 NOTIMPLEMENTED(); 62#endif 63} 64