172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_UI_GTK_ROUNDED_WINDOW_H_
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_GTK_ROUNDED_WINDOW_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gtk/gtk.h>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace gtk_util {
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Symbolic names for arguments to |rounded_edges| in ActAsRoundedWindow().
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochenum RoundedBorders {
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ROUNDED_NONE = 0,
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ROUNDED_BOTTOM_LEFT = 1 << 0,
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ROUNDED_TOP_LEFT = 1 << 1,
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ROUNDED_TOP_RIGHT = 1 << 2,
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ROUNDED_TOP = (1 << 1) | (1 << 2),
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ROUNDED_BOTTOM_RIGHT = 1 << 3,
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ROUNDED_ALL = 0xF
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Symbolic names for arguments to |drawn_borders| in ActAsRoundedWindow().
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochenum BorderEdge {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BORDER_NONE = 0,
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BORDER_LEFT = 1 << 0,
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BORDER_TOP = 1 << 1,
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BORDER_RIGHT = 1 << 2,
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BORDER_BOTTOM = 1 << 3,
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BORDER_ALL = 0xF
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Sets up the passed in widget that has its own GdkWindow with an expose
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// handler that forces the window shape into roundness. Caller should not set
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// an "expose-event" handler on |widget|; if caller needs to do custom
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// rendering, use SetRoundedWindowExposeFunction() instead. |rounded_edges|
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// control which corners are rounded. |drawn_borders| border control which
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// sides have a visible border drawn in |color|.
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ActAsRoundedWindow(
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GtkWidget* widget, const GdkColor& color, int corner_size,
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int rounded_edges, int drawn_borders);
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Undoes most of the actions of ActAsRoundedWindow().
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid StopActingAsRoundedWindow(GtkWidget* widget);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Returns true if the window is rounded.
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool IsActingAsRoundedWindow(GtkWidget* widget);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Sets edge and border properties on a widget that has already been configured
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// with ActAsRoundedWindow().
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SetRoundedWindowEdgesAndBorders(GtkWidget* widget,
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                     int corner_size,
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                     int rounded_edges,
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                     int drawn_borders);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Sets the color of the border on a widget that has already been configured
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// with ActAsRoundedWindow().
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SetRoundedWindowBorderColor(GtkWidget* widget, GdkColor color);
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace gtk_util
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif  // CHROME_BROWSER_UI_GTK_ROUNDED_WINDOW_H_
65