Chromium Code Reviews| Index: content/browser/renderer_host/render_widget_host_view_mac.mm |
| diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm |
| index 7a95ba36c44d0cd104b2abb15359d4c142a400fa..d0e675c92522e71fff82e16630405927cae5aa14 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_mac.mm |
| +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm |
| @@ -159,6 +159,7 @@ float ScaleFactor(NSView* view) { |
| - (void)cancelChildPopups; |
| - (void)windowDidChangeBackingProperties:(NSNotification*)notification; |
| - (void)checkForPluginImeCancellation; |
| +- (void)updateTabBackingStoreScaleFactor; |
| @end |
| // NSEvent subtype for scroll gestures events. |
| @@ -399,6 +400,10 @@ void RenderWidgetHostViewMac::DidBecomeSelected() { |
| if (!is_hidden_) |
| return; |
| + // Check if the backing scale factor changed while the tab was in the |
| + // background. |
| + [cocoa_view_ updateTabBackingStoreScaleFactor]; |
| + |
| if (web_contents_switch_paint_time_.is_null()) |
| web_contents_switch_paint_time_ = base::TimeTicks::Now(); |
| is_hidden_ = false; |
| @@ -820,8 +825,6 @@ bool RenderWidgetHostViewMac::IsPopup() const { |
| BackingStore* RenderWidgetHostViewMac::AllocBackingStore( |
| const gfx::Size& size) { |
| - // TODO(thakis): Register for backing scale factor change events and pass |
| - // that on. |
| float scale = ScaleFactor(cocoa_view_); |
| return new BackingStoreMac(render_widget_host_, size, scale); |
| } |
| @@ -1890,6 +1893,20 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) { |
| } |
| } |
| +- (void)updateTabBackingStoreScaleFactor { |
| + if (!renderWidgetHostView_->render_widget_host_) |
| + return; |
| + |
| + float scaleFactor = ScaleFactor(self); |
| + BackingStoreMac* backingStore = static_cast<BackingStoreMac*>( |
| + renderWidgetHostView_->render_widget_host_->GetBackingStore(false)); |
| + if (backingStore) // NULL in hardware path. |
| + backingStore->ScaleFactorChanged(scaleFactor); |
| + |
| + renderWidgetHostView_->render_widget_host_->SetDeviceScaleFactor( |
| + scaleFactor); |
| +} |
| + |
| // http://developer.apple.com/library/mac/#documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/CapturingScreenContents/CapturingScreenContents.html#//apple_ref/doc/uid/TP40012302-CH10-SW4 |
| - (void)windowDidChangeBackingProperties:(NSNotification*)notification { |
| NSWindow* window = (NSWindow*)[notification object]; |
| @@ -1899,11 +1916,16 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) { |
| [[notification userInfo] objectForKey:NSBackingPropertyOldScaleFactorKey]) |
| doubleValue]; |
| if (newBackingScaleFactor != oldBackingScaleFactor) { |
| - // TODO(thakis): Tell backing store about new DPI, schedule repaint. |
| - if (renderWidgetHostView_->render_widget_host_) { |
| - renderWidgetHostView_->render_widget_host_->SetDeviceScaleFactor( |
| - newBackingScaleFactor); |
| - } |
| + // Background tabs check if their scale factor changed when they become |
| + // active, in DidBecomeSelected(). |
|
Avi (use Gerrit)
2012/06/14 04:51:20
Not for this CL, but we should rename that to DidB
Nico
2012/06/14 04:57:45
There's also a mac-only SetActive(true) call :-) T
|
| + |
| + // Allocating a CGLayerRef with the current scale factor immediately from |
| + // this handler doesn't work. Schedule the backing store update on the |
| + // next runloop cycle, then things are read for CGLayerRef allocations to |
| + // work. |
| + [self performSelector:@selector(updateTabBackingStoreScaleFactor) |
| + withObject:nil |
| + afterDelay:0]; |
| } |
| } |