blob: e8a90ad0432195da69f162356b3524ed50658009 [file] [log] [blame]
// Copyright (c) 2012 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_VIEWS_PANELS_PANEL_FRAME_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_
#include "chrome/browser/ui/panels/panel_constants.h"
#include "chrome/browser/ui/views/tab_icon_view_model.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/window/non_client_view.h"
class PanelView;
class TabIconView;
namespace views {
class ImageButton;
class Label;
}
class PanelFrameView : public views::NonClientFrameView,
public views::ButtonListener,
public chrome::TabIconViewModel {
public:
enum PaintState {
PAINT_AS_INACTIVE,
PAINT_AS_ACTIVE,
PAINT_AS_MINIMIZED,
PAINT_FOR_ATTENTION
};
explicit PanelFrameView(PanelView* panel_view);
virtual ~PanelFrameView();
void Init();
void UpdateTitle();
void UpdateIcon();
void UpdateThrobber();
void UpdateTitlebarMinimizeRestoreButtonVisibility();
void SetWindowCornerStyle(panel::CornerStyle corner_style);
// Returns the size of the non-client area, that is, the window size minus
// the size of the client area.
gfx::Size NonClientAreaSize() const;
int BorderThickness() const;
PaintState GetPaintState() const;
views::ImageButton* close_button() const { return close_button_; }
views::ImageButton* minimize_button() const { return minimize_button_; }
views::ImageButton* restore_button() const { return restore_button_; }
TabIconView* title_icon() const { return title_icon_; }
views::Label* title_label() const { return title_label_; }
panel::CornerStyle corner_style() const { return corner_style_; }
private:
// Overridden from views::NonClientFrameView:
virtual gfx::Rect GetBoundsForClientView() const OVERRIDE;
virtual gfx::Rect GetWindowBoundsForClientBounds(
const gfx::Rect& client_bounds) const OVERRIDE;
virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE;
virtual void GetWindowMask(const gfx::Size& size,
gfx::Path* window_mask) OVERRIDE;
virtual void ResetWindowControls() OVERRIDE;
virtual void UpdateWindowIcon() OVERRIDE;
virtual void UpdateWindowTitle() OVERRIDE;
// Overridden from views::View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual const char* GetClassName() const OVERRIDE;
virtual gfx::Size GetMinimumSize() OVERRIDE;
virtual gfx::Size GetMaximumSize() OVERRIDE;
virtual void Layout() OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
virtual void OnMouseCaptureLost() OVERRIDE;
// Overridden from views::ButtonListener:
virtual void ButtonPressed(views::Button* sender, const ui::Event& event)
OVERRIDE;
// Overridden from chrome::TabIconViewModel:
virtual bool ShouldTabIconViewAnimate() const OVERRIDE;
virtual gfx::ImageSkia GetFaviconForTabIconView() OVERRIDE;
int TitlebarHeight() const;
const gfx::ImageSkia* GetFrameBackground(PaintState paint_state) const;
// Update control styles to indicate if the titlebar is active or not.
void UpdateControlStyles(PaintState paint_state);
// Custom draw the frame.
void PaintFrameBackground(gfx::Canvas* canvas);
void PaintFrameEdge(gfx::Canvas* canvas);
// Retrieves the drawing metrics based on the current painting state.
SkColor GetTitleColor(PaintState paint_state) const;
static const char kViewClassName[];
bool is_frameless_;
PanelView* panel_view_;
views::ImageButton* close_button_;
views::ImageButton* minimize_button_;
views::ImageButton* restore_button_;
TabIconView* title_icon_;
views::Label* title_label_;
panel::CornerStyle corner_style_;
DISALLOW_COPY_AND_ASSIGN(PanelFrameView);
};
#endif // CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_