1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ui/message_center/views/proportional_image_view.h"
6 
7 #include "ui/gfx/canvas.h"
8 #include "ui/gfx/image/image_skia_operations.h"
9 #include "ui/message_center/message_center_style.h"
10 
11 namespace message_center {
12 
13 const char ProportionalImageView::kViewClassName[] = "ProportionalImageView";
14 
ProportionalImageView(const gfx::Size & view_size)15 ProportionalImageView::ProportionalImageView(const gfx::Size& view_size) {
16   SetPreferredSize(view_size);
17 }
18 
~ProportionalImageView()19 ProportionalImageView::~ProportionalImageView() {}
20 
SetImage(const gfx::ImageSkia & image,const gfx::Size & max_image_size)21 void ProportionalImageView::SetImage(const gfx::ImageSkia& image,
22                                      const gfx::Size& max_image_size) {
23   image_ = image;
24   max_image_size_ = max_image_size;
25   SchedulePaint();
26 }
27 
OnPaint(gfx::Canvas * canvas)28 void ProportionalImageView::OnPaint(gfx::Canvas* canvas) {
29   views::View::OnPaint(canvas);
30 
31   gfx::Size draw_size = GetImageDrawingSize();
32   if (draw_size.IsEmpty())
33     return;
34 
35   gfx::Rect draw_bounds = GetContentsBounds();
36   draw_bounds.ClampToCenteredSize(draw_size);
37 
38   gfx::ImageSkia image =
39       (image_.size() == draw_size)
40           ? image_
41           : gfx::ImageSkiaOperations::CreateResizedImage(
42                 image_, skia::ImageOperations::RESIZE_BEST, draw_size);
43   canvas->DrawImageInt(image, draw_bounds.x(), draw_bounds.y());
44 }
45 
GetClassName() const46 const char* ProportionalImageView::GetClassName() const {
47   return kViewClassName;
48 }
49 
GetImageDrawingSize()50 gfx::Size ProportionalImageView::GetImageDrawingSize() {
51   if (!GetVisible())
52     return gfx::Size();
53 
54   gfx::Size max_size = max_image_size_;
55   max_size.SetToMin(GetContentsBounds().size());
56   return GetImageSizeForContainerSize(max_size, image_.size());
57 }
58 
59 }  // namespace message_center
60