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)15ProportionalImageView::ProportionalImageView(const gfx::Size& view_size) { 16 SetPreferredSize(view_size); 17 } 18 ~ProportionalImageView()19ProportionalImageView::~ProportionalImageView() {} 20 SetImage(const gfx::ImageSkia & image,const gfx::Size & max_image_size)21void 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)28void 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() const46const char* ProportionalImageView::GetClassName() const { 47 return kViewClassName; 48 } 49 GetImageDrawingSize()50gfx::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