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

Unified Diff: ui/aura/root_window.cc

Issue 10221028: Move DIP translation from ui/aura to ui/compositor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: disable tests that doesn't run on bots Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/aura/root_window.h ('k') | ui/aura/window.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura/root_window.cc
diff --git a/ui/aura/root_window.cc b/ui/aura/root_window.cc
index 3c67f34d72717ba74558d8224d78424cddd2ee41..4dfdc97eb45810329b9459ec21ac43d9a13d804f 100644
--- a/ui/aura/root_window.cc
+++ b/ui/aura/root_window.cc
@@ -18,6 +18,7 @@
#include "ui/aura/event.h"
#include "ui/aura/event_filter.h"
#include "ui/aura/focus_manager.h"
+#include "ui/aura/monitor_manager.h"
#include "ui/aura/root_window_host.h"
#include "ui/aura/root_window_observer.h"
#include "ui/aura/window.h"
@@ -26,8 +27,11 @@
#include "ui/base/gestures/gesture_types.h"
#include "ui/base/hit_test.h"
#include "ui/compositor/compositor.h"
+#include "ui/compositor/dip_util.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_animator.h"
+#include "ui/gfx/monitor.h"
+#include "ui/gfx/screen.h"
using std::vector;
@@ -54,6 +58,11 @@ void GetEventFiltersToNotify(Window* target, EventFilters* filters) {
}
}
+float GetDeviceScaleFactorFromMonitor(const aura::Window* window) {
+ MonitorManager* monitor_manager = Env::GetInstance()->monitor_manager();
+ return monitor_manager->GetMonitorNearestWindow(window).device_scale_factor();
+}
+
const int kCompositorLockTimeoutMs = 67;
} // namespace
@@ -110,8 +119,7 @@ RootWindow::RootWindow(const gfx::Rect& initial_bounds)
should_hold_mouse_moves_ = !CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAuraDisableHoldMouseMoves);
- compositor_.reset(new ui::Compositor(this, host_->GetAcceleratedWidget(),
- host_->GetBounds().size()));
+ compositor_.reset(new ui::Compositor(this, host_->GetAcceleratedWidget()));
DCHECK(compositor_.get());
compositor_->AddObserver(this);
}
@@ -136,11 +144,15 @@ RootWindow::~RootWindow() {
}
void RootWindow::Init() {
+ compositor()->SetScaleAndSize(GetDeviceScaleFactorFromMonitor(this),
+ host_->GetBounds().size());
Window::Init(ui::LAYER_NOT_DRAWN);
- last_mouse_location_ = ConvertPointToDIP(this, host_->QueryMouseLocation());
- SetBounds(ConvertRectToDIP(this, gfx::Rect(host_->GetBounds().size())));
- Show();
+ last_mouse_location_ =
+ ui::ConvertPointToDIP(layer(), host_->QueryMouseLocation());
compositor()->SetRootLayer(layer());
+ SetBounds(
+ ui::ConvertRectToDIP(layer(), gfx::Rect(host_->GetBounds().size())));
+ Show();
host_->SetRootWindow(this);
}
@@ -148,13 +160,14 @@ void RootWindow::ShowRootWindow() {
host_->Show();
}
-void RootWindow::SetHostSize(const gfx::Size& size) {
+void RootWindow::SetHostSize(const gfx::Size& size_in_pixel) {
DispatchHeldMouseMove();
gfx::Rect bounds = host_->GetBounds();
- bounds.set_size(size);
+ bounds.set_size(size_in_pixel);
host_->SetBounds(bounds);
// Requery the location to constrain it within the new root window size.
- last_mouse_location_ = ConvertPointToDIP(this, host_->QueryMouseLocation());
+ last_mouse_location_ =
+ ui::ConvertPointToDIP(layer(), host_->QueryMouseLocation());
synthesize_mouse_move_ = false;
}
@@ -162,11 +175,12 @@ gfx::Size RootWindow::GetHostSize() const {
return host_->GetBounds().size();
}
-void RootWindow::SetHostBounds(const gfx::Rect& bounds) {
+void RootWindow::SetHostBounds(const gfx::Rect& bounds_in_pixel) {
DispatchHeldMouseMove();
- host_->SetBounds(bounds);
+ host_->SetBounds(bounds_in_pixel);
// Requery the location to constrain it within the new root window size.
- last_mouse_location_ = ConvertPointToDIP(this, host_->QueryMouseLocation());
+ last_mouse_location_ =
+ ui::ConvertPointToDIP(layer(), host_->QueryMouseLocation());
synthesize_mouse_move_ = false;
}
@@ -187,7 +201,7 @@ void RootWindow::ShowCursor(bool show) {
}
void RootWindow::MoveCursorTo(const gfx::Point& location_in_dip) {
- host_->MoveCursorTo(ConvertPointToPixel(this, location_in_dip));
+ host_->MoveCursorTo(ui::ConvertPointToPixel(layer(), location_in_dip));
}
bool RootWindow::ConfineCursorToWindow() {
@@ -249,15 +263,14 @@ bool RootWindow::DispatchKeyEvent(KeyEvent* event) {
bool RootWindow::DispatchScrollEvent(ScrollEvent* event) {
DispatchHeldMouseMove();
-#if defined(ENABLE_DIP)
- float scale = GetMonitorScaleFactor(this);
- ui::Transform transform;
- transform.SetScale(scale, scale);
- transform.ConcatTransform(layer()->transform());
- event->UpdateForRootTransform(transform);
-#else
- event->UpdateForRootTransform(layer()->transform());
-#endif
+ if (ui::IsDIPEnabled()) {
+ float scale = ui::GetDeviceScaleFactor(layer());
+ ui::Transform transform = layer()->transform();
+ transform.ConcatScale(scale, scale);
+ event->UpdateForRootTransform(transform);
+ } else {
+ event->UpdateForRootTransform(layer()->transform());
+ }
last_mouse_location_ = event->location();
synthesize_mouse_move_ = false;
@@ -281,15 +294,14 @@ bool RootWindow::DispatchScrollEvent(ScrollEvent* event) {
bool RootWindow::DispatchTouchEvent(TouchEvent* event) {
DispatchHeldMouseMove();
-#if defined(ENABLE_DIP)
- float scale = GetMonitorScaleFactor(this);
- ui::Transform transform;
- transform.SetScale(scale, scale);
- transform.ConcatTransform(layer()->transform());
- event->UpdateForRootTransform(transform);
-#else
- event->UpdateForRootTransform(layer()->transform());
-#endif
+ if (ui::IsDIPEnabled()) {
+ float scale = ui::GetDeviceScaleFactor(layer());
+ ui::Transform transform = layer()->transform();
+ transform.ConcatScale(scale, scale);
+ event->UpdateForRootTransform(transform);
+ } else {
+ event->UpdateForRootTransform(layer()->transform());
+ }
bool handled = false;
GestureConsumer* consumer = gesture_recognizer_->GetTouchLockedTarget(event);
@@ -361,16 +373,18 @@ bool RootWindow::DispatchGestureEvent(GestureEvent* event) {
return false;
}
-void RootWindow::OnHostResized(const gfx::Size& size) {
+void RootWindow::OnHostResized(const gfx::Size& size_in_pixel) {
DispatchHeldMouseMove();
// The compositor should have the same size as the native root window host.
- compositor_->WidgetSizeChanged(size);
- gfx::Size old(ConvertSizeToDIP(this, bounds().size()));
+ // Get the latest scale from monitor because it might have been changed.
+ compositor_->SetScaleAndSize(GetDeviceScaleFactorFromMonitor(this),
+ size_in_pixel);
+ gfx::Size old(bounds().size());
// The layer, and all the observers should be notified of the
// transformed size of the root window.
- gfx::Rect bounds(ConvertSizeToDIP(this, size));
+ gfx::Rect bounds(ui::ConvertSizeToDIP(layer(), size_in_pixel));
layer()->transform().TransformRect(&bounds);
- SetBounds(gfx::Rect(bounds.size()));
+ SetBounds(bounds);
FOR_EACH_OBSERVER(RootWindowObserver, observers_,
OnRootWindowResized(this, old));
}
@@ -901,15 +915,14 @@ bool RootWindow::DispatchMouseEventImpl(MouseEvent* event) {
ui::EF_LEFT_MOUSE_BUTTON |
ui::EF_MIDDLE_MOUSE_BUTTON |
ui::EF_RIGHT_MOUSE_BUTTON;
-#if defined(ENABLE_DIP)
- float scale = GetMonitorScaleFactor(this);
- ui::Transform transform;
- transform.SetScale(scale, scale);
- transform.ConcatTransform(layer()->transform());
- event->UpdateForRootTransform(transform);
-#else
- event->UpdateForRootTransform(layer()->transform());
-#endif
+ if (ui::IsDIPEnabled()) {
+ float scale = ui::GetDeviceScaleFactor(layer());
+ ui::Transform transform = layer()->transform();
+ transform.ConcatScale(scale, scale);
+ event->UpdateForRootTransform(transform);
+ } else {
+ event->UpdateForRootTransform(layer()->transform());
+ }
last_mouse_location_ = event->location();
synthesize_mouse_move_ = false;
@@ -976,9 +989,7 @@ void RootWindow::SynthesizeMouseMoveEvent() {
#if !defined(OS_WIN)
// Temporarily disabled for windows. See crbug.com/112222.
gfx::Point orig_mouse_location = last_mouse_location_;
- orig_mouse_location = ConvertPointToPixel(this, orig_mouse_location);
layer()->transform().TransformPoint(orig_mouse_location);
- orig_mouse_location = ConvertPointToDIP(this,orig_mouse_location);
// TODO(derat|oshima): Don't use mouse_button_flags_ as it's
// currently broken. See/ crbug.com/107931.
« no previous file with comments | « ui/aura/root_window.h ('k') | ui/aura/window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698