1// Copyright (c) 2010 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_CHROMEOS_FRAME_BUBBLE_FRAME_VIEW_H_
6#define CHROME_BROWSER_CHROMEOS_FRAME_BUBBLE_FRAME_VIEW_H_
7#pragma once
8
9#include "chrome/browser/chromeos/frame/bubble_window.h"
10#include "views/controls/button/button.h"
11#include "views/window/non_client_view.h"
12
13namespace gfx {
14class Insets;
15class Path;
16class Point;
17class Rect;
18class Size;
19}
20
21namespace views {
22class ImageButton;
23class Label;
24class Window;
25}
26
27namespace chromeos {
28
29// BubbleFrameView implements a BubbleBorder based window frame.
30class BubbleFrameView : public views::NonClientFrameView,
31                        public views::ButtonListener {
32 public:
33  BubbleFrameView(views::Window* frame, BubbleWindow::Style style);
34  virtual ~BubbleFrameView();
35
36  // Overridden from views::NonClientFrameView:
37  virtual gfx::Rect GetBoundsForClientView() const OVERRIDE;
38  virtual gfx::Rect GetWindowBoundsForClientBounds(
39      const gfx::Rect& client_bounds) const OVERRIDE;
40  virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE;
41  virtual void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask)
42      OVERRIDE;
43  virtual void EnableClose(bool enable) OVERRIDE;
44  virtual void ResetWindowControls() OVERRIDE;
45  virtual void UpdateWindowIcon() OVERRIDE;
46
47  // View overrides:
48  virtual gfx::Insets GetInsets() const OVERRIDE;
49  virtual gfx::Size GetPreferredSize() OVERRIDE;
50  virtual void Layout() OVERRIDE;
51  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
52
53  // Overridden from views::ButtonListener:
54  virtual void ButtonPressed(views::Button* sender, const views::Event& event)
55      OVERRIDE;
56
57  void StartThrobber();
58  void StopThrobber();
59
60 private:
61  // The window that owns this view.
62  views::Window* frame_;
63
64  // Allows to tweak appearance of the view.
65  BubbleWindow::Style style_;
66
67  // Title label
68  views::Label* title_;
69
70  // The bounds of the client view, in this view's coordinates.
71  gfx::Rect client_view_bounds_;
72
73  // Close button for STYLE_XBAR case.
74  views::ImageButton* close_button_;
75
76  // Throbber is optional. Employed by STYLE_THROBBER.
77  views::Throbber* throbber_;
78
79  DISALLOW_COPY_AND_ASSIGN(BubbleFrameView);
80};
81
82}  // namespace chromeos
83
84#endif  // CHROME_BROWSER_CHROMEOS_FRAME_BUBBLE_FRAME_VIEW_H_
85
86