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_GTK_EXPANDED_CONTAINER_H_
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_GTK_GTK_EXPANDED_CONTAINER_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gdk/gdk.h>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gtk/gtk.h>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A specialized container derived from GtkFixed, which expands the size of its
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// children to fill the container, in one or both directions. The usage of this
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// container is similar to GtkFixed.
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The "child-size-request" signal is optional, if you want to expand child
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// widgets to customized size other than the container's size. It should have
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the following signature:
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   void (*child_size_request)(GtkExpandedContainer* container,
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//                              GtkWidget* child,
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//                              GtkRequisition* requisition);
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This signal is emitted for each child with the requisition set to the size of
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the container. Your handler may adjust the value of the requisition. If the
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// width or height is set to -1, then that direction will not be expanded, and
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the original size request of the child will be used.
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochG_BEGIN_DECLS
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_TYPE_EXPANDED_CONTAINER                                 \
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (gtk_expanded_container_get_type())
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_EXPANDED_CONTAINER(obj)                                 \
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_EXPANDED_CONTAINER, \
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                GtkExpandedContainer))
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_EXPANDED_CONTAINER_CLASS(klass)                         \
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_EXPANDED_CONTAINER,  \
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             GtkExpandedContainerClass))
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_IS_EXPANDED_CONTAINER(obj)                              \
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_EXPANDED_CONTAINER))
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_IS_EXPANDED_CONTAINER_CLASS(klass)                      \
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_EXPANDED_CONTAINER))
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_EXPANDED_CONTAINER_GET_CLASS(obj)                       \
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_EXPANDED_CONTAINER,  \
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               GtkExpandedContainerClass))
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkExpandedContainer GtkExpandedContainer;
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkExpandedContainerClass GtkExpandedContainerClass;
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct _GtkExpandedContainer {
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Parent class.
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkFixed fixed;
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct _GtkExpandedContainerClass {
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkFixedClass parent_class;
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGType gtk_expanded_container_get_type() G_GNUC_CONST;
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGtkWidget* gtk_expanded_container_new();
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_expanded_container_put(GtkExpandedContainer* container,
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                GtkWidget* widget, gint x, gint y);
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_expanded_container_move(GtkExpandedContainer* container,
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 GtkWidget* widget, gint x, gint y);
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_expanded_container_set_has_window(GtkExpandedContainer* container,
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                           gboolean has_window);
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgboolean gtk_expanded_container_get_has_window(GtkExpandedContainer* container);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochG_END_DECLS
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif  // CHROME_BROWSER_UI_GTK_GTK_EXPANDED_CONTAINER_H_
72