-
-/* looks for a cached size request for this for_size. If not
- * found, returns the oldest entry so it can be overwritten
- *
- * Note that this caching code was directly derived from
- * the Clutter toolkit.
- */
-static gboolean
-get_cached_size (SizeRequestCache *cache,
- GtkSizeGroupMode orientation,
- gint for_size,
- SizeRequest **result)
-{
- guint i, n_sizes;
- SizeRequest *cached_sizes;
-
- if (orientation == GTK_SIZE_GROUP_HORIZONTAL)
- {
- cached_sizes = cache->widths;
- n_sizes = cache->cached_widths;
- }
- else
- {
- cached_sizes = cache->heights;
- n_sizes = cache->cached_widths;
- }
-
- /* Search for an already cached size */
- for (i = 0; i < n_sizes; i++)
- {
- if (cached_sizes[i].for_size == for_size)
- {
- *result = &cached_sizes[i];
- return TRUE;
- }
- }
-
- /* If not found, pull a new size from the cache, the returned size cache
- * will immediately be used to cache the new computed size so we go ahead
- * and increment the last_cached_width/height right away */
- if (orientation == GTK_SIZE_GROUP_HORIZONTAL)
- {
- if (cache->cached_widths < GTK_SIZE_REQUEST_CACHED_SIZES)
- {
- cache->cached_widths++;
- cache->last_cached_width = cache->cached_widths - 1;
- }
- else
- {
- if (++cache->last_cached_width == GTK_SIZE_REQUEST_CACHED_SIZES)
- cache->last_cached_width = 0;
- }
-
- *result = &cache->widths[cache->last_cached_width];
- }
- else /* GTK_SIZE_GROUP_VERTICAL */
- {
- if (cache->cached_heights < GTK_SIZE_REQUEST_CACHED_SIZES)
- {
- cache->cached_heights++;
- cache->last_cached_height = cache->cached_heights - 1;
- }
- else
- {
- if (++cache->last_cached_height == GTK_SIZE_REQUEST_CACHED_SIZES)
- cache->last_cached_height = 0;
- }
-
- *result = &cache->heights[cache->last_cached_height];
- }
-
- return FALSE;
-}