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
31G_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 (64)
40
41typedef struct {
42 int minimum_size;
43 int natural_size;
44} CachedSizeX;
45
46typedef struct {
47 int minimum_size;
48 int natural_size;
49 int minimum_baseline;
50 int natural_baseline;
51} CachedSizeY;
52
53typedef struct
54{
55 int lower_for_size; /* The minimum for_size with the same result */
56 int upper_for_size; /* The maximum for_size with the same result */
57 CachedSizeX cached_size;
58} SizeRequestX;
59
60typedef struct
61{
62 int lower_for_size; /* The minimum for_size with the same result */
63 int upper_for_size; /* The maximum for_size with the same result */
64 CachedSizeY cached_size;
65} SizeRequestY;
66
67typedef 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 : 15;
78 guint last_cached_request : 15;
79 guint cached_size_valid : 1;
80 } flags[2];
81} SizeRequestCache;
82
83void _gtk_size_request_cache_init (SizeRequestCache *cache);
84void _gtk_size_request_cache_free (SizeRequestCache *cache);
85
86void _gtk_size_request_cache_clear (SizeRequestCache *cache);
87void _gtk_size_request_cache_commit (SizeRequestCache *cache,
88 GtkOrientation orientation,
89 int for_size,
90 int minimum_size,
91 int natural_size,
92 int minimum_baseline,
93 int natural_baseline);
94gboolean _gtk_size_request_cache_lookup (const SizeRequestCache *cache,
95 GtkOrientation orientation,
96 int for_size,
97 int *minimum,
98 int *natural,
99 int *minimum_baseline,
100 int *natural_baseline);
101
102G_END_DECLS
103
104#endif /* __GTK_SIZE_REQUEST_CACHE_PRIVATE_H__ */
105

source code of gtk/gtk/gtksizerequestcacheprivate.h