OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/touchui/touch_selection_controller_impl.h" | 5 #include "ui/views/touchui/touch_selection_controller_impl.h" |
6 | 6 |
7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
8 #include "ui/aura/client/cursor_client.h" | 8 #include "ui/aura/client/cursor_client.h" |
9 #include "ui/aura/env.h" | 9 #include "ui/aura/env.h" |
10 #include "ui/aura/window.h" | 10 #include "ui/aura/window.h" |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 : client_view_(client_view), | 320 : client_view_(client_view), |
321 client_widget_(NULL), | 321 client_widget_(NULL), |
322 selection_handle_1_(new EditingHandleView(this, | 322 selection_handle_1_(new EditingHandleView(this, |
323 client_view->GetNativeView())), | 323 client_view->GetNativeView())), |
324 selection_handle_2_(new EditingHandleView(this, | 324 selection_handle_2_(new EditingHandleView(this, |
325 client_view->GetNativeView())), | 325 client_view->GetNativeView())), |
326 cursor_handle_(new EditingHandleView(this, | 326 cursor_handle_(new EditingHandleView(this, |
327 client_view->GetNativeView())), | 327 client_view->GetNativeView())), |
328 context_menu_(NULL), | 328 context_menu_(NULL), |
329 dragging_handle_(NULL) { | 329 dragging_handle_(NULL) { |
330 client_widget_ = Widget::GetTopLevelWidgetForNativeView( | 330 aura::Window* client_window = client_view_->GetNativeView(); |
331 client_view_->GetNativeView()); | 331 client_window->AddObserver(this); |
| 332 client_widget_ = Widget::GetTopLevelWidgetForNativeView(client_window); |
332 if (client_widget_) | 333 if (client_widget_) |
333 client_widget_->AddObserver(this); | 334 client_widget_->AddObserver(this); |
334 aura::Env::GetInstance()->AddPreTargetHandler(this); | 335 aura::Env::GetInstance()->AddPreTargetHandler(this); |
335 } | 336 } |
336 | 337 |
337 TouchSelectionControllerImpl::~TouchSelectionControllerImpl() { | 338 TouchSelectionControllerImpl::~TouchSelectionControllerImpl() { |
338 HideContextMenu(); | 339 HideContextMenu(); |
339 aura::Env::GetInstance()->RemovePreTargetHandler(this); | 340 aura::Env::GetInstance()->RemovePreTargetHandler(this); |
340 if (client_widget_) | 341 if (client_widget_) |
341 client_widget_->RemoveObserver(this); | 342 client_widget_->RemoveObserver(this); |
| 343 client_view_->GetNativeView()->RemoveObserver(this); |
342 } | 344 } |
343 | 345 |
344 void TouchSelectionControllerImpl::SelectionChanged() { | 346 void TouchSelectionControllerImpl::SelectionChanged() { |
345 gfx::Rect r1, r2; | 347 gfx::Rect r1, r2; |
346 client_view_->GetSelectionEndPoints(&r1, &r2); | 348 client_view_->GetSelectionEndPoints(&r1, &r2); |
347 gfx::Rect screen_rect_1 = ConvertToScreen(client_view_, r1); | 349 gfx::Rect screen_rect_1 = ConvertToScreen(client_view_, r1); |
348 gfx::Rect screen_rect_2 = ConvertToScreen(client_view_, r2); | 350 gfx::Rect screen_rect_2 = ConvertToScreen(client_view_, r2); |
349 gfx::Rect client_bounds = client_view_->GetBounds(); | 351 gfx::Rect client_bounds = client_view_->GetBounds(); |
350 if (r1.y() < client_bounds.y()) | 352 if (r1.y() < client_bounds.y()) |
351 r1.Inset(0, client_bounds.y() - r1.y(), 0, 0); | 353 r1.Inset(0, client_bounds.y() - r1.y(), 0, 0); |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 const gfx::Point anchor(rect.CenterPoint().x(), rect.y()); | 504 const gfx::Point anchor(rect.CenterPoint().x(), rect.y()); |
503 HideContextMenu(); | 505 HideContextMenu(); |
504 client_view_->OpenContextMenu(anchor); | 506 client_view_->OpenContextMenu(anchor); |
505 } | 507 } |
506 | 508 |
507 void TouchSelectionControllerImpl::OnMenuClosed(TouchEditingMenuView* menu) { | 509 void TouchSelectionControllerImpl::OnMenuClosed(TouchEditingMenuView* menu) { |
508 if (menu == context_menu_) | 510 if (menu == context_menu_) |
509 context_menu_ = NULL; | 511 context_menu_ = NULL; |
510 } | 512 } |
511 | 513 |
| 514 void TouchSelectionControllerImpl::OnAncestorWindowTransformed( |
| 515 aura::Window* window, |
| 516 aura::Window* ancestor) { |
| 517 client_view_->DestroyTouchSelection(); |
| 518 } |
| 519 |
512 void TouchSelectionControllerImpl::OnWidgetClosing(Widget* widget) { | 520 void TouchSelectionControllerImpl::OnWidgetClosing(Widget* widget) { |
513 DCHECK_EQ(client_widget_, widget); | 521 DCHECK_EQ(client_widget_, widget); |
514 client_widget_ = NULL; | 522 client_widget_ = NULL; |
515 } | 523 } |
516 | 524 |
517 void TouchSelectionControllerImpl::OnWidgetBoundsChanged( | 525 void TouchSelectionControllerImpl::OnWidgetBoundsChanged( |
518 Widget* widget, | 526 Widget* widget, |
519 const gfx::Rect& new_bounds) { | 527 const gfx::Rect& new_bounds) { |
520 DCHECK_EQ(client_widget_, widget); | 528 DCHECK_EQ(client_widget_, widget); |
521 SelectionChanged(); | 529 SelectionChanged(); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
617 | 625 |
618 bool TouchSelectionControllerImpl::IsSelectionHandle2Visible() { | 626 bool TouchSelectionControllerImpl::IsSelectionHandle2Visible() { |
619 return selection_handle_2_->IsWidgetVisible(); | 627 return selection_handle_2_->IsWidgetVisible(); |
620 } | 628 } |
621 | 629 |
622 bool TouchSelectionControllerImpl::IsCursorHandleVisible() { | 630 bool TouchSelectionControllerImpl::IsCursorHandleVisible() { |
623 return cursor_handle_->IsWidgetVisible(); | 631 return cursor_handle_->IsWidgetVisible(); |
624 } | 632 } |
625 | 633 |
626 } // namespace views | 634 } // namespace views |
OLD | NEW |