Home | History | Annotate | Download | only in views
      1 // Copyright (c) 2006-2008 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 #ifndef CHROME_BROWSER_UI_VIEWS_TAB_ICON_VIEW_H_
      6 #define CHROME_BROWSER_UI_VIEWS_TAB_ICON_VIEW_H_
      7 #pragma once
      8 
      9 #include "views/view.h"
     10 
     11 class SkBitmap;
     12 class TabContents;
     13 
     14 ////////////////////////////////////////////////////////////////////////////////
     15 //
     16 // A view to display a tab favicon or a throbber.
     17 //
     18 ////////////////////////////////////////////////////////////////////////////////
     19 class TabIconView : public views::View {
     20  public:
     21   // Classes implement this interface to provide state for the TabIconView.
     22   class TabIconViewModel {
     23    public:
     24     // Returns true if the TabIconView should show a loading animation.
     25     virtual bool ShouldTabIconViewAnimate() const = 0;
     26 
     27     // Returns the favicon to display in the icon view
     28     virtual SkBitmap GetFaviconForTabIconView() = 0;
     29   };
     30 
     31   static void InitializeIfNeeded();
     32 
     33   explicit TabIconView(TabIconViewModel* provider);
     34   virtual ~TabIconView();
     35 
     36   // Invoke whenever the tab state changes or the throbber should update.
     37   void Update();
     38 
     39   // Set the throbber to the light style (for use on dark backgrounds).
     40   void set_is_light(bool is_light) { is_light_ = is_light; }
     41 
     42   // Overridden from View
     43   virtual void OnPaint(gfx::Canvas* canvas);
     44   virtual gfx::Size GetPreferredSize();
     45 
     46  private:
     47   void PaintThrobber(gfx::Canvas* canvas);
     48   void PaintFavicon(gfx::Canvas* canvas, const SkBitmap& bitmap);
     49   void PaintIcon(gfx::Canvas* canvas,
     50                  const SkBitmap& bitmap,
     51                  int src_x,
     52                  int src_y,
     53                  int src_w,
     54                  int src_h,
     55                  bool filter);
     56 
     57   // Our model.
     58   TabIconViewModel* model_;
     59 
     60   // Whether the throbber is running.
     61   bool throbber_running_;
     62 
     63   // Whether we should display our light or dark style.
     64   bool is_light_;
     65 
     66   // Current frame of the throbber being painted. This is only used if
     67   // throbber_running_ is true.
     68   int throbber_frame_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(TabIconView);
     71 };
     72 
     73 #endif  // CHROME_BROWSER_UI_VIEWS_TAB_ICON_VIEW_H_
     74