| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/message_center/views/proportional_image_view.h" |
| |
| #include "ui/gfx/canvas.h" |
| #include "ui/gfx/image/image_skia_operations.h" |
| #include "ui/message_center/message_center_style.h" |
| |
| namespace message_center { |
| |
| const char ProportionalImageView::kViewClassName[] = "ProportionalImageView"; |
| |
| ProportionalImageView::ProportionalImageView(const gfx::Size& view_size) |
| : view_size_(view_size) {} |
| |
| ProportionalImageView::~ProportionalImageView() {} |
| |
| void ProportionalImageView::SetImage(const gfx::ImageSkia& image, |
| const gfx::Size& max_image_size) { |
| image_ = image; |
| max_image_size_ = max_image_size; |
| SchedulePaint(); |
| } |
| |
| gfx::Size ProportionalImageView::GetPreferredSize() const { return view_size_; } |
| |
| int ProportionalImageView::GetHeightForWidth(int width) const { |
| return view_size_.height(); |
| } |
| |
| void ProportionalImageView::OnPaint(gfx::Canvas* canvas) { |
| views::View::OnPaint(canvas); |
| |
| gfx::Size draw_size = GetImageDrawingSize(); |
| if (draw_size.IsEmpty()) |
| return; |
| |
| gfx::Rect draw_bounds = GetContentsBounds(); |
| draw_bounds.ClampToCenteredSize(draw_size); |
| |
| gfx::ImageSkia image = |
| (image_.size() == draw_size) |
| ? image_ |
| : gfx::ImageSkiaOperations::CreateResizedImage( |
| image_, skia::ImageOperations::RESIZE_BEST, draw_size); |
| canvas->DrawImageInt(image, draw_bounds.x(), draw_bounds.y()); |
| } |
| |
| const char* ProportionalImageView::GetClassName() const { |
| return kViewClassName; |
| } |
| |
| gfx::Size ProportionalImageView::GetImageDrawingSize() { |
| if (!visible()) |
| return gfx::Size(); |
| |
| gfx::Size max_size = max_image_size_; |
| max_size.SetToMin(GetContentsBounds().size()); |
| return message_center::GetImageSizeForContainerSize(max_size, image_.size()); |
| } |
| |
| } // namespace message_center |