diff options
46 files changed, 181 insertions, 181 deletions
diff --git a/ash/shell/app_list.cc b/ash/shell/app_list.cc index 6d636d9..bf2e8b4 100644 --- a/ash/shell/app_list.cc +++ b/ash/shell/app_list.cc @@ -203,7 +203,8 @@ class ExampleAppListViewDelegate : public app_list::AppListViewDelegate { const string16 icon_text = ASCIIToUTF16("ash"); const gfx::Size icon_size(32, 32); - gfx::Canvas canvas(icon_size, false /* is_opaque */); + gfx::Canvas canvas(icon_size, ui::SCALE_FACTOR_100P, + false /* is_opaque */); canvas.DrawStringInt(icon_text, gfx::Font(), SK_ColorBLACK, @@ -212,7 +213,7 @@ class ExampleAppListViewDelegate : public app_list::AppListViewDelegate { gfx::Canvas::TEXT_VALIGN_MIDDLE | gfx::Canvas::NO_SUBPIXEL_RENDERING); - return gfx::ImageSkia(canvas.ExtractImageSkiaRep()); + return gfx::ImageSkia(canvas.ExtractImageRep()); } void DecorateSearchBox(app_list::SearchBoxModel* search_box_model) { diff --git a/chrome/browser/chromeos/status/network_menu_icon.cc b/chrome/browser/chromeos/status/network_menu_icon.cc index e5a5f72..d546d8a 100644 --- a/chrome/browser/chromeos/status/network_menu_icon.cc +++ b/chrome/browser/chromeos/status/network_menu_icon.cc @@ -233,7 +233,7 @@ class NetworkIconImageSource : public gfx::ImageSkiaSource { icon_.width() - bottom_right_badge_->width(), icon_.height() - bottom_right_badge_->height()); } - return gfx::ImageSkiaRep(canvas.ExtractBitmap(), icon_rep.scale_factor()); + return canvas.ExtractImageRep(); } private: diff --git a/chrome/browser/extensions/extension_icon_manager.cc b/chrome/browser/extensions/extension_icon_manager.cc index 7f57da2..ac47e2f 100644 --- a/chrome/browser/extensions/extension_icon_manager.cc +++ b/chrome/browser/extensions/extension_icon_manager.cc @@ -27,13 +27,15 @@ static SkBitmap ApplyPadding(const SkBitmap& source, const gfx::Insets& padding) { scoped_ptr<gfx::Canvas> result( new gfx::Canvas(gfx::Size(source.width() + padding.width(), - source.height() + padding.height()), false)); + source.height() + padding.height()), + ui::SCALE_FACTOR_100P, + false)); result->DrawImageInt( source, 0, 0, source.width(), source.height(), padding.left(), padding.top(), source.width(), source.height(), false); - return result->ExtractBitmap(); + return result->ExtractImageRep().sk_bitmap(); } } // namespace diff --git a/chrome/browser/profiles/profile_info_util.cc b/chrome/browser/profiles/profile_info_util.cc index 83d38f5..27e3130 100644 --- a/chrome/browser/profiles/profile_info_util.cc +++ b/chrome/browser/profiles/profile_info_util.cc @@ -21,7 +21,8 @@ gfx::Image GetAvatarIconForMenu(const gfx::Image& image, int length = std::min(kAvatarIconWidth, kAvatarIconHeight) - 2; SkBitmap bmp = skia::ImageOperations::Resize( *image.ToSkBitmap(), skia::ImageOperations::RESIZE_BEST, length, length); - gfx::Canvas canvas(gfx::Size(kAvatarIconWidth, kAvatarIconHeight), false); + gfx::Canvas canvas(gfx::Size(kAvatarIconWidth, kAvatarIconHeight), + ui::SCALE_FACTOR_100P, false); // Draw the icon centered on the canvas. int x = (kAvatarIconWidth - length) / 2; @@ -32,7 +33,7 @@ gfx::Image GetAvatarIconForMenu(const gfx::Image& image, SkColor color = SkColorSetARGB(83, 0, 0, 0); canvas.DrawRect(gfx::Rect(x, y, length - 1, length - 1), color); - return gfx::Image(canvas.ExtractBitmap()); + return gfx::Image(canvas.ExtractImageRep()); } gfx::Image GetAvatarIconForWebUI(const gfx::Image& image, @@ -43,14 +44,15 @@ gfx::Image GetAvatarIconForWebUI(const gfx::Image& image, int length = std::min(kAvatarIconWidth, kAvatarIconHeight) - 2; SkBitmap bmp = skia::ImageOperations::Resize( *image.ToSkBitmap(), skia::ImageOperations::RESIZE_BEST, length, length); - gfx::Canvas canvas(gfx::Size(kAvatarIconWidth, kAvatarIconHeight), false); + gfx::Canvas canvas(gfx::Size(kAvatarIconWidth, kAvatarIconHeight), + ui::SCALE_FACTOR_100P, false); // Draw the icon centered on the canvas. int x = (kAvatarIconWidth - length) / 2; int y = (kAvatarIconHeight - length) / 2; canvas.DrawImageInt(bmp, x, y); - return gfx::Image(canvas.ExtractBitmap()); + return gfx::Image(canvas.ExtractImageRep()); } gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image, @@ -64,7 +66,8 @@ gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image, std::min(dst_width, dst_height)) - 2; SkBitmap bmp = skia::ImageOperations::Resize( *image.ToSkBitmap(), skia::ImageOperations::RESIZE_BEST, length, length); - gfx::Canvas canvas(gfx::Size(dst_width, dst_height), false); + gfx::Canvas canvas(gfx::Size(dst_width, dst_height), ui::SCALE_FACTOR_100P, + false); // Draw the icon on the bottom center of the canvas. int x1 = (dst_width - length) / 2; @@ -88,7 +91,7 @@ gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image, canvas.DrawLine(gfx::Point(x2 - 1, y1 + 1), gfx::Point(x2 - 1, y2 - 1), shadow_color); - return gfx::Image(canvas.ExtractBitmap()); + return gfx::Image(canvas.ExtractImageRep()); } } // namespace diff --git a/chrome/browser/tab_contents/thumbnail_generator_unittest.cc b/chrome/browser/tab_contents/thumbnail_generator_unittest.cc index 90d73dd..19cc175 100644 --- a/chrome/browser/tab_contents/thumbnail_generator_unittest.cc +++ b/chrome/browser/tab_contents/thumbnail_generator_unittest.cc @@ -29,7 +29,7 @@ TEST_F(ThumbnailGeneratorTest, CalculateBoringScore_Empty) { TEST_F(ThumbnailGeneratorTest, CalculateBoringScore_SingleColor) { const gfx::Size kSize(20, 10); - gfx::Canvas canvas(kSize, true); + gfx::Canvas canvas(kSize, ui::SCALE_FACTOR_100P, true); // Fill all pixesl in black. canvas.FillRect(gfx::Rect(kSize), SK_ColorBLACK); @@ -42,7 +42,7 @@ TEST_F(ThumbnailGeneratorTest, CalculateBoringScore_SingleColor) { TEST_F(ThumbnailGeneratorTest, CalculateBoringScore_TwoColors) { const gfx::Size kSize(20, 10); - gfx::Canvas canvas(kSize, true); + gfx::Canvas canvas(kSize, ui::SCALE_FACTOR_100P, true); // Fill all pixesl in black. canvas.FillRect(gfx::Rect(kSize), SK_ColorBLACK); // Fill the left half pixels in white. @@ -59,7 +59,7 @@ TEST_F(ThumbnailGeneratorTest, CalculateBoringScore_TwoColors) { TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_TallerThanWide) { // The input bitmap is vertically long. - gfx::Canvas canvas(gfx::Size(40, 90), true); + gfx::Canvas canvas(gfx::Size(40, 90), ui::SCALE_FACTOR_100P, true); SkBitmap bitmap = skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); @@ -76,7 +76,7 @@ TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_TallerThanWide) { TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_WiderThanTall) { // The input bitmap is horizontally long. - gfx::Canvas canvas(gfx::Size(70, 40), true); + gfx::Canvas canvas(gfx::Size(70, 40), ui::SCALE_FACTOR_100P, true); SkBitmap bitmap = skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); @@ -93,7 +93,7 @@ TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_WiderThanTall) { TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_TooWiderThanTall) { // The input bitmap is horizontally very long. - gfx::Canvas canvas(gfx::Size(90, 40), true); + gfx::Canvas canvas(gfx::Size(90, 40), ui::SCALE_FACTOR_100P, true); SkBitmap bitmap = skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); @@ -110,7 +110,7 @@ TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_TooWiderThanTall) { TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_NotClipped) { // The input bitmap is square. - gfx::Canvas canvas(gfx::Size(40, 40), true); + gfx::Canvas canvas(gfx::Size(40, 40), ui::SCALE_FACTOR_100P, true); SkBitmap bitmap = skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); @@ -127,7 +127,7 @@ TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_NotClipped) { TEST_F(ThumbnailGeneratorTest, GetClippedBitmap_NonSquareOutput) { // The input bitmap is square. - gfx::Canvas canvas(gfx::Size(40, 40), true); + gfx::Canvas canvas(gfx::Size(40, 40), ui::SCALE_FACTOR_100P, true); SkBitmap bitmap = skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); diff --git a/chrome/browser/themes/browser_theme_pack.cc b/chrome/browser/themes/browser_theme_pack.cc index d1b843c..bf3f74a 100644 --- a/chrome/browser/themes/browser_theme_pack.cc +++ b/chrome/browser/themes/browser_theme_pack.cc @@ -1009,11 +1009,8 @@ void BrowserThemePack::GenerateTabBackgroundImages(ImageCache* bitmaps) const { int vertical_offset = bitmaps->count(prs_id) ? kRestoredTabVerticalOffset : 0; gfx::Canvas canvas(gfx::Size(bg_tint.width(), bg_tint.height()), + image_rep_to_tint.scale_factor(), false); - SkScalar image_rep_to_tint_scale = - SkFloatToScalar(image_rep_to_tint.GetScale()); - canvas.sk_canvas()->scale(image_rep_to_tint_scale, - image_rep_to_tint_scale); canvas.TileImageInt(bg_tint, 0, vertical_offset, 0, 0, bg_tint_dip_size.width(), bg_tint_dip_size.height()); @@ -1024,9 +1021,7 @@ void BrowserThemePack::GenerateTabBackgroundImages(ImageCache* bitmaps) const { canvas.TileImageInt(*overlay, 0, 0, bg_tint_dip_size.width(), overlay->height()); } - SkBitmap bg_tab = canvas.ExtractBitmap(); - tinted_image.AddRepresentation(gfx::ImageSkiaRep(bg_tab, - image_rep_to_tint.scale_factor())); + tinted_image.AddRepresentation(canvas.ExtractImageRep()); } temp_output[prs_id] = new gfx::Image(tinted_image); diff --git a/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm index e0b77ed..fb52ade 100644 --- a/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm +++ b/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm @@ -105,7 +105,7 @@ class InfobarBridge : public ExtensionInfoBarDelegate::DelegateObserver, scoped_ptr<gfx::Canvas> canvas( new gfx::Canvas( gfx::Size(image_size + kDropArrowLeftMarginPx + drop_image->width(), - image_size), false)); + image_size), ui::SCALE_FACTOR_100P, false)); canvas->DrawImageInt(*icon, 0, 0, icon->width(), icon->height(), 0, 0, image_size, image_size, @@ -113,7 +113,8 @@ class InfobarBridge : public ExtensionInfoBarDelegate::DelegateObserver, canvas->DrawImageInt(*drop_image, image_size + kDropArrowLeftMarginPx, image_size / 2); - [owner_ setButtonImage:gfx::SkBitmapToNSImage(canvas->ExtractBitmap())]; + [owner_ setButtonImage:gfx::SkBitmapToNSImage( + canvas->ExtractImageRep().sk_bitmap())]; } // Overridden from ExtensionInfoBarDelegate::DelegateObserver: diff --git a/chrome/browser/ui/gtk/avatar_menu_item_gtk.cc b/chrome/browser/ui/gtk/avatar_menu_item_gtk.cc index 1510f6c..434fe22 100644 --- a/chrome/browser/ui/gtk/avatar_menu_item_gtk.cc +++ b/chrome/browser/ui/gtk/avatar_menu_item_gtk.cc @@ -213,7 +213,7 @@ void AvatarMenuItemGtk::Init(GtkThemeService* theme_service) { int x = avatar_image->width() - check_image->width() + kCheckMarkXOffset; canvas.DrawImageInt(*check_image, x, y); - SkBitmap final_image = canvas.ExtractBitmap(); + SkBitmap final_image = canvas.ExtractImageRep().sk_bitmap(); avatar_pixbuf = gfx::GdkPixbufFromSkBitmap(final_image); } else { avatar_pixbuf = gfx::GdkPixbufFromSkBitmap(*item_.icon.ToSkBitmap()); diff --git a/chrome/browser/ui/gtk/gtk_theme_service.cc b/chrome/browser/ui/gtk/gtk_theme_service.cc index 8d55010..27af31c 100644 --- a/chrome/browser/ui/gtk/gtk_theme_service.cc +++ b/chrome/browser/ui/gtk/gtk_theme_service.cc @@ -1014,7 +1014,8 @@ SkBitmap GtkThemeService::GenerateFrameImage( DCHECK(it != colors_.end()); SkColor base = it->second; - gfx::Canvas canvas(gfx::Size(kToolbarImageWidth, kToolbarImageHeight), true); + gfx::Canvas canvas(gfx::Size(kToolbarImageWidth, kToolbarImageHeight), + ui::SCALE_FACTOR_100P, true); int gradient_size; GdkColor* gradient_top_color = NULL; @@ -1041,7 +1042,7 @@ SkBitmap GtkThemeService::GenerateFrameImage( canvas.FillRect(gfx::Rect(0, gradient_size, kToolbarImageWidth, kToolbarImageHeight - gradient_size), base); - return canvas.ExtractBitmap(); + return canvas.ExtractImageRep().sk_bitmap(); } SkBitmap GtkThemeService::GenerateTabImage(int base_id) const { diff --git a/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc b/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc index 4e5ff10..4ad5c21 100644 --- a/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc +++ b/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc @@ -85,13 +85,13 @@ void ExtensionInfoBarGtk::OnImageLoaded(const gfx::Image& image, static const int kDropArrowLeftMargin = 3; scoped_ptr<gfx::Canvas> canvas(new gfx::Canvas( gfx::Size(image_size + kDropArrowLeftMargin + drop_image->width(), - image_size), false)); + image_size), ui::SCALE_FACTOR_100P, false)); canvas->DrawImageInt(*icon, 0, 0, icon->width(), icon->height(), 0, 0, image_size, image_size, false); canvas->DrawImageInt(*drop_image, image_size + kDropArrowLeftMargin, image_size / 2); - SkBitmap bitmap = canvas->ExtractBitmap(); + SkBitmap bitmap = canvas->ExtractImageRep().sk_bitmap(); GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(bitmap); gtk_image_set_from_pixbuf(GTK_IMAGE(icon_), pixbuf); g_object_unref(pixbuf); diff --git a/chrome/browser/ui/libgtk2ui/gtk2_ui.cc b/chrome/browser/ui/libgtk2ui/gtk2_ui.cc index e2fede6..15cad58 100644 --- a/chrome/browser/ui/libgtk2ui/gtk2_ui.cc +++ b/chrome/browser/ui/libgtk2ui/gtk2_ui.cc @@ -740,7 +740,8 @@ SkBitmap Gtk2UI::GenerateFrameImage( DCHECK(it != colors_.end()); SkColor base = it->second; - gfx::Canvas canvas(gfx::Size(kToolbarImageWidth, kToolbarImageHeight), true); + gfx::Canvas canvas(gfx::Size(kToolbarImageWidth, kToolbarImageHeight), + ui::SCALE_FACTOR_100P, true); int gradient_size; GdkColor* gradient_top_color = NULL; @@ -767,7 +768,7 @@ SkBitmap Gtk2UI::GenerateFrameImage( canvas.FillRect(gfx::Rect(0, gradient_size, kToolbarImageWidth, kToolbarImageHeight - gradient_size), base); - return canvas.ExtractBitmap(); + return canvas.ExtractImageRep().sk_bitmap(); } SkBitmap Gtk2UI::GenerateTabImage(int base_id) const { diff --git a/chrome/browser/ui/panels/panel_browser_frame_view.cc b/chrome/browser/ui/panels/panel_browser_frame_view.cc index 66bb7c1..d2006d8 100644 --- a/chrome/browser/ui/panels/panel_browser_frame_view.cc +++ b/chrome/browser/ui/panels/panel_browser_frame_view.cc @@ -150,9 +150,9 @@ struct EdgeResources { }; gfx::ImageSkia* CreateImageForColor(SkColor color) { - gfx::Canvas canvas(gfx::Size(1, 1), true); + gfx::Canvas canvas(gfx::Size(1, 1), ui::SCALE_FACTOR_100P, true); canvas.DrawColor(color); - return new gfx::ImageSkia(canvas.ExtractBitmap()); + return new gfx::ImageSkia(canvas.ExtractImageRep()); } const ButtonResources& GetCloseButtonResources() { diff --git a/chrome/browser/ui/panels/panel_browser_window_gtk.cc b/chrome/browser/ui/panels/panel_browser_window_gtk.cc index 1b15f44..d41a773 100644 --- a/chrome/browser/ui/panels/panel_browser_window_gtk.cc +++ b/chrome/browser/ui/panels/panel_browser_window_gtk.cc @@ -48,9 +48,9 @@ const SkColor kDividerColor = SkColorSetRGB(0x2a, 0x2c, 0x2c); const int kMinWindowWidth = 26; gfx::Image* CreateImageForColor(SkColor color) { - gfx::Canvas canvas(gfx::Size(1, 1), true); + gfx::Canvas canvas(gfx::Size(1, 1), ui::SCALE_FACTOR_100P, true); canvas.DrawColor(color); - return new gfx::Image(canvas.ExtractBitmap()); + return new gfx::Image(gfx::ImageSkia(canvas.ExtractImageRep())); } const gfx::Image* GetActiveBackgroundDefaultImage() { diff --git a/chrome/browser/ui/panels/panel_frame_view.cc b/chrome/browser/ui/panels/panel_frame_view.cc index 2cd301f..5eee67d 100644 --- a/chrome/browser/ui/panels/panel_frame_view.cc +++ b/chrome/browser/ui/panels/panel_frame_view.cc @@ -109,9 +109,9 @@ struct EdgeResources { }; gfx::ImageSkia* CreateImageForColor(SkColor color) { - gfx::Canvas canvas(gfx::Size(1, 1), true); + gfx::Canvas canvas(gfx::Size(1, 1), ui::SCALE_FACTOR_100P, true); canvas.DrawColor(color); - return new gfx::ImageSkia(canvas.ExtractBitmap()); + return new gfx::ImageSkia(canvas.ExtractImageRep()); } const EdgeResources& GetFrameEdges() { diff --git a/chrome/browser/ui/panels/taskbar_window_thumbnailer_win.cc b/chrome/browser/ui/panels/taskbar_window_thumbnailer_win.cc index 5eee233..4dfdcdb 100644 --- a/chrome/browser/ui/panels/taskbar_window_thumbnailer_win.cc +++ b/chrome/browser/ui/panels/taskbar_window_thumbnailer_win.cc @@ -128,11 +128,11 @@ SkBitmap* TaskbarWindowThumbnailerWin::CaptureWindowImage() const { int width = bounds.right - bounds.left; int height = bounds.bottom - bounds.top; - gfx::Canvas canvas(gfx::Size(width, height), false); + gfx::Canvas canvas(gfx::Size(width, height), ui::SCALE_FACTOR_100P, false); HDC target_dc = canvas.BeginPlatformPaint(); HDC source_dc = ::GetDC(hwnd_); ::BitBlt(target_dc, 0, 0, width, height, source_dc, 0, 0, SRCCOPY); ::ReleaseDC(hwnd_, source_dc); canvas.EndPlatformPaint(); - return new SkBitmap(canvas.ExtractBitmap()); + return new SkBitmap(canvas.ExtractImageRep().sk_bitmap()); } diff --git a/chrome/browser/ui/views/dropdown_bar_view.cc b/chrome/browser/ui/views/dropdown_bar_view.cc index b811c21..0067779 100644 --- a/chrome/browser/ui/views/dropdown_bar_view.cc +++ b/chrome/browser/ui/views/dropdown_bar_view.cc @@ -111,11 +111,13 @@ void DropdownBarView::OnPaint(gfx::Canvas* canvas) { if (animation_offset() > 0) { gfx::Canvas animating_edges( - gfx::Size(bounds().width(), kAnimatingEdgeHeight), false); + gfx::Size(bounds().width(), kAnimatingEdgeHeight), + canvas->scale_factor(), + false); canvas->Translate(bounds().origin()); OnPaintBackground(&animating_edges); OnPaintBorder(&animating_edges); - canvas->DrawImageInt(animating_edges.ExtractBitmap(), bounds().x(), + canvas->DrawImageInt(animating_edges.ExtractImageRep(), bounds().x(), animation_offset()); } } diff --git a/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc b/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc index e26037b..2fba05a 100644 --- a/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc +++ b/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc @@ -44,7 +44,7 @@ BrowserActionOverflowMenuController::BrowserActionOverflowMenuController( menu_->AppendMenuItemWithIcon( command_id, UTF8ToUTF16(view->button()->extension()->name()), - canvas->ExtractBitmap()); + canvas->ExtractImageRep()); // Set the tooltip for this item. string16 tooltip = UTF8ToUTF16( diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_win.cc b/chrome/browser/ui/views/omnibox/omnibox_view_win.cc index eb131b2..44a6e1a 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_win.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_win.cc @@ -2380,7 +2380,7 @@ void OmniboxViewWin::DrawSlashForInsecureScheme(HDC hdc, // it to fully transparent so any antialiasing will look nice when painted // atop the edit. gfx::Canvas canvas(gfx::Size(scheme_rect.Width(), scheme_rect.Height()), - false); + ui::SCALE_FACTOR_100P, false); SkCanvas* sk_canvas = canvas.sk_canvas(); sk_canvas->getDevice()->accessBitmap(true).eraseARGB(0, 0, 0, 0); diff --git a/chrome/browser/ui/views/tabs/dragged_tab_view.cc b/chrome/browser/ui/views/tabs/dragged_tab_view.cc index 49e1431..cb0ff4d 100644 --- a/chrome/browser/ui/views/tabs/dragged_tab_view.cc +++ b/chrome/browser/ui/views/tabs/dragged_tab_view.cc @@ -133,7 +133,8 @@ gfx::Size DraggedTabView::GetPreferredSize() { void DraggedTabView::PaintDetachedView(gfx::Canvas* canvas) { gfx::Size ps = GetPreferredSize(); - gfx::Canvas scale_canvas(ps, false); + // TODO(pkotwicz): DIP enable this class. + gfx::Canvas scale_canvas(ps, ui::SCALE_FACTOR_100P, false); SkBitmap& bitmap_device = const_cast<SkBitmap&>( skia::GetTopDevice(*scale_canvas.sk_canvas())->accessBitmap(true)); bitmap_device.eraseARGB(0, 0, 0, 0); @@ -153,7 +154,7 @@ void DraggedTabView::PaintDetachedView(gfx::Canvas* canvas) { SkIRect subset; subset.set(0, 0, ps.width(), ps.height()); - SkBitmap mipmap = scale_canvas.ExtractBitmap(); + SkBitmap mipmap = scale_canvas.ExtractImageRep().sk_bitmap(); mipmap.buildMipMap(true); SkShader* bitmap_shader = diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc index 46af013..984b613 100644 --- a/chrome/browser/ui/views/tabs/tab.cc +++ b/chrome/browser/ui/views/tabs/tab.cc @@ -565,7 +565,7 @@ void Tab::PaintInactiveTabBackgroundWithTitleChange(gfx::Canvas* canvas) { gfx::Canvas background_canvas(size(), canvas->scale_factor(), false); PaintInactiveTabBackground(&background_canvas); - gfx::ImageSkia background_image(background_canvas.ExtractImageSkiaRep()); + gfx::ImageSkia background_image(background_canvas.ExtractImageRep()); // Draw a radial gradient to hover_canvas. gfx::Canvas hover_canvas(size(), canvas->scale_factor(), false); @@ -595,7 +595,7 @@ void Tab::PaintInactiveTabBackgroundWithTitleChange(gfx::Canvas* canvas) { // Draw the radial gradient clipped to the background into hover_image. gfx::ImageSkia hover_image = gfx::ImageSkiaOperations::CreateMaskedImage( - gfx::ImageSkia(hover_canvas.ExtractImageSkiaRep()), background_image); + gfx::ImageSkia(hover_canvas.ExtractImageRep()), background_image); // Draw the tab background to the canvas. canvas->DrawImageInt(background_image, 0, 0); @@ -677,11 +677,11 @@ void Tab::PaintInactiveTabBackground(gfx::Canvas* canvas) { height() - drop_shadow_height() - kToolbarOverlap - tab_image->y_offset); canvas->DrawImageInt( - gfx::ImageSkia(background_canvas.ExtractImageSkiaRep()), 0, 0); + gfx::ImageSkia(background_canvas.ExtractImageRep()), 0, 0); if (!GetThemeProvider()->HasCustomImage(tab_id) && hover_controller().ShouldDraw()) { - hover_controller().Draw(canvas, background_canvas.ExtractImageSkiaRep()); + hover_controller().Draw(canvas, background_canvas.ExtractImageRep()); } // Now draw the highlights/shadows around the tab edge. diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc index 1bdccf8..3e773c0 100644 --- a/chrome/browser/ui/views/tabs/tab_strip.cc +++ b/chrome/browser/ui/views/tabs/tab_strip.cc @@ -436,7 +436,7 @@ gfx::ImageSkia NewTabButton::GetBackgroundImage( canvas.FillRect(gfx::Rect(size()), SkColorSetARGB(64, 255, 255, 255)); return gfx::ImageSkiaOperations::CreateMaskedImage( - gfx::ImageSkia(canvas.ExtractImageSkiaRep()), *mask); + gfx::ImageSkia(canvas.ExtractImageRep()), *mask); } gfx::ImageSkia NewTabButton::GetImageForState( @@ -467,7 +467,7 @@ gfx::ImageSkia NewTabButton::GetImageForState( canvas.DrawImageInt(*overlay, 0, 0); canvas.Restore(); - return gfx::ImageSkia(canvas.ExtractImageSkiaRep()); + return gfx::ImageSkia(canvas.ExtractImageRep()); } gfx::ImageSkia NewTabButton::GetImage(ui::ScaleFactor scale_factor) const { diff --git a/chrome/browser/ui/views/theme_helpers.cc b/chrome/browser/ui/views/theme_helpers.cc index 954a745..833f49c 100644 --- a/chrome/browser/ui/views/theme_helpers.cc +++ b/chrome/browser/ui/views/theme_helpers.cc @@ -23,7 +23,7 @@ void GetRebarGradientColors(int width, int x1, int x2, // those so calling code can use them to create gradient brushes for use in // rendering in other directions. - gfx::Canvas canvas(gfx::Size(width, 1), true); + gfx::Canvas canvas(gfx::Size(width, 1), ui::SCALE_FACTOR_100P, true); // Render the Rebar gradient into the DIB CTheme theme; diff --git a/chrome/browser/ui/webui/ntp/ntp_login_handler.cc b/chrome/browser/ui/webui/ntp/ntp_login_handler.cc index e391b54..14ea6fa 100644 --- a/chrome/browser/ui/webui/ntp/ntp_login_handler.cc +++ b/chrome/browser/ui/webui/ntp/ntp_login_handler.cc @@ -60,14 +60,15 @@ SkBitmap GetGAIAPictureForNTP(const gfx::Image& image) { SkBitmap bmp = skia::ImageOperations::Resize(*image.ToSkBitmap(), skia::ImageOperations::RESIZE_BEST, kLength, kLength); - gfx::Canvas canvas(gfx::Size(kLength, kLength), false); + gfx::Canvas canvas(gfx::Size(kLength, kLength), ui::SCALE_FACTOR_100P, + false); canvas.DrawImageInt(bmp, 0, 0); // Draw a gray border on the inside of the icon. SkColor color = SkColorSetARGB(83, 0, 0, 0); canvas.DrawRect(gfx::Rect(0, 0, kLength - 1, kLength - 1), color); - return canvas.ExtractBitmap(); + return canvas.ExtractImageRep().sk_bitmap(); } // Puts the |content| into a span with the given CSS class. diff --git a/chrome/common/badge_util.cc b/chrome/common/badge_util.cc index 3859a72..42668e8 100644 --- a/chrome/common/badge_util.cc +++ b/chrome/common/badge_util.cc @@ -84,8 +84,8 @@ SkBitmap DrawBadgeIconOverlay(const SkBitmap& icon, badge_width--; // Render the badge bitmap and overlay into a canvas. - scoped_ptr<gfx::Canvas> canvas( - new gfx::Canvas(gfx::Size(badge_width, icon.height()), false)); + scoped_ptr<gfx::Canvas> canvas(new gfx::Canvas( + gfx::Size(badge_width, icon.height()), ui::SCALE_FACTOR_100P, false)); canvas->DrawImageInt(icon, 0, 0); // Draw the text overlay centered horizontally and vertically. Skia expects @@ -97,7 +97,7 @@ SkBitmap DrawBadgeIconOverlay(const SkBitmap& icon, badge_text.c_str(), badge_text.size(), x, y, *paint); // Return the generated image. - return canvas->ExtractBitmap(); + return canvas->ExtractImageRep().sk_bitmap(); } } // namespace badge_util diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc index 79c4e47..c425877 100644 --- a/chrome/renderer/print_web_view_helper.cc +++ b/chrome/renderer/print_web_view_helper.cc @@ -453,8 +453,9 @@ void PrintHeaderFooterText( SkMatrix m = canvas->getTotalMatrix(); ui::ScaleFactor device_scale_factor = ui::GetScaleFactorFromScale( SkScalarAbs(m.getScaleX())); - gfx::Canvas gfx_canvas(canvas, device_scale_factor, false); - paint->Draw(&gfx_canvas); + scoped_ptr<gfx::Canvas> gfx_canvas(gfx::Canvas::CreateCanvasWithoutScaling( + canvas, device_scale_factor)); + paint->Draw(gfx_canvas.get()); } #else // TODO(arthurhsu): following code has issues with i18n BiDi, see diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc index e0e46bb..37e1e63 100644 --- a/content/browser/renderer_host/render_widget_host_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_unittest.cc @@ -489,7 +489,7 @@ TEST_F(RenderWidgetHostTest, Background) { host_->SetView(view.get()); // Create a checkerboard background to test with. - gfx::Canvas canvas(gfx::Size(4, 4), true); + gfx::Canvas canvas(gfx::Size(4, 4), ui::SCALE_FACTOR_100P, true); canvas.FillRect(gfx::Rect(0, 0, 2, 2), SK_ColorBLACK); canvas.FillRect(gfx::Rect(2, 0, 2, 2), SK_ColorWHITE); canvas.FillRect(gfx::Rect(0, 2, 2, 2), SK_ColorWHITE); diff --git a/content/browser/renderer_host/render_widget_host_view_win.cc b/content/browser/renderer_host/render_widget_host_view_win.cc index 9149c23..d4b532d 100644 --- a/content/browser/renderer_host/render_widget_host_view_win.cc +++ b/content/browser/renderer_host/render_widget_host_view_win.cc @@ -1545,7 +1545,7 @@ void RenderWidgetHostViewWin::DrawBackground(const RECT& dirty_rect, CPaintDC* dc) { if (!background_.empty()) { gfx::Rect dirty_area(dirty_rect); - gfx::Canvas canvas(dirty_area.size(), true); + gfx::Canvas canvas(dirty_area.size(), ui::SCALE_FACTOR_100P, true); canvas.Translate(gfx::Point().Subtract(dirty_area.origin())); gfx::Rect dc_rect(dc->m_ps.rcPaint); diff --git a/ui/base/clipboard/clipboard_gtk.cc b/ui/base/clipboard/clipboard_gtk.cc index 78eebba..6199afa 100644 --- a/ui/base/clipboard/clipboard_gtk.cc +++ b/ui/base/clipboard/clipboard_gtk.cc @@ -564,14 +564,16 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const { return SkBitmap(); gfx::Canvas canvas(gfx::Size(gdk_pixbuf_get_width(pixbuf.get()), - gdk_pixbuf_get_height(pixbuf.get())), false); + gdk_pixbuf_get_height(pixbuf.get())), + ui::SCALE_FACTOR_100P, + false); { skia::ScopedPlatformPaint scoped_platform_paint(canvas.sk_canvas()); cairo_t* context = scoped_platform_paint.GetPlatformSurface(); gdk_cairo_set_source_pixbuf(context, pixbuf.get(), 0.0, 0.0); cairo_paint(context); } - return canvas.ExtractBitmap(); + return canvas.ExtractImageRep().sk_bitmap(); } void Clipboard::ReadCustomData(Buffer buffer, diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm index 7d0bea1..0367448 100644 --- a/ui/base/clipboard/clipboard_mac.mm +++ b/ui/base/clipboard/clipboard_mac.mm @@ -349,7 +349,7 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const { int width = [image size].width; int height = [image size].height; - gfx::Canvas canvas(gfx::Size(width, height), false); + gfx::Canvas canvas(gfx::Size(width, height), ui::SCALE_FACTOR_100P, false); { skia::ScopedPlatformPaint scoped_platform_paint(canvas.sk_canvas()); CGContextRef gc = scoped_platform_paint.GetPlatformSurface(); @@ -361,7 +361,7 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const { operation:NSCompositeCopy fraction:1.0]; } - return canvas.ExtractBitmap(); + return canvas.ExtractImageRep().sk_bitmap(); } void Clipboard::ReadCustomData(Buffer buffer, diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc index 3fa071f..6ea0cb1 100644 --- a/ui/base/clipboard/clipboard_win.cc +++ b/ui/base/clipboard/clipboard_win.cc @@ -564,7 +564,9 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const { + bitmap->bmiHeader.biSize + color_table_length * sizeof(RGBQUAD); gfx::Canvas canvas(gfx::Size(bitmap->bmiHeader.biWidth, - bitmap->bmiHeader.biHeight), false); + bitmap->bmiHeader.biHeight), + ui::SCALE_FACTOR_100P, + false); { skia::ScopedPlatformPaint scoped_platform_paint(canvas.sk_canvas()); HDC dc = scoped_platform_paint.GetPlatformSurface(); @@ -592,7 +594,7 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const { } } - return canvas.ExtractBitmap(); + return canvas.ExtractImageRep().sk_bitmap(); } void Clipboard::ReadCustomData(Buffer buffer, diff --git a/ui/base/dragdrop/drag_utils.cc b/ui/base/dragdrop/drag_utils.cc index 910fda13..34f4f93 100644 --- a/ui/base/dragdrop/drag_utils.cc +++ b/ui/base/dragdrop/drag_utils.cc @@ -102,7 +102,7 @@ void SetDragImageOnDataObject(const gfx::Canvas& canvas, const gfx::Size& size, const gfx::Point& cursor_offset, ui::OSExchangeData* data_object) { - gfx::ImageSkia image = gfx::ImageSkia(canvas.ExtractImageSkiaRep()); + gfx::ImageSkia image = gfx::ImageSkia(canvas.ExtractImageRep()); SetDragImageOnDataObject(image, size, cursor_offset, data_object); } diff --git a/ui/base/native_theme/native_theme_android.cc b/ui/base/native_theme/native_theme_android.cc index d507ade..79b1067 100644 --- a/ui/base/native_theme/native_theme_android.cc +++ b/ui/base/native_theme/native_theme_android.cc @@ -8,6 +8,7 @@ #include "base/basictypes.h" #include "base/logging.h" +#include "base/memory/scoped_ptr.h" #include "grit/ui_resources.h" #include "third_party/skia/include/effects/SkGradientShader.h" #include "ui/base/layout.h" @@ -670,8 +671,9 @@ void NativeThemeAndroid::DrawImageInt(SkCanvas* sk_canvas, SkMatrix m = sk_canvas->getTotalMatrix(); ui::ScaleFactor device_scale_factor = ui::GetScaleFactorFromScale( SkScalarAbs(m.getScaleX())); - gfx::Canvas canvas(sk_canvas, device_scale_factor, false); - canvas.DrawImageInt(image, src_x, src_y, src_w, src_h, + scoped_ptr<gfx::Canvas> canvas(gfx::Canvas::CreateCanvasWithoutScaling( + sk_canvas, device_scale_factor)); + canvas->DrawImageInt(image, src_x, src_y, src_w, src_h, dest_x, dest_y, dest_w, dest_h, true); } @@ -690,8 +692,9 @@ void NativeThemeAndroid::DrawTiledImage(SkCanvas* sk_canvas, SkMatrix m = sk_canvas->getTotalMatrix(); ui::ScaleFactor device_scale_factor = ui::GetScaleFactorFromScale( SkScalarAbs(m.getScaleX())); - gfx::Canvas canvas(sk_canvas, device_scale_factor, false); - canvas.TileImageInt(image, src_x, src_y, tile_scale_x, + scoped_ptr<gfx::Canvas> canvas(gfx::Canvas::CreateCanvasWithoutScaling( + sk_canvas, device_scale_factor)); + canvas->TileImageInt(image, src_x, src_y, tile_scale_x, tile_scale_y, dest_x, dest_y, w, h); } diff --git a/ui/base/native_theme/native_theme_base.cc b/ui/base/native_theme/native_theme_base.cc index eab57e0..57b0a4e 100644 --- a/ui/base/native_theme/native_theme_base.cc +++ b/ui/base/native_theme/native_theme_base.cc @@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/logging.h" +#include "base/memory/scoped_ptr.h" #include "grit/ui_resources.h" #include "third_party/skia/include/effects/SkGradientShader.h" #include "ui/base/layout.h" @@ -1020,8 +1021,9 @@ void NativeThemeBase::DrawImageInt( SkMatrix m = sk_canvas->getTotalMatrix(); ui::ScaleFactor device_scale_factor = ui::GetScaleFactorFromScale( SkScalarAbs(m.getScaleX())); - gfx::Canvas canvas(sk_canvas, device_scale_factor, false); - canvas.DrawImageInt(image, src_x, src_y, src_w, src_h, + scoped_ptr<gfx::Canvas> canvas(gfx::Canvas::CreateCanvasWithoutScaling( + sk_canvas, device_scale_factor)); + canvas->DrawImageInt(image, src_x, src_y, src_w, src_h, dest_x, dest_y, dest_w, dest_h, true); } @@ -1034,8 +1036,9 @@ void NativeThemeBase::DrawTiledImage(SkCanvas* sk_canvas, SkMatrix m = sk_canvas->getTotalMatrix(); ui::ScaleFactor device_scale_factor = ui::GetScaleFactorFromScale( SkScalarAbs(m.getScaleX())); - gfx::Canvas canvas(sk_canvas, device_scale_factor, false); - canvas.TileImageInt(image, src_x, src_y, tile_scale_x, + scoped_ptr<gfx::Canvas> canvas(gfx::Canvas::CreateCanvasWithoutScaling( + sk_canvas, device_scale_factor)); + canvas->TileImageInt(image, src_x, src_y, tile_scale_x, tile_scale_y, dest_x, dest_y, w, h); } diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc index a3ae747..6c30d52 100644 --- a/ui/compositor/layer.cc +++ b/ui/compositor/layer.cc @@ -488,11 +488,19 @@ void Layer::paintContents(WebKit::WebCanvas* web_canvas, WebKit::WebRect& opaque) { #endif TRACE_EVENT0("ui", "Layer::paintContents"); - gfx::Canvas canvas(web_canvas, - ui::GetScaleFactorFromScale(device_scale_factor_), scale_content_); + scoped_ptr<gfx::Canvas> canvas(gfx::Canvas::CreateCanvasWithoutScaling( + web_canvas, ui::GetScaleFactorFromScale(device_scale_factor_))); + + if (scale_content_) { + canvas->Save(); + canvas->sk_canvas()->scale(SkFloatToScalar(device_scale_factor_), + SkFloatToScalar(device_scale_factor_)); + } if (delegate_) - delegate_->OnPaintLayer(&canvas); + delegate_->OnPaintLayer(canvas.get()); + if (scale_content_) + canvas->Restore(); } unsigned Layer::prepareTexture(WebKit::WebTextureUpdater& /* updater */) { diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc index c72bdd4..08623a7 100644 --- a/ui/compositor/layer_unittest.cc +++ b/ui/compositor/layer_unittest.cc @@ -238,8 +238,8 @@ class TestLayerDelegate : public LayerDelegate { // Overridden from LayerDelegate: virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE { - SkBitmap contents = canvas->ExtractBitmap(); - paint_size_ = gfx::Size(contents.width(), contents.height()); + gfx::ImageSkiaRep contents = canvas->ExtractImageRep(); + paint_size_ = gfx::Size(contents.pixel_width(), contents.pixel_height()); canvas->FillRect(gfx::Rect(paint_size_), colors_[color_index_]); color_index_ = (color_index_ + 1) % static_cast<int>(colors_.size()); const SkMatrix& matrix = canvas->sk_canvas()->getTotalMatrix(); diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc index 26f2e30..1a87c73 100644 --- a/ui/gfx/canvas.cc +++ b/ui/gfx/canvas.cc @@ -22,23 +22,12 @@ namespace gfx { -Canvas::Canvas(const gfx::Size& size, bool is_opaque) - : owned_canvas_(new skia::PlatformCanvas(size.width(), size.height(), - is_opaque)), - canvas_(owned_canvas_.get()) { -#if defined(OS_WIN) || defined(OS_MACOSX) - // skia::PlatformCanvas instances are initialized to 0 by Cairo on Linux, but - // uninitialized on Win and Mac. - if (!is_opaque) - owned_canvas_->clear(SkColorSetARGB(0, 0, 0, 0)); -#endif - - ApplyScaleFactor(ui::SCALE_FACTOR_100P, false); -} - Canvas::Canvas(const gfx::Size& size, ui::ScaleFactor scale_factor, - bool is_opaque) { + bool is_opaque) + : scale_factor_(scale_factor), + owned_canvas_(NULL), + canvas_(NULL) { gfx::Size pixel_size = size.Scale(ui::GetScaleFactorScale(scale_factor)); owned_canvas_.reset(new skia::PlatformCanvas(pixel_size.width(), pixel_size.height(), @@ -51,50 +40,47 @@ Canvas::Canvas(const gfx::Size& size, owned_canvas_->clear(SkColorSetARGB(0, 0, 0, 0)); #endif - ApplyScaleFactor(scale_factor, true); + SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor)); + canvas_->scale(scale, scale); } Canvas::Canvas(const gfx::ImageSkiaRep& image_rep, bool is_opaque) - : owned_canvas_(new skia::PlatformCanvas(image_rep.pixel_width(), + : scale_factor_(image_rep.scale_factor()), + owned_canvas_(new skia::PlatformCanvas(image_rep.pixel_width(), image_rep.pixel_height(), is_opaque)), canvas_(owned_canvas_.get()) { - ApplyScaleFactor(image_rep.scale_factor(), true); + SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_)); + canvas_->scale(scale, scale); DrawImageInt(gfx::ImageSkia(image_rep), 0, 0); } Canvas::Canvas() - : owned_canvas_(new skia::PlatformCanvas()), + : scale_factor_(ui::SCALE_FACTOR_100P), + owned_canvas_(new skia::PlatformCanvas()), canvas_(owned_canvas_.get()) { - ApplyScaleFactor(ui::SCALE_FACTOR_100P, false); } -Canvas::Canvas(SkCanvas* canvas, - ui::ScaleFactor scale_factor, - bool scale_canvas) - : owned_canvas_(), - canvas_(canvas) { - DCHECK(canvas); - ApplyScaleFactor(scale_factor, scale_canvas); +Canvas::~Canvas() { } -Canvas::~Canvas() { - if (scale_factor_scales_canvas_) { - SkScalar scale = 1.0f / ui::GetScaleFactorScale(scale_factor_); - canvas_->scale(scale, scale); - } +// static +Canvas* Canvas::CreateCanvasWithoutScaling(SkCanvas* canvas, + ui::ScaleFactor scale_factor) { + return new Canvas(canvas, scale_factor); } void Canvas::RecreateBackingCanvas(const gfx::Size& size, ui::ScaleFactor scale_factor, bool is_opaque) { + scale_factor_ = scale_factor; gfx::Size pixel_size = size.Scale(ui::GetScaleFactorScale(scale_factor)); owned_canvas_.reset(new skia::PlatformCanvas(pixel_size.width(), pixel_size.height(), is_opaque)); canvas_ = owned_canvas_.get(); - - ApplyScaleFactor(scale_factor, true); + SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_)); + canvas_->scale(scale, scale); } // static @@ -109,7 +95,7 @@ int Canvas::DefaultCanvasTextAlignment() { return base::i18n::IsRTL() ? TEXT_ALIGN_RIGHT : TEXT_ALIGN_LEFT; } -SkBitmap Canvas::ExtractBitmap() const { +gfx::ImageSkiaRep Canvas::ExtractImageRep() const { const SkBitmap& device_bitmap = canvas_->getDevice()->accessBitmap(false); // Make a bitmap to return, and a canvas to draw into it. We don't just want @@ -117,11 +103,8 @@ SkBitmap Canvas::ExtractBitmap() const { // of the bitmap. SkBitmap result; device_bitmap.copyTo(&result, SkBitmap::kARGB_8888_Config); - return result; -} -gfx::ImageSkiaRep Canvas::ExtractImageSkiaRep() const { - return gfx::ImageSkiaRep(ExtractBitmap(), scale_factor_); + return gfx::ImageSkiaRep(result, scale_factor_); } void Canvas::DrawDashedRect(const gfx::Rect& rect, SkColor color) { @@ -501,6 +484,13 @@ void Canvas::Transform(const ui::Transform& transform) { canvas_->concat(transform.matrix()); } +Canvas::Canvas(SkCanvas* canvas, ui::ScaleFactor scale_factor) + : scale_factor_(scale_factor), + owned_canvas_(), + canvas_(canvas) { + DCHECK(canvas); +} + bool Canvas::IntersectsClipRectInt(int x, int y, int w, int h) { SkRect clip; return canvas_->getClipBounds(&clip) && @@ -513,16 +503,6 @@ bool Canvas::IntersectsClipRect(const gfx::Rect& rect) { rect.width(), rect.height()); } -void Canvas::ApplyScaleFactor(ui::ScaleFactor scale_factor, - bool scale_canvas) { - scale_factor_scales_canvas_ = scale_canvas; - scale_factor_ = scale_factor; - if (scale_canvas) { - SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor)); - canvas_->scale(scale, scale); - } -} - const gfx::ImageSkiaRep& Canvas::GetImageRepToPaint( const gfx::ImageSkia& image) const { return GetImageRepToPaint(image, 1.0f, 1.0f); diff --git a/ui/gfx/canvas.h b/ui/gfx/canvas.h index 8256412..700d7d2 100644 --- a/ui/gfx/canvas.h +++ b/ui/gfx/canvas.h @@ -99,12 +99,6 @@ class UI_EXPORT Canvas { // Creates an empty canvas with scale factor of 1x. Canvas(); - // Creates canvas with provided DIP |size| and a scale factor of 1x. - // If this canvas is not opaque, it's explicitly cleared to transparent before - // being returned. - // TODO(pkotwicz): Remove this constructor. - Canvas(const gfx::Size& size, bool is_opaque); - // Creates canvas with provided DIP |size| and |scale_factor|. // If this canvas is not opaque, it's explicitly cleared to transparent before // being returned. @@ -116,14 +110,14 @@ class UI_EXPORT Canvas { // provided |image_rep|, and draws the |image_rep| into it. Canvas(const gfx::ImageSkiaRep& image_rep, bool is_opaque); - // Sets scale factor to |scale_factor|. - // Only scales canvas if |scale_canvas| is true. - Canvas(SkCanvas* canvas, - ui::ScaleFactor scale_factor, - bool scale_canvas); - virtual ~Canvas(); + // Creates a gfx::Canvas backed by an |sk_canvas| with |scale_factor|. + // |sk_canvas| is assumed to be already scaled based on |scale_factor| + // so no additional scaling is applied. + static Canvas* CreateCanvasWithoutScaling(SkCanvas* sk_canvas, + ui::ScaleFactor scale_factor); + // Recreates the backing platform canvas with DIP |size| and |scale_factor|. // If the canvas is not opaque, it is explicitly cleared. // This method is public so that canvas_skia_paint can recreate the platform @@ -172,13 +166,8 @@ class UI_EXPORT Canvas { int x, int y, int w, int h, int flags); - // Extracts a bitmap from the contents of this canvas. - // TODO(pkotwicz): Remove ExtractBitmap once all callers use - // ExtractImageSkiaRep instead. - SkBitmap ExtractBitmap() const; - // Extracts an ImageSkiaRep from the contents of this canvas. - gfx::ImageSkiaRep ExtractImageSkiaRep() const; + gfx::ImageSkiaRep ExtractImageRep() const; // Draws a dashed rectangle of the specified color. void DrawDashedRect(const gfx::Rect& rect, SkColor color); @@ -388,16 +377,12 @@ class UI_EXPORT Canvas { ui::ScaleFactor scale_factor() const { return scale_factor_; } private: + Canvas(SkCanvas* canvas, ui::ScaleFactor scale_factor); + // Test whether the provided rectangle intersects the current clip rect. bool IntersectsClipRectInt(int x, int y, int w, int h); bool IntersectsClipRect(const gfx::Rect& rect); - // Sets the canvas' scale factor to |scale_factor|. This affects - // the scale factor at which drawing bitmaps occurs and the scale factor of - // the image rep returned by Canvas::ExtractImageSkiaRep(). - // If |scale_canvas| is true, scales the canvas by |scale_factor|. - void ApplyScaleFactor(ui::ScaleFactor scale_factor, bool scale_canvas); - // Returns the image rep which best matches the canvas |scale_factor_|. // Returns a null image rep if |image| contains no image reps. // Builds mip map for returned image rep if necessary. @@ -410,18 +395,14 @@ class UI_EXPORT Canvas { float user_defined_scale_factor_x, float user_defined_scale_factor_y) const; - scoped_ptr<skia::PlatformCanvas> owned_canvas_; - SkCanvas* canvas_; - - // True if the scale factor scales the canvas and the inverse - // canvas scale should be applied when the destructor is called. - bool scale_factor_scales_canvas_; - // The device scale factor at which drawing on this canvas occurs. // An additional scale can be applied via Canvas::Scale(). However, // Canvas::Scale() does not affect |scale_factor_|. ui::ScaleFactor scale_factor_; + scoped_ptr<skia::PlatformCanvas> owned_canvas_; + SkCanvas* canvas_; + DISALLOW_COPY_AND_ASSIGN(Canvas); }; diff --git a/ui/gfx/canvas_linux.cc b/ui/gfx/canvas_linux.cc index 9d417c9..c2a4eec 100644 --- a/ui/gfx/canvas_linux.cc +++ b/ui/gfx/canvas_linux.cc @@ -112,7 +112,7 @@ void DrawStringContext::Draw(SkColor text_color) { void DrawStringContext::DrawWithHalo(SkColor text_color, SkColor halo_color) { gfx::Size size(bounds_.width() + 2, bounds_.height() + 2); - gfx::Canvas text_canvas(size, false); + gfx::Canvas text_canvas(size, scale_factor(), false); text_canvas.FillRect(gfx::Rect(size), static_cast<SkColor>(0)); { @@ -157,7 +157,9 @@ void DrawStringContext::DrawWithHalo(SkColor text_color, const SkBitmap& text_bitmap = const_cast<SkBitmap&>( skia::GetTopDevice(*text_canvas.sk_canvas())->accessBitmap(false)); - canvas_->DrawImageInt(text_bitmap, text_rect_.x() - 1, text_rect_.y() - 1); + const gfx::ImageSkia text_image = gfx::ImageSkia(gfx::ImageSkiaRep( + text_bitmap, text_canvas.scale_factor())); + canvas_->DrawImageInt(text_image, text_rect_.x() - 1, text_rect_.y() - 1); } void DrawStringContext::DrawUnderline(cairo_t* cr, double extra_edge_width) { diff --git a/ui/gfx/canvas_skia.cc b/ui/gfx/canvas_skia.cc index 918842b..4a6ef61 100644 --- a/ui/gfx/canvas_skia.cc +++ b/ui/gfx/canvas_skia.cc @@ -377,7 +377,7 @@ void Canvas::DrawStringWithHalo(const string16& text, // Create a temporary buffer filled with the halo color. It must leave room // for the 1-pixel border around the text. Size size(w + 2, h + 2); - Canvas text_canvas(size, true); + Canvas text_canvas(size, scale_factor(), true); SkPaint bkgnd_paint; bkgnd_paint.setColor(halo_color); text_canvas.DrawRect(gfx::Rect(size), bkgnd_paint); @@ -390,9 +390,9 @@ void Canvas::DrawStringWithHalo(const string16& text, SkBitmap& text_bitmap = const_cast<SkBitmap&>( skia::GetTopDevice(*text_canvas.sk_canvas())->accessBitmap(true)); - for (int cur_y = 0; cur_y < h + 2; cur_y++) { + for (int cur_y = 0; cur_y < text_bitmap.height(); cur_y++) { uint32_t* text_row = text_bitmap.getAddr32(0, cur_y); - for (int cur_x = 0; cur_x < w + 2; cur_x++) { + for (int cur_x = 0; cur_x < text_bitmap.width(); cur_x++) { if (text_row[cur_x] == halo_premul) { // This pixel was not touched by the text routines. See if it borders // a touched pixel in any of the 4 directions (not diagonally). @@ -405,7 +405,9 @@ void Canvas::DrawStringWithHalo(const string16& text, } // Draw the halo bitmap with blur. - DrawImageInt(text_bitmap, x - 1, y - 1); + gfx::ImageSkia text_image = gfx::ImageSkia(gfx::ImageSkiaRep(text_bitmap, + text_canvas.scale_factor())); + DrawImageInt(text_image, x - 1, y - 1); } void Canvas::DrawFadeTruncatingString( diff --git a/ui/gfx/image/canvas_image_source.cc b/ui/gfx/image/canvas_image_source.cc index 38f6db8..747625a 100644 --- a/ui/gfx/image/canvas_image_source.cc +++ b/ui/gfx/image/canvas_image_source.cc @@ -22,7 +22,7 @@ gfx::ImageSkiaRep CanvasImageSource::GetImageForScale( ui::ScaleFactor scale_factor) { gfx::Canvas canvas(size_, scale_factor, is_opaque_); Draw(&canvas); - return canvas.ExtractImageSkiaRep(); + return canvas.ExtractImageRep(); } } // namespace gfx diff --git a/ui/gfx/image/image.cc b/ui/gfx/image/image.cc index c5d30a2..ea302ab 100644 --- a/ui/gfx/image/image.cc +++ b/ui/gfx/image/image.cc @@ -32,12 +32,14 @@ namespace internal { const ImageSkia ImageSkiaFromGdkPixbuf(GdkPixbuf* pixbuf) { CHECK(pixbuf); gfx::Canvas canvas(gfx::Size(gdk_pixbuf_get_width(pixbuf), - gdk_pixbuf_get_height(pixbuf)), false); + gdk_pixbuf_get_height(pixbuf)), + ui::SCALE_FACTOR_100P, + false); skia::ScopedPlatformPaint scoped_platform_paint(canvas.sk_canvas()); cairo_t* cr = scoped_platform_paint.GetPlatformSurface(); gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0); cairo_paint(cr); - return ImageSkia(SkBitmap(canvas.ExtractBitmap())); + return ImageSkia(canvas.ExtractImageRep()); } #endif diff --git a/ui/views/controls/glow_hover_controller.cc b/ui/views/controls/glow_hover_controller.cc index e86be4d..71785f0 100644 --- a/ui/views/controls/glow_hover_controller.cc +++ b/ui/views/controls/glow_hover_controller.cc @@ -98,7 +98,7 @@ void GlowHoverController::Draw(gfx::Canvas* canvas, radius * 2, radius * 2), paint); } gfx::ImageSkia result = gfx::ImageSkiaOperations::CreateMaskedImage( - gfx::ImageSkia(hover_canvas.ExtractImageSkiaRep()), mask_image); + gfx::ImageSkia(hover_canvas.ExtractImageRep()), mask_image); canvas->DrawImageInt(result, (view_->width() - mask_image.width()) / 2, (view_->height() - mask_image.height()) / 2); } diff --git a/ui/views/controls/menu/native_menu_win.cc b/ui/views/controls/menu/native_menu_win.cc index c04a2bd..44df996 100644 --- a/ui/views/controls/menu/native_menu_win.cc +++ b/ui/views/controls/menu/native_menu_win.cc @@ -281,6 +281,7 @@ class NativeMenuWin::MenuHostWindow { (height - kItemTopMargin - kItemBottomMargin - config.check_height) / 2; gfx::Canvas canvas(gfx::Size(config.check_width, config.check_height), + ui::SCALE_FACTOR_100P, false); NativeTheme::ExtraParams extra; extra.menu_check.is_radio = false; diff --git a/ui/views/controls/table/table_view_win.cc b/ui/views/controls/table/table_view_win.cc index e9b8765..1538dd8 100644 --- a/ui/views/controls/table/table_view_win.cc +++ b/ui/views/controls/table/table_view_win.cc @@ -809,10 +809,11 @@ HWND TableView::CreateNativeControl(HWND parent_container) { // We create 2 phony images because we are going to switch images at every // refresh in order to force a refresh of the icon area (somehow the clip // rect does not include the icon). - gfx::Canvas canvas(gfx::Size(kImageSize, kImageSize), false); + gfx::Canvas canvas(gfx::Size(kImageSize, kImageSize), ui::SCALE_FACTOR_100P, + false); { - base::win::ScopedHICON empty_icon( - IconUtil::CreateHICONFromSkBitmap(canvas.ExtractBitmap())); + base::win::ScopedHICON empty_icon(IconUtil::CreateHICONFromSkBitmap( + canvas.ExtractImageRep().sk_bitmap())); ImageList_AddIcon(image_list, empty_icon); ImageList_AddIcon(image_list, empty_icon); } @@ -1154,7 +1155,7 @@ void TableView::PaintAltText() { HDC dc = GetDC(GetNativeControlHWND()); gfx::Font font = GetAltTextFont(); gfx::Rect bounds = GetAltTextBounds(); - gfx::Canvas canvas(bounds.size(), false); + gfx::Canvas canvas(bounds.size(), ui::SCALE_FACTOR_100P, false); // Pad by 1 for halo. canvas.DrawStringWithHalo(alt_text_, font, SK_ColorDKGRAY, SK_ColorWHITE, 1, 1, bounds.width() - 2, bounds.height() - 2, @@ -1240,6 +1241,7 @@ LRESULT TableView::OnCustomDraw(NMLVCUSTOMDRAW* draw_info) { if (IntersectRect(&intersection, &icon_rect, &client_rect)) { gfx::Canvas canvas(gfx::Size(icon_rect.right - icon_rect.left, icon_rect.bottom - icon_rect.top), + ui::SCALE_FACTOR_100P, false); // It seems the state in nmcd.uItemState is not correct. diff --git a/ui/views/controls/tree/tree_view_win.cc b/ui/views/controls/tree/tree_view_win.cc index 5a81519..8fa702a 100644 --- a/ui/views/controls/tree/tree_view_win.cc +++ b/ui/views/controls/tree/tree_view_win.cc @@ -691,13 +691,15 @@ HIMAGELIST TreeView::CreateImageList() { // IDR_FOLDER_CLOSED if they aren't already. if (model_images[i].width() != width || model_images[i].height() != height) { - gfx::Canvas canvas(gfx::Size(width, height), false); + gfx::Canvas canvas(gfx::Size(width, height), ui::SCALE_FACTOR_100P, + false); // Draw our icons into this canvas. int height_offset = (height - model_images[i].height()) / 2; int width_offset = (width - model_images[i].width()) / 2; canvas.DrawImageInt(model_images[i], width_offset, height_offset); - model_icon = IconUtil::CreateHICONFromSkBitmap(canvas.ExtractBitmap()); + model_icon = IconUtil::CreateHICONFromSkBitmap( + canvas.ExtractImageRep().sk_bitmap()); } else { model_icon = IconUtil::CreateHICONFromSkBitmap(model_images[i]); } diff --git a/ui/views/widget/native_widget_win.cc b/ui/views/widget/native_widget_win.cc index b04bc7f..6b832f4 100644 --- a/ui/views/widget/native_widget_win.cc +++ b/ui/views/widget/native_widget_win.cc @@ -2511,7 +2511,8 @@ void NativeWidgetWin::ClientAreaSizeChanged() { std::max(0, static_cast<int>(r.bottom - r.top))); delegate_->OnNativeWidgetSizeChanged(s); if (use_layered_buffer_) - layered_window_contents_.reset(new gfx::Canvas(s, false)); + layered_window_contents_.reset( + new gfx::Canvas(s, ui::SCALE_FACTOR_100P, false)); } void NativeWidgetWin::UpdateDWMFrame() { |