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

Side by Side Diff: ash/desktop_background/desktop_background_view.cc

Issue 1996793002: Fill the canvas with black background before painting wallpaper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporated comments from xdai1@ Created 4 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/desktop_background/desktop_background_view.h" 5 #include "ash/desktop_background/desktop_background_view.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "ash/ash_export.h" 9 #include "ash/ash_export.h"
10 #include "ash/desktop_background/desktop_background_controller.h" 10 #include "ash/desktop_background/desktop_background_controller.h"
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 void DesktopBackgroundView::OnPaint(gfx::Canvas* canvas) { 131 void DesktopBackgroundView::OnPaint(gfx::Canvas* canvas) {
132 // Scale the image while maintaining the aspect ratio, cropping as 132 // Scale the image while maintaining the aspect ratio, cropping as
133 // necessary to fill the background. Ideally the image should be larger 133 // necessary to fill the background. Ideally the image should be larger
134 // than the largest display supported, if not we will scale and center it if 134 // than the largest display supported, if not we will scale and center it if
135 // the layout is WALLPAPER_LAYOUT_CENTER_CROPPED. 135 // the layout is WALLPAPER_LAYOUT_CENTER_CROPPED.
136 DesktopBackgroundController* controller = 136 DesktopBackgroundController* controller =
137 Shell::GetInstance()->desktop_background_controller(); 137 Shell::GetInstance()->desktop_background_controller();
138 gfx::ImageSkia wallpaper = controller->GetWallpaper(); 138 gfx::ImageSkia wallpaper = controller->GetWallpaper();
139 WallpaperLayout wallpaper_layout = controller->GetWallpaperLayout(); 139 WallpaperLayout wallpaper_layout = controller->GetWallpaperLayout();
140 140
141 if (wallpaper.isNull()) { 141 // Wallpapers with png format could be partially transparent.
142 canvas->FillRect(GetLocalBounds(), SK_ColorBLACK); 142 // Fill the canvas with black background to make it opaque
143 // before painting wallpaper
144 canvas->FillRect(GetLocalBounds(), SK_ColorBLACK);
145
146 if (wallpaper.isNull())
143 return; 147 return;
144 }
145 148
146 if (wallpaper_layout == WALLPAPER_LAYOUT_CENTER_CROPPED) { 149 if (wallpaper_layout == WALLPAPER_LAYOUT_CENTER_CROPPED) {
147 // The dimension with the smallest ratio must be cropped, the other one 150 // The dimension with the smallest ratio must be cropped, the other one
148 // is preserved. Both are set in gfx::Size cropped_size. 151 // is preserved. Both are set in gfx::Size cropped_size.
149 double horizontal_ratio = static_cast<double>(width()) / 152 double horizontal_ratio = static_cast<double>(width()) /
150 static_cast<double>(wallpaper.width()); 153 static_cast<double>(wallpaper.width());
151 double vertical_ratio = static_cast<double>(height()) / 154 double vertical_ratio = static_cast<double>(height()) /
152 static_cast<double>(wallpaper.height()); 155 static_cast<double>(wallpaper.height());
153 156
154 gfx::Size cropped_size; 157 gfx::Size cropped_size;
(...skipping 15 matching lines...) Expand all
170 wallpaper_cropped_rect.width(), wallpaper_cropped_rect.height(), 173 wallpaper_cropped_rect.width(), wallpaper_cropped_rect.height(),
171 0, 0, width(), height(), 174 0, 0, width(), height(),
172 true); 175 true);
173 } else if (wallpaper_layout == WALLPAPER_LAYOUT_TILE) { 176 } else if (wallpaper_layout == WALLPAPER_LAYOUT_TILE) {
174 canvas->TileImageInt(wallpaper, 0, 0, width(), height()); 177 canvas->TileImageInt(wallpaper, 0, 0, width(), height());
175 } else if (wallpaper_layout == WALLPAPER_LAYOUT_STRETCH) { 178 } else if (wallpaper_layout == WALLPAPER_LAYOUT_STRETCH) {
176 // This is generally not recommended as it may show artifacts. 179 // This is generally not recommended as it may show artifacts.
177 canvas->DrawImageInt(wallpaper, 0, 0, wallpaper.width(), 180 canvas->DrawImageInt(wallpaper, 0, 0, wallpaper.width(),
178 wallpaper.height(), 0, 0, width(), height(), true); 181 wallpaper.height(), 0, 0, width(), height(), true);
179 } else { 182 } else {
180 // Fill with black to make sure that the entire area is opaque.
181 canvas->FillRect(GetLocalBounds(), SK_ColorBLACK);
182 float image_scale = canvas->image_scale(); 183 float image_scale = canvas->image_scale();
183 gfx::Rect wallpaper_rect(0, 0, wallpaper.width() / image_scale, 184 gfx::Rect wallpaper_rect(0, 0, wallpaper.width() / image_scale,
184 wallpaper.height() / image_scale); 185 wallpaper.height() / image_scale);
185 // All other are simply centered, and not scaled (but may be clipped). 186 // All other are simply centered, and not scaled (but may be clipped).
186 canvas->DrawImageInt( 187 canvas->DrawImageInt(
187 wallpaper, 188 wallpaper,
188 0, 0, wallpaper.width(), wallpaper.height(), 189 0, 0, wallpaper.width(), wallpaper.height(),
189 (width() - wallpaper_rect.width()) / 2, 190 (width() - wallpaper_rect.width()) / 2,
190 (height() - wallpaper_rect.height()) / 2, 191 (height() - wallpaper_rect.height()) / 2,
191 wallpaper_rect.width(), 192 wallpaper_rect.width(),
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 // Disable animation if transition to login screen from an empty background. 250 // Disable animation if transition to login screen from an empty background.
250 ::wm::SetWindowVisibilityAnimationTransition( 251 ::wm::SetWindowVisibilityAnimationTransition(
251 desktop_widget->GetNativeView(), ::wm::ANIMATE_NONE); 252 desktop_widget->GetNativeView(), ::wm::ANIMATE_NONE);
252 } 253 }
253 254
254 desktop_widget->SetBounds(params.parent->bounds()); 255 desktop_widget->SetBounds(params.parent->bounds());
255 return desktop_widget; 256 return desktop_widget;
256 } 257 }
257 258
258 } // namespace ash 259 } // namespace ash
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698