blob: 8bd0322ae00b52ce2c5c22a03335610dce940007 [file] [log] [blame]
// Copyright (c) 2011 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 VIEWS_BUBBLE_BUBBLE_DELEGATE_H_
#define VIEWS_BUBBLE_BUBBLE_DELEGATE_H_
#pragma once
#include "ui/base/animation/animation_delegate.h"
#include "views/bubble/bubble_border.h"
#include "views/widget/widget_delegate.h"
namespace ui {
class SlideAnimation;
} // namespace ui
namespace views {
class BubbleFrameView;
class BubbleView;
// BubbleDelegateView creates frame and client views for bubble Widgets.
// BubbleDelegateView itself is the client's contents view.
//
///////////////////////////////////////////////////////////////////////////////
class VIEWS_EXPORT BubbleDelegateView : public WidgetDelegateView,
public ui::AnimationDelegate {
public:
BubbleDelegateView();
BubbleDelegateView(const gfx::Point& anchor_point,
BubbleBorder::ArrowLocation arrow_location,
const SkColor& color);
virtual ~BubbleDelegateView();
// Create a bubble Widget from the argument BubbleDelegateView.
static Widget* CreateBubble(BubbleDelegateView* bubble_delegate,
Widget* parent_widget);
// WidgetDelegate overrides:
virtual View* GetInitiallyFocusedView() OVERRIDE;
virtual View* GetContentsView() OVERRIDE;
virtual ClientView* CreateClientView(Widget* widget) OVERRIDE;
virtual NonClientFrameView* CreateNonClientFrameView() OVERRIDE;
bool close_on_esc() const { return close_on_esc_; }
void set_close_on_esc(bool close_on_esc) { close_on_esc_ = close_on_esc; }
// Get the arrow's anchor point in screen space.
virtual gfx::Point GetAnchorPoint();
// Get the arrow's location on the bubble.
virtual BubbleBorder::ArrowLocation GetArrowLocation() const;
// Get the color used for the background and border.
virtual SkColor GetColor() const;
// Fade the bubble in or out via Widget transparency.
// Fade in calls Widget::Show; fade out calls Widget::Close upon completion.
void StartFade(bool fade_in);
protected:
// View overrides:
virtual bool AcceleratorPressed(const Accelerator& accelerator) OVERRIDE;
// Perform view initialization on the contents for bubble sizing.
virtual void Init();
private:
// ui::AnimationDelegate overrides:
virtual void AnimationEnded(const ui::Animation* animation);
virtual void AnimationProgressed(const ui::Animation* animation);
const BubbleView* GetBubbleView() const;
const BubbleFrameView* GetBubbleFrameView() const;
// Get bubble bounds from the anchor point and client view's preferred size.
gfx::Rect GetBubbleBounds();
// Fade animation for bubble.
scoped_ptr<ui::SlideAnimation> fade_animation_;
// Should this bubble close on the escape key?
bool close_on_esc_;
// The screen point where this bubble's arrow is anchored.
gfx::Point anchor_point_;
// The arrow's location on the bubble.
BubbleBorder::ArrowLocation arrow_location_;
// The background color of the bubble.
SkColor color_;
};
} // namespace views
#endif // VIEWS_BUBBLE_BUBBLE_DELEGATE_H_