resize_area.cc revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
1// Copyright (c) 2012 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 "ui/views/controls/resize_area.h" 6 7#include "base/logging.h" 8#include "ui/base/accessibility/accessible_view_state.h" 9#include "ui/base/resource/resource_bundle.h" 10#include "ui/views/controls/resize_area_delegate.h" 11 12#if defined(USE_AURA) 13#include "ui/base/cursor/cursor.h" 14#endif 15 16namespace views { 17 18const char ResizeArea::kViewClassName[] = "ResizeArea"; 19 20//////////////////////////////////////////////////////////////////////////////// 21// ResizeArea 22 23ResizeArea::ResizeArea(ResizeAreaDelegate* delegate) 24 : delegate_(delegate), 25 initial_position_(0) { 26} 27 28ResizeArea::~ResizeArea() { 29} 30 31const char* ResizeArea::GetClassName() const { 32 return kViewClassName; 33} 34 35gfx::NativeCursor ResizeArea::GetCursor(const ui::MouseEvent& event) { 36 if (!enabled()) 37 return gfx::kNullCursor; 38#if defined(USE_AURA) 39 return ui::kCursorEastWestResize; 40#elif defined(OS_WIN) 41 static HCURSOR g_resize_cursor = LoadCursor(NULL, IDC_SIZEWE); 42 return g_resize_cursor; 43#endif 44} 45 46bool ResizeArea::OnMousePressed(const ui::MouseEvent& event) { 47 if (!event.IsOnlyLeftMouseButton()) 48 return false; 49 50 // The resize area obviously will move once you start dragging so we need to 51 // convert coordinates to screen coordinates so that we don't lose our 52 // bearings. 53 gfx::Point point(event.x(), 0); 54 View::ConvertPointToScreen(this, &point); 55 initial_position_ = point.x(); 56 57 return true; 58} 59 60bool ResizeArea::OnMouseDragged(const ui::MouseEvent& event) { 61 if (!event.IsLeftMouseButton()) 62 return false; 63 64 ReportResizeAmount(event.x(), false); 65 return true; 66} 67 68void ResizeArea::OnMouseReleased(const ui::MouseEvent& event) { 69 ReportResizeAmount(event.x(), true); 70} 71 72void ResizeArea::OnMouseCaptureLost() { 73 ReportResizeAmount(initial_position_, true); 74} 75 76void ResizeArea::GetAccessibleState(ui::AccessibleViewState* state) { 77 state->role = ui::AccessibilityTypes::ROLE_SEPARATOR; 78} 79 80void ResizeArea::ReportResizeAmount(int resize_amount, bool last_update) { 81 gfx::Point point(resize_amount, 0); 82 View::ConvertPointToScreen(this, &point); 83 resize_amount = point.x() - initial_position_; 84 delegate_->OnResize(base::i18n::IsRTL() ? -resize_amount : resize_amount, 85 last_update); 86} 87 88} // namespace views 89