// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_TOOLBAR_WRENCH_ICON_PAINTER_H_ #define CHROME_BROWSER_UI_TOOLBAR_WRENCH_ICON_PAINTER_H_ #include "base/compiler_specific.h" #include "base/gtest_prod_util.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/ui/global_error/global_error.h" #include "chrome/browser/upgrade_detector.h" #include "ui/gfx/animation/animation_delegate.h" #include "ui/gfx/image/image_skia.h" namespace gfx { class Canvas; class MultiAnimation; class Rect; } namespace ui { class ThemeProvider; } // This class is used to draw the wrench icon. It can signify severity levels // by changing the wrench icon to different colors. class WrenchIconPainter : gfx::AnimationDelegate { public: enum BezelType { BEZEL_NONE, BEZEL_HOVER, BEZEL_PRESSED, }; enum Severity { SEVERITY_NONE, SEVERITY_LOW, SEVERITY_MEDIUM, SEVERITY_HIGH, }; class Delegate { public: virtual void ScheduleWrenchIconPaint() = 0; protected: virtual ~Delegate() {} }; // Map an upgrade level to a severity level. static Severity SeverityFromUpgradeLevel( UpgradeDetector::UpgradeNotificationAnnoyanceLevel level); // Checks if the wrench icon should be animated for the given upgrade level. static bool ShouldAnimateUpgradeLevel( UpgradeDetector::UpgradeNotificationAnnoyanceLevel level); // Get the severity level for global errors. static Severity GlobalErrorSeverity(); explicit WrenchIconPainter(Delegate* delegate); virtual ~WrenchIconPainter(); // If |severity| is not |SEVERITY_NONE| then the wrench icon is colored to // match the severity level. void SetSeverity(Severity severity, bool animate); // A badge drawn on the top left. void set_badge(const gfx::ImageSkia& badge) { badge_ = badge; } void Paint(gfx::Canvas* canvas, ui::ThemeProvider* theme_provider, const gfx::Rect& rect, BezelType bezel_type); private: FRIEND_TEST_ALL_PREFIXES(WrenchIconPainterTest, PaintCallback); // AnimationDelegate: virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE; // Gets the image ID used to draw bars for the current severity level. int GetCurrentSeverityImageID() const; Delegate* delegate_; Severity severity_; gfx::ImageSkia badge_; scoped_ptr animation_; DISALLOW_COPY_AND_ASSIGN(WrenchIconPainter); }; #endif // CHROME_BROWSER_UI_TOOLBAR_WRENCH_ICON_PAINTER_H_