1 /* GTK - The GIMP Toolkit 2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 /* 19 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS 20 * file for a list of people on the GTK+ Team. See the ChangeLog 21 * files for a list of changes. These files are distributed with 22 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 23 */ 24 25 #ifndef __GTK_SIZE_REQUEST_CACHE_PRIVATE_H__ 26 #define __GTK_SIZE_REQUEST_CACHE_PRIVATE_H__ 27 28 #include <glib.h> 29 #include <gtk/gtkenums.h> 30 31 G_BEGIN_DECLS 32 33 /* Cache as many ranges of height-for-width 34 * (or width-for-height) as can be rational 35 * for a said widget to have, if a label can 36 * only wrap to 3 lines, only 3 caches will 37 * ever be allocated for it. 38 */ 39 #define GTK_SIZE_REQUEST_CACHED_SIZES (5) 40 41 typedef struct { 42 gint minimum_size; 43 gint natural_size; 44 } CachedSizeX; 45 46 typedef struct { 47 gint minimum_size; 48 gint natural_size; 49 gint minimum_baseline; 50 gint natural_baseline; 51 } CachedSizeY; 52 53 typedef struct 54 { 55 gint lower_for_size; /* The minimum for_size with the same result */ 56 gint upper_for_size; /* The maximum for_size with the same result */ 57 CachedSizeX cached_size; 58 } SizeRequestX; 59 60 typedef struct 61 { 62 gint lower_for_size; /* The minimum for_size with the same result */ 63 gint upper_for_size; /* The maximum for_size with the same result */ 64 CachedSizeY cached_size; 65 } SizeRequestY; 66 67 typedef struct { 68 SizeRequestX **requests_x; 69 SizeRequestY **requests_y; 70 71 CachedSizeX cached_size_x; 72 CachedSizeY cached_size_y; 73 74 GtkSizeRequestMode request_mode : 3; 75 guint request_mode_valid : 1; 76 struct { 77 guint n_cached_requests : 3; 78 guint last_cached_request : 3; 79 guint cached_size_valid : 1; 80 } flags[2]; 81 } SizeRequestCache; 82 83 void _gtk_size_request_cache_init (SizeRequestCache *cache); 84 void _gtk_size_request_cache_free (SizeRequestCache *cache); 85 86 void _gtk_size_request_cache_clear (SizeRequestCache *cache); 87 void _gtk_size_request_cache_commit (SizeRequestCache *cache, 88 GtkOrientation orientation, 89 gint for_size, 90 gint minimum_size, 91 gint natural_size, 92 gint minimum_baseline, 93 gint natural_baseline); 94 gboolean _gtk_size_request_cache_lookup (SizeRequestCache *cache, 95 GtkOrientation orientation, 96 gint for_size, 97 gint *minimum, 98 gint *natural, 99 gint *minimum_baseline, 100 gint *natural_baseline); 101 102 G_END_DECLS 103 104 #endif /* __GTK_SIZE_REQUEST_CACHE_PRIVATE_H__ */ 105