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