1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_BASE_GTK_GTK_EXPANDED_CONTAINER_H_
6#define UI_BASE_GTK_GTK_EXPANDED_CONTAINER_H_
7
8#include <gdk/gdk.h>
9#include <gtk/gtk.h>
10
11#include "ui/base/ui_export.h"
12
13// A specialized container derived from GtkFixed, which expands the size of its
14// children to fill the container, in one or both directions. The usage of this
15// container is similar to GtkFixed.
16//
17// The "child-size-request" signal is optional, if you want to expand child
18// widgets to customized size other than the container's size. It should have
19// the following signature:
20//
21//   void (*child_size_request)(GtkExpandedContainer* container,
22//                              GtkWidget* child,
23//                              GtkRequisition* requisition);
24//
25// This signal is emitted for each child with the requisition set to the size of
26// the container. Your handler may adjust the value of the requisition. If the
27// width or height is set to -1, then that direction will not be expanded, and
28// the original size request of the child will be used.
29
30G_BEGIN_DECLS
31
32#define GTK_TYPE_EXPANDED_CONTAINER                                 \
33    (gtk_expanded_container_get_type())
34#define GTK_EXPANDED_CONTAINER(obj)                                 \
35    (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_EXPANDED_CONTAINER, \
36                                GtkExpandedContainer))
37#define GTK_EXPANDED_CONTAINER_CLASS(klass)                         \
38    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_EXPANDED_CONTAINER,  \
39                             GtkExpandedContainerClass))
40#define GTK_IS_EXPANDED_CONTAINER(obj)                              \
41    (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_EXPANDED_CONTAINER))
42#define GTK_IS_EXPANDED_CONTAINER_CLASS(klass)                      \
43    (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_EXPANDED_CONTAINER))
44#define GTK_EXPANDED_CONTAINER_GET_CLASS(obj)                       \
45    (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_EXPANDED_CONTAINER,  \
46                               GtkExpandedContainerClass))
47
48typedef struct _GtkExpandedContainer GtkExpandedContainer;
49typedef struct _GtkExpandedContainerClass GtkExpandedContainerClass;
50
51struct _GtkExpandedContainer {
52  // Parent class.
53  GtkFixed fixed;
54};
55
56struct _GtkExpandedContainerClass {
57  GtkFixedClass parent_class;
58};
59
60UI_EXPORT GType gtk_expanded_container_get_type() G_GNUC_CONST;
61UI_EXPORT GtkWidget* gtk_expanded_container_new();
62UI_EXPORT void gtk_expanded_container_put(GtkExpandedContainer* container,
63                                          GtkWidget* widget, gint x, gint y);
64UI_EXPORT void gtk_expanded_container_move(GtkExpandedContainer* container,
65                                           GtkWidget* widget, gint x, gint y);
66UI_EXPORT void gtk_expanded_container_set_has_window(
67    GtkExpandedContainer* container,
68    gboolean has_window);
69UI_EXPORT gboolean gtk_expanded_container_get_has_window(
70    GtkExpandedContainer* container);
71
72G_END_DECLS
73
74#endif  // UI_BASE_GTK_GTK_EXPANDED_CONTAINER_H_
75