// Copyright (c) 2006-2008 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_VIEWS_FRAME_GLASS_BROWSER_FRAME_VIEW_H_ #define CHROME_BROWSER_VIEWS_FRAME_GLASS_BROWSER_FRAME_VIEW_H_ #include "chrome/browser/views/frame/browser_frame.h" #include "chrome/views/controls/button/button.h" #include "chrome/views/window/non_client_view.h" class BrowserView; class GlassBrowserWindowResources; class SkBitmap; class GlassBrowserFrameView : public BrowserNonClientFrameView { public: // Constructs a non-client view for an BrowserFrame. GlassBrowserFrameView(BrowserFrame* frame, BrowserView* browser_view); virtual ~GlassBrowserFrameView(); // Overridden from BrowserNonClientFrameView: virtual gfx::Rect GetBoundsForTabStrip(TabStrip* tabstrip) const; virtual void UpdateThrobber(bool running); // Overridden from views::NonClientFrameView: virtual gfx::Rect GetBoundsForClientView() const; virtual gfx::Rect GetWindowBoundsForClientBounds( const gfx::Rect& client_bounds) const; virtual gfx::Point GetSystemMenuPoint() const; virtual int NonClientHitTest(const gfx::Point& point); virtual void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask) { } virtual void EnableClose(bool enable) { } virtual void ResetWindowControls() { } protected: // Overridden from views::View: virtual void Paint(ChromeCanvas* canvas); virtual void Layout(); private: // Returns the thickness of the border that makes up the window frame edges. // This does not include any client edge. int FrameBorderThickness() const; // Returns the thickness of the entire nonclient left, right, and bottom // borders, including both the window frame and any client edge. int NonClientBorderThickness() const; // Returns the height of the entire nonclient top border, including the window // frame, any title area, and any connected client edge. int NonClientTopBorderHeight() const; // Paint various sub-components of this view. void PaintDistributorLogo(ChromeCanvas* canvas); void PaintToolbarBackground(ChromeCanvas* canvas); void PaintOTRAvatar(ChromeCanvas* canvas); void PaintRestoredClientEdge(ChromeCanvas* canvas); // Layout various sub-components of this view. void LayoutDistributorLogo(); void LayoutOTRAvatar(); void LayoutClientView(); // Returns the bounds of the client area for the specified view size. gfx::Rect CalculateClientAreaBounds(int width, int height) const; // Starts/Stops the window throbber running. void StartThrobber(); void StopThrobber(); // Displays the next throbber frame. void DisplayNextThrobberFrame(); // The layout rect of the distributor logo, if visible. gfx::Rect logo_bounds_; // The layout rect of the OTR avatar icon, if visible. gfx::Rect otr_avatar_bounds_; // The frame that hosts this view. BrowserFrame* frame_; // The BrowserView hosted within this View. BrowserView* browser_view_; // The bounds of the ClientView. gfx::Rect client_view_bounds_; // Whether or not the window throbber is currently animating. bool throbber_running_; // The index of the current frame of the throbber animation. int throbber_frame_; static void InitClass(); static SkBitmap* distributor_logo_; static GlassBrowserWindowResources* resources_; static const int kThrobberIconCount = 24; static HICON throbber_icons_[kThrobberIconCount]; static void InitThrobberIcons(); DISALLOW_EVIL_CONSTRUCTORS(GlassBrowserFrameView); }; #endif // #ifndef CHROME_BROWSER_VIEWS_FRAME_GLASS_BROWSER_FRAME_VIEW_H_