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