blob: 1148312bc44d7a534e1683da55b09fad6e87d602 [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_DETACHABLE_TOOLBAR_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_DETACHABLE_TOOLBAR_VIEW_H_
#include "chrome/browser/ui/host_desktop.h"
#include "ui/views/accessible_pane_view.h"
struct SkRect;
// DetachableToolbarView contains functionality common to views that can detach
// from the Chrome frame, such as the BookmarkBarView and the Extension shelf.
class DetachableToolbarView : public views::AccessiblePaneView {
public:
// The color gradient start value close to the edge of the divider.
static const SkColor kEdgeDividerColor;
// The color gradient value for the middle of the divider.
static const SkColor kMiddleDividerColor;
DetachableToolbarView() {}
virtual ~DetachableToolbarView() {}
// Whether the view is currently detached from the Chrome frame.
virtual bool IsDetached() const = 0;
// Gets the current state of the resize animation (show/hide).
virtual double GetAnimationValue() const = 0;
// Gets the current amount of overlap atop the browser toolbar.
virtual int GetToolbarOverlap() const = 0;
// Paints the background (including the theme image behind content area) for
// the bar/shelf when it is attached to the top toolbar into |bounds|.
// |background_origin| is the origin to use for painting the theme image.
static void PaintBackgroundAttachedMode(
gfx::Canvas* canvas,
ui::ThemeProvider* theme_provider,
const gfx::Rect& bounds,
const gfx::Point& background_origin,
chrome::HostDesktopType host_desktop_type);
// Calculate the rect for the content area of the bar/shelf. This is only
// needed when the bar/shelf is detached from the Chrome frame (otherwise the
// content area is the whole area of the bar/shelf. When detached, however,
// only a small round rectangle is for drawing our content on. This calculates
// how big this area is, where it is located within the shelf and how round
// the edges should be.
static void CalculateContentArea(double animation_state,
double horizontal_padding,
double vertical_padding,
SkRect* rect,
double* roundness,
views::View* view);
// Paint the horizontal border separating the shelf/bar from the toolbar or
// page content according to |at_top| with |color|.
static void PaintHorizontalBorder(gfx::Canvas* canvas,
DetachableToolbarView* view,
bool at_top,
SkColor color);
// Paint the background of the content area (the surface behind the
// bookmarks). |rect| is the rectangle to paint the background within.
// |roundness| describes the roundness of the corners.
static void PaintContentAreaBackground(gfx::Canvas* canvas,
ui::ThemeProvider* theme_provider,
const SkRect& rect,
double roundness);
// Paint the border around the content area (when in detached mode).
static void PaintContentAreaBorder(gfx::Canvas* canvas,
ui::ThemeProvider* theme_provider,
const SkRect& rect,
double roundness);
// Paint a themed gradient divider at location |x|. |height| is the full
// height of the view you want to paint the divider into, not the height of
// the divider. The height of the divider will become:
// |height| - 2 * |vertical_padding|.
// The color of the divider is a gradient starting with |top_color| at the
// top, and changing into |middle_color| and then over to |bottom_color| as
// you go further down.
static void PaintVerticalDivider(gfx::Canvas* canvas,
int x,
int height,
int vertical_padding,
SkColor top_color,
SkColor middle_color,
SkColor bottom_color);
private:
DISALLOW_COPY_AND_ASSIGN(DetachableToolbarView);
};
#endif // CHROME_BROWSER_UI_VIEWS_DETACHABLE_TOOLBAR_VIEW_H_