Index: services/ui/ws/platform_display.cc |
diff --git a/services/ui/ws/platform_display.cc b/services/ui/ws/platform_display.cc |
index 6a082d23af54525b8fe78086e153d92950b71802..31502f8ef1ffb8453a2bbdee48e36486ba0fab59 100644 |
--- a/services/ui/ws/platform_display.cc |
+++ b/services/ui/ws/platform_display.cc |
@@ -59,26 +59,33 @@ DefaultPlatformDisplay::DefaultPlatformDisplay( |
#if !defined(OS_ANDROID) |
cursor_loader_(ui::CursorLoader::Create()), |
#endif |
- frame_generator_(new FrameGenerator(this, init_params.surfaces_state)) { |
- metrics_.bounds = init_params.display_bounds; |
+ frame_generator_(new FrameGenerator(this, init_params.surfaces_state)), |
+ metrics_(init_params.metrics) { |
} |
void DefaultPlatformDisplay::Init(PlatformDisplayDelegate* delegate) { |
delegate_ = delegate; |
+ DCHECK(!metrics_.pixel_size.IsEmpty()); |
+ |
+ // TODO(kylechar): The origin here isn't right if any displays have |
+ // scale_factor other than 1.0 but will prevent windows from being stacked. |
+ gfx::Rect bounds(metrics_.bounds.origin(), metrics_.pixel_size); |
#if defined(OS_WIN) |
- platform_window_.reset(new ui::WinWindow(this, metrics_.bounds)); |
+ platform_window_.reset(new ui::WinWindow(this, bounds)); |
#elif defined(USE_X11) |
platform_window_.reset(new ui::X11Window(this)); |
#elif defined(OS_ANDROID) |
platform_window_.reset(new ui::PlatformWindowAndroid(this)); |
#elif defined(USE_OZONE) |
- platform_window_ = ui::OzonePlatform::GetInstance()->CreatePlatformWindow( |
- this, metrics_.bounds); |
+ platform_window_ = |
+ ui::OzonePlatform::GetInstance()->CreatePlatformWindow(this, bounds); |
#else |
NOTREACHED() << "Unsupported platform"; |
#endif |
- platform_window_->SetBounds(metrics_.bounds); |
+ delegate_->CreateRootWindow(metrics_.bounds.size()); |
+ |
+ platform_window_->SetBounds(bounds); |
platform_window_->Show(); |
} |
@@ -178,20 +185,17 @@ void DefaultPlatformDisplay::OnGpuChannelEstablished( |
} |
void DefaultPlatformDisplay::UpdateMetrics(const gfx::Rect& bounds, |
+ const gfx::Size& pixel_size, |
float device_scale_factor) { |
- if (display::Display::HasForceDeviceScaleFactor()) |
- device_scale_factor = display::Display::GetForcedDeviceScaleFactor(); |
- |
// We don't care about the origin of the platform window, as that may not be |
// related to the origin of the display in our screen space. |
- if (metrics_.bounds.size() == bounds.size() && |
+ if (metrics_.bounds == bounds && metrics_.pixel_size == pixel_size && |
metrics_.device_scale_factor == device_scale_factor) |
return; |
- // TODO(kylechar): If the window size is updated then we may need to update |
- // the origin for any other windows. |
ViewportMetrics old_metrics = metrics_; |
- metrics_.bounds.set_size(bounds.size()); |
+ metrics_.bounds = bounds; |
+ metrics_.pixel_size = pixel_size; |
metrics_.device_scale_factor = device_scale_factor; |
delegate_->OnViewportMetricsChanged(old_metrics, metrics_); |
} |
@@ -203,7 +207,12 @@ void DefaultPlatformDisplay::UpdateEventRootLocation(ui::LocatedEvent* event) { |
} |
void DefaultPlatformDisplay::OnBoundsChanged(const gfx::Rect& new_bounds) { |
- UpdateMetrics(new_bounds, metrics_.device_scale_factor); |
+ // TODO(kylechar): We're updating the bounds assuming that the device scale |
+ // factor is 1 here. The correct thing to do is let PlatformSreen know the |
+ // display size has changed and let it update the display. |
+ gfx::Size pixel_size = new_bounds.size(); |
+ gfx::Rect bounds = gfx::Rect(metrics_.bounds.origin(), pixel_size); |
+ UpdateMetrics(bounds, pixel_size, metrics_.device_scale_factor); |
} |
void DefaultPlatformDisplay::OnDamageRect(const gfx::Rect& damaged_region) { |
@@ -271,7 +280,6 @@ void DefaultPlatformDisplay::OnAcceleratedWidgetAvailable( |
gfx::AcceleratedWidget widget, |
float device_scale_factor) { |
frame_generator_->OnAcceleratedWidgetAvailable(widget); |
- UpdateMetrics(metrics_.bounds, device_scale_factor); |
} |
void DefaultPlatformDisplay::OnAcceleratedWidgetDestroyed() { |