1d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// found in the LICENSE file. 4d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 5d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include "ui/message_center/views/proportional_image_view.h" 6d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 7d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include "ui/gfx/canvas.h" 8d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include "ui/message_center/message_center_style.h" 9d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 10d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)namespace message_center { 11d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 12d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)ProportionalImageView::ProportionalImageView(const gfx::ImageSkia& image) 13d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) : image_(image) { 14d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} 15d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 16d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)ProportionalImageView::~ProportionalImageView() { 17d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} 18d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 19d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)gfx::Size ProportionalImageView::GetPreferredSize() { 20d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) gfx::Insets insets = GetInsets(); 21d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) gfx::Rect rect = gfx::Rect(GetImageSizeForWidth(image_.width())); 22d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) rect.Inset(-insets); 23d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) return rect.size(); 24d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} 25d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 26d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)int ProportionalImageView::GetHeightForWidth(int width) { 27d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) // The border will count against the width available for the image 28d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) // and towards the height taken by the image. 29d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) gfx::Insets insets = GetInsets(); 30d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) int inset_width = width - insets.width(); 31d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) return GetImageSizeForWidth(inset_width).height() + insets.height(); 32d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} 33d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 34d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)void ProportionalImageView::OnPaint(gfx::Canvas* canvas) { 35d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) views::View::OnPaint(canvas); 36d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 37d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) gfx::Size draw_size(GetImageSizeForWidth(width() - GetInsets().width())); 38d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) if (!draw_size.IsEmpty()) { 39d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) gfx::Rect draw_bounds = GetContentsBounds(); 40d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) draw_bounds.ClampToCenteredSize(draw_size); 41d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 42d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) gfx::Size image_size(image_.size()); 43d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) if (image_size == draw_size) { 44d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) canvas->DrawImageInt(image_, draw_bounds.x(), draw_bounds.y()); 45d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) } else { 46d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) // Resize case 47d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) SkPaint paint; 48d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) paint.setFilterBitmap(true); 49d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) canvas->DrawImageInt(image_, 0, 0, 50d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) image_size.width(), image_size.height(), 51d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) draw_bounds.x(), draw_bounds.y(), 52d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) draw_size.width(), draw_size.height(), 53d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) true, paint); 54d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) } 55d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) } 56d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} 57d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 58d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)gfx::Size ProportionalImageView::GetImageSizeForWidth(int width) { 59d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) gfx::Size size = visible() ? image_.size() : gfx::Size(); 60d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) return message_center::GetImageSizeForWidth(width, size); 61d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} 62d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 63d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} // namespace message_center 64