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_CHROME_SHRINKABLE_HBOX_H_ 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_GTK_GTK_CHROME_SHRINKABLE_HBOX_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 GtkHBox, which can shrink or hide its 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// children one by one to fit into its width. 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Limitations of this container: 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// - All children should have the same pack type, otherwise they may be 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// overlapped with each other. 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// - All children must be packed with expand == false and fill == false, 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// otherwise they may be overlapped with each other. 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// - The visibility of a child is adjusted automatically according to the 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// container's width. The child may not show or hide itself. 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochG_BEGIN_DECLS 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_TYPE_CHROME_SHRINKABLE_HBOX \ 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (gtk_chrome_shrinkable_hbox_get_type()) 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CHROME_SHRINKABLE_HBOX(obj) \ 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_CHROME_SHRINKABLE_HBOX, \ 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkChromeShrinkableHBox)) 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CHROME_SHRINKABLE_HBOX_CLASS(klass) \ 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_CHROME_SHRINKABLE_HBOX, \ 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkChromeShrinkableHBoxClass)) 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_IS_CHROME_SHRINKABLE_HBOX(obj) \ 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_CHROME_SHRINKABLE_HBOX)) 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_IS_CHROME_SHRINKABLE_HBOX_CLASS(klass) \ 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_CHROME_SHRINKABLE_HBOX)) 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CHROME_SHRINKABLE_HBOX_GET_CLASS(obj) \ 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_CHROME_SHRINKABLE_HBOX, \ 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkChromeShrinkableHBoxClass)) 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkChromeShrinkableHBox GtkChromeShrinkableHBox; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkChromeShrinkableHBoxClass GtkChromeShrinkableHBoxClass; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct _GtkChromeShrinkableHBox { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Parent class. 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkHBox hbox; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gboolean hide_child_directly; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Private 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int children_width_requisition; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct _GtkChromeShrinkableHBoxClass { 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkHBoxClass parent_class; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGType gtk_chrome_shrinkable_hbox_get_type() G_GNUC_CONST; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Creates a new shrinkable hbox. 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// If |hide_child_directly| is true then its child widgets will be hid directly 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// if they are too wide to be fit into the hbox's width. Otherwise they will be 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// shrunk first before being hid completely. 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGtkWidget* gtk_chrome_shrinkable_hbox_new(gboolean hide_child_directly, 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gboolean homogeneous, 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gint spacing); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_chrome_shrinkable_hbox_set_hide_child_directly( 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkChromeShrinkableHBox* box, gboolean hide_child_directly); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgboolean gtk_chrome_shrinkable_hbox_get_hide_child_directly( 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkChromeShrinkableHBox* box); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_chrome_shrinkable_hbox_pack_start(GtkChromeShrinkableHBox* box, 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* child, 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch guint padding); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_chrome_shrinkable_hbox_pack_end(GtkChromeShrinkableHBox* box, 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* child, 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch guint padding); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgint gtk_chrome_shrinkable_hbox_get_visible_child_count( 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkChromeShrinkableHBox* box); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochG_END_DECLS 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif // CHROME_BROWSER_UI_GTK_GTK_CHROME_SHRINKABLE_HBOX_H_ 88