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