[gtk+] sizerequestcache: Move lookup function
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] sizerequestcache: Move lookup function
- Date: Wed, 14 Nov 2012 01:05:29 +0000 (UTC)
commit 0e0ee480d3512c3f4a54b53682670a834d55651b
Author: Benjamin Otte <otte redhat com>
Date: Wed Nov 14 01:10:21 2012 +0100
sizerequestcache: Move lookup function
...and clean up its API.
gtk/gtksizerequest.c | 83 +++++--------------------------------
gtk/gtksizerequestcache.c | 65 +++++++++++++++++++++++++++++
gtk/gtksizerequestcacheprivate.h | 5 ++
3 files changed, 82 insertions(+), 71 deletions(-)
---
diff --git a/gtk/gtksizerequest.c b/gtk/gtksizerequest.c
index a57c0dd..8e7bdc7 100644
--- a/gtk/gtksizerequest.c
+++ b/gtk/gtksizerequest.c
@@ -83,64 +83,6 @@ pop_recursion_check (GtkWidget *widget,
#endif
}
-
-/* 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 originally derived from
- * the Clutter toolkit but has evolved for other GTK+ requirements.
- */
-static gboolean
-get_cached_size (GtkWidget *widget,
- GtkSizeGroupMode orientation,
- gint for_size,
- CachedSize **result)
-{
- SizeRequestCache *cache;
- SizeRequest **cached_sizes;
- guint i, n_sizes;
-
- cache = _gtk_widget_peek_request_cache (widget);
-
- if (for_size < 0)
- {
- if (orientation == GTK_SIZE_GROUP_HORIZONTAL)
- {
- *result = &cache->cached_width;
- return cache->cached_base_width;
- }
- else
- {
- *result = &cache->cached_height;
- return cache->cached_base_height;
- }
- }
-
- if (orientation == GTK_SIZE_GROUP_HORIZONTAL)
- {
- cached_sizes = cache->widths;
- n_sizes = cache->cached_widths;
- }
- else
- {
- cached_sizes = cache->heights;
- n_sizes = cache->cached_heights;
- }
-
- /* Search for an already cached size */
- for (i = 0; i < n_sizes; i++)
- {
- if (cached_sizes[i]->lower_for_size <= for_size &&
- cached_sizes[i]->upper_for_size >= for_size)
- {
- *result = &cached_sizes[i]->cached_size;
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
static const char *
get_vfunc_name (GtkSizeGroupMode orientation,
gint for_size)
@@ -158,13 +100,18 @@ gtk_widget_query_size_for_orientation (GtkWidget *widget,
gint *minimum_size,
gint *natural_size)
{
- CachedSize *cached_size;
- gboolean found_in_cache = FALSE;
- gint min_size = 0;
- gint nat_size = 0;
-
- found_in_cache = get_cached_size (widget, orientation, for_size, &cached_size);
+ SizeRequestCache *cache;
+ gint min_size = 0;
+ gint nat_size = 0;
+ gboolean found_in_cache;
+ cache = _gtk_widget_peek_request_cache (widget);
+ found_in_cache = _gtk_size_request_cache_lookup (cache,
+ orientation,
+ for_size,
+ &min_size,
+ &nat_size);
+
if (!found_in_cache)
{
gint adjusted_min, adjusted_natural, adjusted_for_size = for_size;
@@ -279,17 +226,12 @@ gtk_widget_query_size_for_orientation (GtkWidget *widget,
nat_size = adjusted_natural;
}
- _gtk_size_request_cache_commit (_gtk_widget_peek_request_cache (widget),
+ _gtk_size_request_cache_commit (cache,
orientation,
for_size,
min_size,
nat_size);
}
- else
- {
- min_size = cached_size->minimum_size;
- nat_size = cached_size->natural_size;
- }
if (minimum_size)
*minimum_size = min_size;
@@ -306,7 +248,6 @@ gtk_widget_query_size_for_orientation (GtkWidget *widget,
"width for height" : "height for width" ,
for_size, min_size, nat_size,
found_in_cache ? "yes" : "no"));
-
}
/* This is the main function that checks for a cached size and
diff --git a/gtk/gtksizerequestcache.c b/gtk/gtksizerequestcache.c
index 778ae2c..f4879f2 100644
--- a/gtk/gtksizerequestcache.c
+++ b/gtk/gtksizerequestcache.c
@@ -166,3 +166,68 @@ _gtk_size_request_cache_commit (SizeRequestCache *cache,
}
}
+/* looks for a cached size request for this for_size.
+ *
+ * Note that this caching code was originally derived from
+ * the Clutter toolkit but has evolved for other GTK+ requirements.
+ */
+gboolean
+_gtk_size_request_cache_lookup (SizeRequestCache *cache,
+ GtkSizeGroupMode orientation,
+ gint for_size,
+ gint *minimum,
+ gint *natural)
+{
+ CachedSize *result = NULL;
+
+ if (for_size < 0)
+ {
+ if (orientation == GTK_SIZE_GROUP_HORIZONTAL)
+ {
+ if (cache->cached_base_width)
+ result = &cache->cached_width;
+ }
+ else
+ {
+ if (cache->cached_base_height)
+ result = &cache->cached_height;
+ }
+ }
+ else
+ {
+ SizeRequest **cached_sizes;
+ guint i, n_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_heights;
+ }
+
+ /* Search for an already cached size */
+ for (i = 0; i < n_sizes; i++)
+ {
+ if (cached_sizes[i]->lower_for_size <= for_size &&
+ cached_sizes[i]->upper_for_size >= for_size)
+ {
+ result = &cached_sizes[i]->cached_size;
+ break;
+ }
+ }
+ }
+
+ if (result)
+ {
+ *minimum = result->minimum_size;
+ *natural = result->natural_size;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
diff --git a/gtk/gtksizerequestcacheprivate.h b/gtk/gtksizerequestcacheprivate.h
index 170343f..328a89e 100644
--- a/gtk/gtksizerequestcacheprivate.h
+++ b/gtk/gtksizerequestcacheprivate.h
@@ -76,6 +76,11 @@ void _gtk_size_request_cache_commit (SizeRequestCach
gint for_size,
gint minimum_size,
gint natural_size);
+gboolean _gtk_size_request_cache_lookup (SizeRequestCache *cache,
+ GtkSizeGroupMode orientation,
+ gint for_size,
+ gint *minimum,
+ gint *natural);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]