14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file. 44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_TAB_ICON_VIEW_H_ 64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_TAB_ICON_VIEW_H_ 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/view.h" 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass SkBitmap; 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TabContents; 134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//////////////////////////////////////////////////////////////////////////////// 154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// A view to display a tab favicon or a throbber. 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//////////////////////////////////////////////////////////////////////////////// 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TabIconView : public views::View { 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Classes implement this interface to provide state for the TabIconView. 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch class TabIconViewModel { 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns true if the TabIconView should show a loading animation. 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool ShouldTabIconViewAnimate() const = 0; 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the favicon to display in the icon view 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual SkBitmap GetFaviconForTabIconView() = 0; 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch }; 304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch static void InitializeIfNeeded(); 324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch explicit TabIconView(TabIconViewModel* provider); 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual ~TabIconView(); 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invoke whenever the tab state changes or the throbber should update. 374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void Update(); 384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Set the throbber to the light style (for use on dark backgrounds). 404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void set_is_light(bool is_light) { is_light_ = is_light; } 414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Overridden from View 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void OnPaint(gfx::Canvas* canvas); 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual gfx::Size GetPreferredSize(); 454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void PaintThrobber(gfx::Canvas* canvas); 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void PaintFavicon(gfx::Canvas* canvas, const SkBitmap& bitmap); 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void PaintIcon(gfx::Canvas* canvas, 504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const SkBitmap& bitmap, 514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int src_x, 524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int src_y, 534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int src_w, 544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int src_h, 554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool filter); 564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Our model. 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch TabIconViewModel* model_; 594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Whether the throbber is running. 614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool throbber_running_; 624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Whether we should display our light or dark style. 644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool is_light_; 654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Current frame of the throbber being painted. This is only used if 674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // throbber_running_ is true. 684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int throbber_frame_; 694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TabIconView); 714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif // CHROME_BROWSER_UI_VIEWS_TAB_ICON_VIEW_H_ 74