Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(801)

Side by Side Diff: ash/magnifier/magnification_controller.cc

Issue 1155013005: Refactoring the ownership of ui::InputMethod. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed bot failure: cast_shell_linux Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 "ash/magnifier/magnification_controller.h" 5 #include "ash/magnifier/magnification_controller.h"
6 6
7 #include "ash/accelerators/accelerator_controller.h" 7 #include "ash/accelerators/accelerator_controller.h"
8 #include "ash/accessibility_delegate.h" 8 #include "ash/accessibility_delegate.h"
9 #include "ash/ash_switches.h" 9 #include "ash/ash_switches.h"
10 #include "ash/display/root_window_transformers.h" 10 #include "ash/display/root_window_transformers.h"
11 #include "ash/host/ash_window_tree_host.h" 11 #include "ash/host/ash_window_tree_host.h"
12 #include "ash/host/root_window_transformer.h" 12 #include "ash/host/root_window_transformer.h"
13 #include "ash/root_window_controller.h" 13 #include "ash/root_window_controller.h"
14 #include "ash/screen_util.h" 14 #include "ash/screen_util.h"
15 #include "ash/shell.h" 15 #include "ash/shell.h"
16 #include "ash/system/tray/system_tray_delegate.h" 16 #include "ash/system/tray/system_tray_delegate.h"
17 #include "base/command_line.h" 17 #include "base/command_line.h"
18 #include "base/synchronization/waitable_event.h" 18 #include "base/synchronization/waitable_event.h"
19 #include "base/timer/timer.h" 19 #include "base/timer/timer.h"
20 #include "ui/aura/client/aura_constants.h"
21 #include "ui/aura/client/cursor_client.h" 20 #include "ui/aura/client/cursor_client.h"
22 #include "ui/aura/window.h" 21 #include "ui/aura/window.h"
23 #include "ui/aura/window_tree_host.h" 22 #include "ui/aura/window_tree_host.h"
24 #include "ui/base/ime/input_method.h" 23 #include "ui/base/ime/input_method.h"
25 #include "ui/base/ime/input_method_observer.h" 24 #include "ui/base/ime/input_method_observer.h"
26 #include "ui/base/ime/text_input_client.h" 25 #include "ui/base/ime/text_input_client.h"
27 #include "ui/compositor/dip_util.h" 26 #include "ui/compositor/dip_util.h"
28 #include "ui/compositor/layer.h" 27 #include "ui/compositor/layer.h"
29 #include "ui/compositor/layer_animation_observer.h" 28 #include "ui/compositor/layer_animation_observer.h"
30 #include "ui/compositor/scoped_layer_animation_settings.h" 29 #include "ui/compositor/scoped_layer_animation_settings.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 // |kCaretPanningMargin| from the edge, the view-port moves. 67 // |kCaretPanningMargin| from the edge, the view-port moves.
69 const int kCaretPanningMargin = 50; 68 const int kCaretPanningMargin = 50;
70 69
71 void MoveCursorTo(aura::WindowTreeHost* host, const gfx::Point& root_location) { 70 void MoveCursorTo(aura::WindowTreeHost* host, const gfx::Point& root_location) {
72 gfx::Point3F host_location_3f(root_location); 71 gfx::Point3F host_location_3f(root_location);
73 host->GetRootTransform().TransformPoint(&host_location_3f); 72 host->GetRootTransform().TransformPoint(&host_location_3f);
74 host->MoveCursorToHostLocation( 73 host->MoveCursorToHostLocation(
75 gfx::ToCeiledPoint(host_location_3f.AsPointF())); 74 gfx::ToCeiledPoint(host_location_3f.AsPointF()));
76 } 75 }
77 76
77 ui::InputMethod* GetInputMethod(aura::Window* root_window) {
78 if (root_window->GetHost())
79 return root_window->GetHost()->GetInputMethod();
80 return nullptr;
81 }
82
78 } // namespace 83 } // namespace
79 84
80 namespace ash { 85 namespace ash {
81 86
82 //////////////////////////////////////////////////////////////////////////////// 87 ////////////////////////////////////////////////////////////////////////////////
83 // MagnificationControllerImpl: 88 // MagnificationControllerImpl:
84 89
85 class MagnificationControllerImpl : virtual public MagnificationController, 90 class MagnificationControllerImpl : virtual public MagnificationController,
86 public ui::EventHandler, 91 public ui::EventHandler,
87 public ui::ImplicitAnimationObserver, 92 public ui::ImplicitAnimationObserver,
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 // Stores the last mouse cursor (or last touched) location. This value is 240 // Stores the last mouse cursor (or last touched) location. This value is
236 // used on zooming to keep this location visible. 241 // used on zooming to keep this location visible.
237 gfx::Point point_of_interest_; 242 gfx::Point point_of_interest_;
238 243
239 // Current scale, origin (left-top) position of the magnification window. 244 // Current scale, origin (left-top) position of the magnification window.
240 float scale_; 245 float scale_;
241 gfx::PointF origin_; 246 gfx::PointF origin_;
242 247
243 ScrollDirection scroll_direction_; 248 ScrollDirection scroll_direction_;
244 249
245 ui::InputMethod* input_method_; // Not owned.
246
247 // Timer for moving magnifier window when it fires. 250 // Timer for moving magnifier window when it fires.
248 base::OneShotTimer<MagnificationControllerImpl> move_magnifier_timer_; 251 base::OneShotTimer<MagnificationControllerImpl> move_magnifier_timer_;
249 252
250 // Most recent caret position in |root_window_| coordinates. 253 // Most recent caret position in |root_window_| coordinates.
251 gfx::Point caret_point_; 254 gfx::Point caret_point_;
252 255
253 // Flag for disabling moving magnifier delay. It can only be true in testing 256 // Flag for disabling moving magnifier delay. It can only be true in testing
254 // mode. 257 // mode.
255 bool disable_move_magnifier_delay_; 258 bool disable_move_magnifier_delay_;
256 259
257 DISALLOW_COPY_AND_ASSIGN(MagnificationControllerImpl); 260 DISALLOW_COPY_AND_ASSIGN(MagnificationControllerImpl);
258 }; 261 };
259 262
260 //////////////////////////////////////////////////////////////////////////////// 263 ////////////////////////////////////////////////////////////////////////////////
261 // MagnificationControllerImpl: 264 // MagnificationControllerImpl:
262 265
263 MagnificationControllerImpl::MagnificationControllerImpl() 266 MagnificationControllerImpl::MagnificationControllerImpl()
264 : root_window_(Shell::GetPrimaryRootWindow()), 267 : root_window_(Shell::GetPrimaryRootWindow()),
265 is_on_animation_(false), 268 is_on_animation_(false),
266 is_enabled_(false), 269 is_enabled_(false),
267 keep_focus_centered_(false), 270 keep_focus_centered_(false),
268 move_cursor_after_animation_(false), 271 move_cursor_after_animation_(false),
269 scale_(kNonMagnifiedScale), 272 scale_(kNonMagnifiedScale),
270 scroll_direction_(SCROLL_NONE), 273 scroll_direction_(SCROLL_NONE),
271 input_method_(NULL),
272 disable_move_magnifier_delay_(false) { 274 disable_move_magnifier_delay_(false) {
273 Shell::GetInstance()->AddPreTargetHandler(this); 275 Shell::GetInstance()->AddPreTargetHandler(this);
274 root_window_->AddObserver(this); 276 root_window_->AddObserver(this);
275 point_of_interest_ = root_window_->bounds().CenterPoint(); 277 point_of_interest_ = root_window_->bounds().CenterPoint();
276 } 278 }
277 279
278 MagnificationControllerImpl::~MagnificationControllerImpl() { 280 MagnificationControllerImpl::~MagnificationControllerImpl() {
279 if (input_method_) 281 ui::InputMethod* input_method = GetInputMethod(root_window_);
280 input_method_->RemoveObserver(this); 282 if (input_method)
283 input_method->RemoveObserver(this);
281 284
282 root_window_->RemoveObserver(this); 285 root_window_->RemoveObserver(this);
283 286
284 Shell::GetInstance()->RemovePreTargetHandler(this); 287 Shell::GetInstance()->RemovePreTargetHandler(this);
285 } 288 }
286 289
287 void MagnificationControllerImpl::RedrawKeepingMousePosition( 290 void MagnificationControllerImpl::RedrawKeepingMousePosition(
288 float scale, bool animate) { 291 float scale, bool animate) {
289 gfx::Point mouse_in_root = point_of_interest_; 292 gfx::Point mouse_in_root = point_of_interest_;
290 293
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 } 580 }
578 581
579 void MagnificationControllerImpl::SetScrollDirection( 582 void MagnificationControllerImpl::SetScrollDirection(
580 ScrollDirection direction) { 583 ScrollDirection direction) {
581 scroll_direction_ = direction; 584 scroll_direction_ = direction;
582 StartOrStopScrollIfNecessary(); 585 StartOrStopScrollIfNecessary();
583 } 586 }
584 587
585 void MagnificationControllerImpl::SetEnabled(bool enabled) { 588 void MagnificationControllerImpl::SetEnabled(bool enabled) {
586 Shell* shell = Shell::GetInstance(); 589 Shell* shell = Shell::GetInstance();
590 ui::InputMethod* input_method = GetInputMethod(root_window_);
587 if (enabled) { 591 if (enabled) {
588 if (!input_method_) { 592 if (!is_enabled_ && input_method)
589 input_method_ = 593 input_method->AddObserver(this);
590 root_window_->GetProperty(aura::client::kRootWindowInputMethodKey);
591 if (input_method_)
592 input_method_->AddObserver(this);
593 }
594 594
595 float scale = 595 float scale =
596 Shell::GetInstance()->accessibility_delegate()-> 596 Shell::GetInstance()->accessibility_delegate()->
597 GetSavedScreenMagnifierScale(); 597 GetSavedScreenMagnifierScale();
598 if (scale <= 0.0f) 598 if (scale <= 0.0f)
599 scale = kInitialMagnifiedScale; 599 scale = kInitialMagnifiedScale;
600 ValidateScale(&scale); 600 ValidateScale(&scale);
601 601
602 // Do nothing, if already enabled with same scale. 602 // Do nothing, if already enabled with same scale.
603 if (is_enabled_ && scale == scale_) 603 if (is_enabled_ && scale == scale_)
604 return; 604 return;
605 605
606 is_enabled_ = enabled; 606 is_enabled_ = enabled;
607 RedrawKeepingMousePosition(scale, true); 607 RedrawKeepingMousePosition(scale, true);
608 shell->accessibility_delegate()->SaveScreenMagnifierScale(scale); 608 shell->accessibility_delegate()->SaveScreenMagnifierScale(scale);
609 } else { 609 } else {
610 // Do nothing, if already disabled. 610 // Do nothing, if already disabled.
611 if (!is_enabled_) 611 if (!is_enabled_)
612 return; 612 return;
613 613
614 if (input_method_) { 614 if (input_method)
615 input_method_->RemoveObserver(this); 615 input_method->RemoveObserver(this);
616 input_method_ = NULL;
617 }
618 616
619 RedrawKeepingMousePosition(kNonMagnifiedScale, true); 617 RedrawKeepingMousePosition(kNonMagnifiedScale, true);
620 is_enabled_ = enabled; 618 is_enabled_ = enabled;
621 } 619 }
622 } 620 }
623 621
624 bool MagnificationControllerImpl::IsEnabled() const { 622 bool MagnificationControllerImpl::IsEnabled() const {
625 return is_enabled_; 623 return is_enabled_;
626 } 624 }
627 625
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 846
849 //////////////////////////////////////////////////////////////////////////////// 847 ////////////////////////////////////////////////////////////////////////////////
850 // MagnificationController: 848 // MagnificationController:
851 849
852 // static 850 // static
853 MagnificationController* MagnificationController::CreateInstance() { 851 MagnificationController* MagnificationController::CreateInstance() {
854 return new MagnificationControllerImpl(); 852 return new MagnificationControllerImpl();
855 } 853 }
856 854
857 } // namespace ash 855 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698