OLD | NEW |
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 "ui/aura/root_window.h" | 5 #include "ui/aura/root_window.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 Env::GetInstance()->set_last_mouse_location(location_in_screen); | 78 Env::GetInstance()->set_last_mouse_location(location_in_screen); |
79 } else { | 79 } else { |
80 Env::GetInstance()->set_last_mouse_location(location_in_root); | 80 Env::GetInstance()->set_last_mouse_location(location_in_root); |
81 } | 81 } |
82 } | 82 } |
83 | 83 |
84 RootWindowHost* CreateHost(RootWindow* root_window, | 84 RootWindowHost* CreateHost(RootWindow* root_window, |
85 const RootWindow::CreateParams& params) { | 85 const RootWindow::CreateParams& params) { |
86 RootWindowHost* host = params.host ? | 86 RootWindowHost* host = params.host ? |
87 params.host : RootWindowHost::Create(params.initial_bounds); | 87 params.host : RootWindowHost::Create(params.initial_bounds); |
88 host->SetDelegate(root_window); | 88 host->set_delegate(root_window); |
89 return host; | 89 return host; |
90 } | 90 } |
91 | 91 |
92 class SimpleRootWindowTransformer : public RootWindowTransformer { | 92 class SimpleRootWindowTransformer : public RootWindowTransformer { |
93 public: | 93 public: |
94 SimpleRootWindowTransformer(const Window* root_window, | 94 SimpleRootWindowTransformer(const Window* root_window, |
95 const gfx::Transform& transform) | 95 const gfx::Transform& transform) |
96 : root_window_(root_window), | 96 : root_window_(root_window), |
97 transform_(transform) { | 97 transform_(transform) { |
98 } | 98 } |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 ui::ViewProp::GetValue(widget, kRootWindowForAcceleratedWidget)); | 196 ui::ViewProp::GetValue(widget, kRootWindowForAcceleratedWidget)); |
197 } | 197 } |
198 | 198 |
199 void RootWindow::Init() { | 199 void RootWindow::Init() { |
200 compositor()->SetScaleAndSize(GetDeviceScaleFactorFromDisplay(window()), | 200 compositor()->SetScaleAndSize(GetDeviceScaleFactorFromDisplay(window()), |
201 host_->GetBounds().size()); | 201 host_->GetBounds().size()); |
202 window()->Init(ui::LAYER_NOT_DRAWN); | 202 window()->Init(ui::LAYER_NOT_DRAWN); |
203 compositor()->SetRootLayer(window()->layer()); | 203 compositor()->SetRootLayer(window()->layer()); |
204 transformer_.reset( | 204 transformer_.reset( |
205 new SimpleRootWindowTransformer(window(), gfx::Transform())); | 205 new SimpleRootWindowTransformer(window(), gfx::Transform())); |
206 UpdateRootWindowSize(GetHostSize()); | 206 UpdateRootWindowSize(host_->GetBounds().size()); |
207 Env::GetInstance()->NotifyRootWindowInitialized(this); | 207 Env::GetInstance()->NotifyRootWindowInitialized(this); |
208 window()->Show(); | 208 window()->Show(); |
209 } | 209 } |
210 | 210 |
211 void RootWindow::ShowRootWindow() { | |
212 host_->Show(); | |
213 } | |
214 | |
215 void RootWindow::HideRootWindow() { | |
216 host_->Hide(); | |
217 } | |
218 | |
219 void RootWindow::PrepareForShutdown() { | 211 void RootWindow::PrepareForShutdown() { |
220 host_->PrepareForShutdown(); | 212 host_->PrepareForShutdown(); |
221 // discard synthesize event request as well. | 213 // discard synthesize event request as well. |
222 synthesize_mouse_move_ = false; | 214 synthesize_mouse_move_ = false; |
223 } | 215 } |
224 | 216 |
225 void RootWindow::RepostEvent(const ui::LocatedEvent& event) { | 217 void RootWindow::RepostEvent(const ui::LocatedEvent& event) { |
226 DCHECK(event.type() == ui::ET_MOUSE_PRESSED || | 218 DCHECK(event.type() == ui::ET_MOUSE_PRESSED || |
227 event.type() == ui::ET_GESTURE_TAP_DOWN); | 219 event.type() == ui::ET_GESTURE_TAP_DOWN); |
228 // We allow for only one outstanding repostable event. This is used | 220 // We allow for only one outstanding repostable event. This is used |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 // Requery the location to constrain it within the new root window size. | 252 // Requery the location to constrain it within the new root window size. |
261 gfx::Point point; | 253 gfx::Point point; |
262 if (host_->QueryMouseLocation(&point)) { | 254 if (host_->QueryMouseLocation(&point)) { |
263 SetLastMouseLocation(window(), | 255 SetLastMouseLocation(window(), |
264 ui::ConvertPointToDIP(window()->layer(), point)); | 256 ui::ConvertPointToDIP(window()->layer(), point)); |
265 } | 257 } |
266 | 258 |
267 synthesize_mouse_move_ = false; | 259 synthesize_mouse_move_ = false; |
268 } | 260 } |
269 | 261 |
270 gfx::Size RootWindow::GetHostSize() const { | |
271 return host_->GetBounds().size(); | |
272 } | |
273 | |
274 void RootWindow::SetHostBounds(const gfx::Rect& bounds_in_pixel) { | 262 void RootWindow::SetHostBounds(const gfx::Rect& bounds_in_pixel) { |
275 DCHECK(!bounds_in_pixel.IsEmpty()); | 263 DCHECK(!bounds_in_pixel.IsEmpty()); |
276 DispatchDetails details = DispatchHeldEvents(); | 264 DispatchDetails details = DispatchHeldEvents(); |
277 if (details.dispatcher_destroyed) | 265 if (details.dispatcher_destroyed) |
278 return; | 266 return; |
279 host_->SetBounds(bounds_in_pixel); | 267 host_->SetBounds(bounds_in_pixel); |
280 synthesize_mouse_move_ = false; | 268 synthesize_mouse_move_ = false; |
281 } | 269 } |
282 | 270 |
283 gfx::Point RootWindow::GetHostOrigin() const { | |
284 return host_->GetBounds().origin(); | |
285 } | |
286 | |
287 void RootWindow::SetCursor(gfx::NativeCursor cursor) { | 271 void RootWindow::SetCursor(gfx::NativeCursor cursor) { |
288 last_cursor_ = cursor; | 272 last_cursor_ = cursor; |
289 // A lot of code seems to depend on NULL cursors actually showing an arrow, | 273 // A lot of code seems to depend on NULL cursors actually showing an arrow, |
290 // so just pass everything along to the host. | 274 // so just pass everything along to the host. |
291 host_->SetCursor(cursor); | 275 host_->SetCursor(cursor); |
292 } | 276 } |
293 | 277 |
294 void RootWindow::OnCursorVisibilityChanged(bool show) { | 278 void RootWindow::OnCursorVisibilityChanged(bool show) { |
295 // Clear any existing mouse hover effects when the cursor becomes invisible. | 279 // Clear any existing mouse hover effects when the cursor becomes invisible. |
296 // Note we do not need to dispatch a mouse enter when the cursor becomes | 280 // Note we do not need to dispatch a mouse enter when the cursor becomes |
(...skipping 17 matching lines...) Expand all Loading... |
314 ConvertPointToHost(&host_location); | 298 ConvertPointToHost(&host_location); |
315 MoveCursorToInternal(location_in_dip, host_location); | 299 MoveCursorToInternal(location_in_dip, host_location); |
316 } | 300 } |
317 | 301 |
318 void RootWindow::MoveCursorToHostLocation(const gfx::Point& host_location) { | 302 void RootWindow::MoveCursorToHostLocation(const gfx::Point& host_location) { |
319 gfx::Point root_location(host_location); | 303 gfx::Point root_location(host_location); |
320 ConvertPointFromHost(&root_location); | 304 ConvertPointFromHost(&root_location); |
321 MoveCursorToInternal(root_location, host_location); | 305 MoveCursorToInternal(root_location, host_location); |
322 } | 306 } |
323 | 307 |
324 bool RootWindow::ConfineCursorToWindow() { | |
325 // We would like to be able to confine the cursor to that window. However, | |
326 // currently, we do not have such functionality in X. So we just confine | |
327 // to the root window. This is ok because this option is currently only | |
328 // being used in fullscreen mode, so root_window bounds = window bounds. | |
329 return host_->ConfineCursorToRootWindow(); | |
330 } | |
331 | |
332 void RootWindow::UnConfineCursor() { | |
333 host_->UnConfineCursor(); | |
334 } | |
335 | |
336 void RootWindow::ScheduleRedrawRect(const gfx::Rect& damage_rect) { | 308 void RootWindow::ScheduleRedrawRect(const gfx::Rect& damage_rect) { |
337 compositor_->ScheduleRedrawRect(damage_rect); | 309 compositor_->ScheduleRedrawRect(damage_rect); |
338 } | 310 } |
339 | 311 |
340 Window* RootWindow::GetGestureTarget(ui::GestureEvent* event) { | 312 Window* RootWindow::GetGestureTarget(ui::GestureEvent* event) { |
341 Window* target = client::GetCaptureWindow(window()); | 313 Window* target = client::GetCaptureWindow(window()); |
342 if (!target) { | 314 if (!target) { |
343 target = ConsumerToWindow( | 315 target = ConsumerToWindow( |
344 ui::GestureRecognizer::Get()->GetTargetForGestureEvent(event)); | 316 ui::GestureRecognizer::Get()->GetTargetForGestureEvent(event)); |
345 } | 317 } |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 } | 399 } |
428 | 400 |
429 void RootWindow::AddRootWindowObserver(RootWindowObserver* observer) { | 401 void RootWindow::AddRootWindowObserver(RootWindowObserver* observer) { |
430 observers_.AddObserver(observer); | 402 observers_.AddObserver(observer); |
431 } | 403 } |
432 | 404 |
433 void RootWindow::RemoveRootWindowObserver(RootWindowObserver* observer) { | 405 void RootWindow::RemoveRootWindowObserver(RootWindowObserver* observer) { |
434 observers_.RemoveObserver(observer); | 406 observers_.RemoveObserver(observer); |
435 } | 407 } |
436 | 408 |
437 void RootWindow::PostNativeEvent(const base::NativeEvent& native_event) { | |
438 host_->PostNativeEvent(native_event); | |
439 } | |
440 | |
441 void RootWindow::ConvertPointToNativeScreen(gfx::Point* point) const { | |
442 ConvertPointToHost(point); | |
443 gfx::Point location = host_->GetLocationOnNativeScreen(); | |
444 point->Offset(location.x(), location.y()); | |
445 } | |
446 | |
447 void RootWindow::ConvertPointFromNativeScreen(gfx::Point* point) const { | |
448 gfx::Point location = host_->GetLocationOnNativeScreen(); | |
449 point->Offset(-location.x(), -location.y()); | |
450 ConvertPointFromHost(point); | |
451 } | |
452 | |
453 void RootWindow::ConvertPointToHost(gfx::Point* point) const { | 409 void RootWindow::ConvertPointToHost(gfx::Point* point) const { |
454 gfx::Point3F point_3f(*point); | 410 gfx::Point3F point_3f(*point); |
455 GetRootTransform().TransformPoint(&point_3f); | 411 GetRootTransform().TransformPoint(&point_3f); |
456 *point = gfx::ToFlooredPoint(point_3f.AsPointF()); | 412 *point = gfx::ToFlooredPoint(point_3f.AsPointF()); |
457 } | 413 } |
458 | 414 |
459 void RootWindow::ConvertPointFromHost(gfx::Point* point) const { | 415 void RootWindow::ConvertPointFromHost(gfx::Point* point) const { |
460 gfx::Point3F point_3f(*point); | 416 gfx::Point3F point_3f(*point); |
461 GetInverseRootTransform().TransformPoint(&point_3f); | 417 GetInverseRootTransform().TransformPoint(&point_3f); |
462 *point = gfx::ToFlooredPoint(point_3f.AsPointF()); | 418 *point = gfx::ToFlooredPoint(point_3f.AsPointF()); |
463 } | 419 } |
464 | 420 |
465 void RootWindow::ProcessedTouchEvent(ui::TouchEvent* event, | 421 void RootWindow::ProcessedTouchEvent(ui::TouchEvent* event, |
466 Window* window, | 422 Window* window, |
467 ui::EventResult result) { | 423 ui::EventResult result) { |
468 scoped_ptr<ui::GestureRecognizer::Gestures> gestures; | 424 scoped_ptr<ui::GestureRecognizer::Gestures> gestures; |
469 gestures.reset(ui::GestureRecognizer::Get()-> | 425 gestures.reset(ui::GestureRecognizer::Get()-> |
470 ProcessTouchEventForGesture(*event, result, window)); | 426 ProcessTouchEventForGesture(*event, result, window)); |
471 DispatchDetails details = ProcessGestures(gestures.get()); | 427 DispatchDetails details = ProcessGestures(gestures.get()); |
472 if (details.dispatcher_destroyed) | 428 if (details.dispatcher_destroyed) |
473 return; | 429 return; |
474 } | 430 } |
475 | 431 |
476 gfx::AcceleratedWidget RootWindow::GetAcceleratedWidget() { | |
477 return host_->GetAcceleratedWidget(); | |
478 } | |
479 | |
480 void RootWindow::ToggleFullScreen() { | |
481 host_->ToggleFullScreen(); | |
482 } | |
483 | |
484 void RootWindow::HoldPointerMoves() { | 432 void RootWindow::HoldPointerMoves() { |
485 if (!move_hold_count_) | 433 if (!move_hold_count_) |
486 held_event_factory_.InvalidateWeakPtrs(); | 434 held_event_factory_.InvalidateWeakPtrs(); |
487 ++move_hold_count_; | 435 ++move_hold_count_; |
488 TRACE_EVENT_ASYNC_BEGIN0("ui", "RootWindow::HoldPointerMoves", this); | 436 TRACE_EVENT_ASYNC_BEGIN0("ui", "RootWindow::HoldPointerMoves", this); |
489 } | 437 } |
490 | 438 |
491 void RootWindow::ReleasePointerMoves() { | 439 void RootWindow::ReleasePointerMoves() { |
492 --move_hold_count_; | 440 --move_hold_count_; |
493 DCHECK_GE(move_hold_count_, 0); | 441 DCHECK_GE(move_hold_count_, 0); |
494 if (!move_hold_count_ && held_move_event_) { | 442 if (!move_hold_count_ && held_move_event_) { |
495 // We don't want to call DispatchHeldEvents directly, because this might be | 443 // We don't want to call DispatchHeldEvents directly, because this might be |
496 // called from a deep stack while another event, in which case dispatching | 444 // called from a deep stack while another event, in which case dispatching |
497 // another one may not be safe/expected. Instead we post a task, that we | 445 // another one may not be safe/expected. Instead we post a task, that we |
498 // may cancel if HoldPointerMoves is called again before it executes. | 446 // may cancel if HoldPointerMoves is called again before it executes. |
499 base::MessageLoop::current()->PostTask( | 447 base::MessageLoop::current()->PostTask( |
500 FROM_HERE, | 448 FROM_HERE, |
501 base::Bind(&RootWindow::DispatchHeldEventsAsync, | 449 base::Bind(&RootWindow::DispatchHeldEventsAsync, |
502 held_event_factory_.GetWeakPtr())); | 450 held_event_factory_.GetWeakPtr())); |
503 } | 451 } |
504 TRACE_EVENT_ASYNC_END0("ui", "RootWindow::HoldPointerMoves", this); | 452 TRACE_EVENT_ASYNC_END0("ui", "RootWindow::HoldPointerMoves", this); |
505 } | 453 } |
506 | 454 |
507 void RootWindow::SetFocusWhenShown(bool focused) { | |
508 host_->SetFocusWhenShown(focused); | |
509 } | |
510 | |
511 gfx::Point RootWindow::GetLastMouseLocationInRoot() const { | 455 gfx::Point RootWindow::GetLastMouseLocationInRoot() const { |
512 gfx::Point location = Env::GetInstance()->last_mouse_location(); | 456 gfx::Point location = Env::GetInstance()->last_mouse_location(); |
513 client::ScreenPositionClient* client = | 457 client::ScreenPositionClient* client = |
514 client::GetScreenPositionClient(window()); | 458 client::GetScreenPositionClient(window()); |
515 if (client) | 459 if (client) |
516 client->ConvertPointFromScreen(window(), &location); | 460 client->ConvertPointFromScreen(window(), &location); |
517 return location; | 461 return location; |
518 } | 462 } |
519 | 463 |
520 bool RootWindow::QueryMouseLocationForTest(gfx::Point* point) const { | |
521 return host_->QueryMouseLocation(point); | |
522 } | |
523 | |
524 void RootWindow::SetRootWindowTransformer( | 464 void RootWindow::SetRootWindowTransformer( |
525 scoped_ptr<RootWindowTransformer> transformer) { | 465 scoped_ptr<RootWindowTransformer> transformer) { |
526 transformer_ = transformer.Pass(); | 466 transformer_ = transformer.Pass(); |
527 host_->SetInsets(transformer_->GetHostInsets()); | 467 host_->SetInsets(transformer_->GetHostInsets()); |
528 window()->SetTransform(transformer_->GetTransform()); | 468 window()->SetTransform(transformer_->GetTransform()); |
529 // If the layer is not animating, then we need to update the root window | 469 // If the layer is not animating, then we need to update the root window |
530 // size immediately. | 470 // size immediately. |
531 if (!window()->layer()->GetAnimator()->is_animating()) | 471 if (!window()->layer()->GetAnimator()->is_animating()) |
532 UpdateRootWindowSize(GetHostSize()); | 472 UpdateRootWindowSize(host_->GetBounds().size()); |
533 } | 473 } |
534 | 474 |
535 gfx::Transform RootWindow::GetRootTransform() const { | 475 gfx::Transform RootWindow::GetRootTransform() const { |
536 float scale = ui::GetDeviceScaleFactor(window()->layer()); | 476 float scale = ui::GetDeviceScaleFactor(window()->layer()); |
537 gfx::Transform transform; | 477 gfx::Transform transform; |
538 transform.Scale(scale, scale); | 478 transform.Scale(scale, scale); |
539 transform *= transformer_->GetTransform(); | 479 transform *= transformer_->GetTransform(); |
540 return transform; | 480 return transform; |
541 } | 481 } |
542 | 482 |
543 void RootWindow::SetTransform(const gfx::Transform& transform) { | 483 void RootWindow::SetTransform(const gfx::Transform& transform) { |
544 scoped_ptr<RootWindowTransformer> transformer( | 484 scoped_ptr<RootWindowTransformer> transformer( |
545 new SimpleRootWindowTransformer(window(), transform)); | 485 new SimpleRootWindowTransformer(window(), transform)); |
546 SetRootWindowTransformer(transformer.Pass()); | 486 SetRootWindowTransformer(transformer.Pass()); |
547 } | 487 } |
548 | 488 |
549 void RootWindow::DeviceScaleFactorChanged(float device_scale_factor) { | |
550 host_->OnDeviceScaleFactorChanged(device_scale_factor); | |
551 } | |
552 | |
553 //////////////////////////////////////////////////////////////////////////////// | 489 //////////////////////////////////////////////////////////////////////////////// |
554 // RootWindow, private: | 490 // RootWindow, private: |
555 | 491 |
556 void RootWindow::TransformEventForDeviceScaleFactor(ui::LocatedEvent* event) { | 492 void RootWindow::TransformEventForDeviceScaleFactor(ui::LocatedEvent* event) { |
557 event->UpdateForRootTransform(GetInverseRootTransform()); | 493 event->UpdateForRootTransform(GetInverseRootTransform()); |
558 } | 494 } |
559 | 495 |
560 void RootWindow::MoveCursorToInternal(const gfx::Point& root_location, | 496 void RootWindow::MoveCursorToInternal(const gfx::Point& root_location, |
561 const gfx::Point& host_location) { | 497 const gfx::Point& host_location) { |
562 host_->MoveCursorTo(host_location); | 498 host_->MoveCursorTo(host_location); |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 | 683 |
748 void RootWindow::DispatchCancelTouchEvent(ui::TouchEvent* event) { | 684 void RootWindow::DispatchCancelTouchEvent(ui::TouchEvent* event) { |
749 OnHostTouchEvent(event); | 685 OnHostTouchEvent(event); |
750 } | 686 } |
751 | 687 |
752 //////////////////////////////////////////////////////////////////////////////// | 688 //////////////////////////////////////////////////////////////////////////////// |
753 // RootWindow, ui::LayerAnimationObserver implementation: | 689 // RootWindow, ui::LayerAnimationObserver implementation: |
754 | 690 |
755 void RootWindow::OnLayerAnimationEnded( | 691 void RootWindow::OnLayerAnimationEnded( |
756 ui::LayerAnimationSequence* animation) { | 692 ui::LayerAnimationSequence* animation) { |
757 UpdateRootWindowSize(GetHostSize()); | 693 UpdateRootWindowSize(host_->GetBounds().size()); |
758 } | 694 } |
759 | 695 |
760 void RootWindow::OnLayerAnimationScheduled( | 696 void RootWindow::OnLayerAnimationScheduled( |
761 ui::LayerAnimationSequence* animation) { | 697 ui::LayerAnimationSequence* animation) { |
762 } | 698 } |
763 | 699 |
764 void RootWindow::OnLayerAnimationAborted( | 700 void RootWindow::OnLayerAnimationAborted( |
765 ui::LayerAnimationSequence* animation) { | 701 ui::LayerAnimationSequence* animation) { |
766 } | 702 } |
767 | 703 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
899 } | 835 } |
900 | 836 |
901 float RootWindow::GetDeviceScaleFactor() { | 837 float RootWindow::GetDeviceScaleFactor() { |
902 return compositor()->device_scale_factor(); | 838 return compositor()->device_scale_factor(); |
903 } | 839 } |
904 | 840 |
905 RootWindow* RootWindow::AsRootWindow() { | 841 RootWindow* RootWindow::AsRootWindow() { |
906 return this; | 842 return this; |
907 } | 843 } |
908 | 844 |
| 845 const RootWindow* RootWindow::AsRootWindow() const { |
| 846 return this; |
| 847 } |
| 848 |
909 //////////////////////////////////////////////////////////////////////////////// | 849 //////////////////////////////////////////////////////////////////////////////// |
910 // RootWindow, private: | 850 // RootWindow, private: |
911 | 851 |
912 ui::EventDispatchDetails RootWindow::OnHostMouseEventImpl( | 852 ui::EventDispatchDetails RootWindow::OnHostMouseEventImpl( |
913 ui::MouseEvent* event) { | 853 ui::MouseEvent* event) { |
914 if (event->type() == ui::ET_MOUSE_DRAGGED || | 854 if (event->type() == ui::ET_MOUSE_DRAGGED || |
915 (event->flags() & ui::EF_IS_SYNTHESIZED)) { | 855 (event->flags() & ui::EF_IS_SYNTHESIZED)) { |
916 if (move_hold_count_) { | 856 if (move_hold_count_) { |
917 Window* null_window = static_cast<Window*>(NULL); | 857 Window* null_window = static_cast<Window*>(NULL); |
918 held_move_event_.reset( | 858 held_move_event_.reset( |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1185 } | 1125 } |
1186 | 1126 |
1187 gfx::Transform RootWindow::GetInverseRootTransform() const { | 1127 gfx::Transform RootWindow::GetInverseRootTransform() const { |
1188 float scale = ui::GetDeviceScaleFactor(window()->layer()); | 1128 float scale = ui::GetDeviceScaleFactor(window()->layer()); |
1189 gfx::Transform transform; | 1129 gfx::Transform transform; |
1190 transform.Scale(1.0f / scale, 1.0f / scale); | 1130 transform.Scale(1.0f / scale, 1.0f / scale); |
1191 return transformer_->GetInverseTransform() * transform; | 1131 return transformer_->GetInverseTransform() * transform; |
1192 } | 1132 } |
1193 | 1133 |
1194 } // namespace aura | 1134 } // namespace aura |
OLD | NEW |