void
_gtk_size_request_cache_commit (SizeRequestCache *cache,
GtkOrientation orientation, int for_size, int minimum_size, int natural_size, int minimum_baseline, int natural_baseline)
{
guint i, n_sizes;
/* Check if the minimum_size and natural_size is already *inthecacheandifthisresultcanbeusedtoextend *thatcacheentry
*/
n_sizes = cache->flags[orientation].n_cached_requests;
#ifdef G_ENABLE_DEBUG if (cache->flags[GTK_ORIENTATION_HORIZONTAL].cached_size_valid &&
minimum_size < cache->cached_size_x.minimum_size)
g_warning ("Widget reports min width of %d for height of %d, but overall min width of %d",
minimum_size, for_size, cache->cached_size_x.minimum_size);
for (i = 0; i < cache->flags[GTK_ORIENTATION_VERTICAL].n_cached_requests; i++)
{ if (cache->requests_y[i]->upper_for_size >= minimum_size &&
cache->requests_y[i]->cached_size.minimum_size > for_size)
{
g_warning ("Widget reports min width of %d for height of %d, but min height of %d for width of %d",
minimum_size, for_size,
cache->requests_y[i]->cached_size.minimum_size,
cache->requests_y[i]->upper_for_size); break;
} elseif (cache->requests_y[i]->lower_for_size < minimum_size &&
cache->requests_y[i]->cached_size.minimum_size <= for_size)
{
g_warning ("Widget reports min width of %d for height of %d, but min height of %d for width of %d",
minimum_size, for_size,
cache->requests_y[i]->cached_size.minimum_size,
cache->requests_y[i]->lower_for_size); break;
}
} #endif
for (i = 0; i < n_sizes; i++)
{ if (cached_sizes[i]->cached_size.minimum_size == minimum_size &&
cached_sizes[i]->cached_size.natural_size == natural_size)
{
cached_sizes[i]->lower_for_size = MIN (cached_sizes[i]->lower_for_size, for_size);
cached_sizes[i]->upper_for_size = MAX (cached_sizes[i]->upper_for_size, for_size); return;
}
}
/* If not found, pull a new size from the cache, the returned size cache *willimmediatelybeusedtocachethenewcomputedsizesowegoahead
* and increment the last_cached_request right away */ if (n_sizes < GTK_SIZE_REQUEST_CACHED_SIZES)
{
cache->flags[orientation].n_cached_requests++;
cache->flags[orientation].last_cached_request = cache->flags[orientation].n_cached_requests - 1;
} else
{ if (++cache->flags[orientation].last_cached_request == GTK_SIZE_REQUEST_CACHED_SIZES)
cache->flags[orientation].last_cached_request = 0;
}
if (cache->requests_x == NULL)
cache->requests_x = g_new0 (SizeRequestX *, GTK_SIZE_REQUEST_CACHED_SIZES);
if (cache->requests_x[cache->flags[orientation].last_cached_request] == NULL)
cache->requests_x[cache->flags[orientation].last_cached_request] = g_new (SizeRequestX, 1);
#ifdef G_ENABLE_DEBUG if (cache->flags[GTK_ORIENTATION_VERTICAL].cached_size_valid &&
minimum_size < cache->cached_size_y.minimum_size)
g_warning ("Widget reports min height of %d for width of %d, but overall min height of %d",
minimum_size, for_size, cache->cached_size_y.minimum_size);
for (i = 0; i < cache->flags[GTK_ORIENTATION_HORIZONTAL].n_cached_requests; i++)
{ if (cache->requests_x[i]->upper_for_size >= minimum_size &&
cache->requests_x[i]->cached_size.minimum_size > for_size)
{
g_warning ("Widget reports min height of %d for width of %d, but min width of %d for height of %d",
minimum_size, for_size,
cache->requests_x[i]->cached_size.minimum_size,
cache->requests_x[i]->upper_for_size); break;
} elseif (cache->requests_x[i]->lower_for_size < minimum_size &&
cache->requests_x[i]->cached_size.minimum_size <= for_size)
{
g_warning ("Widget reports min height of %d for width of %d, but min width of %d for height of %d",
minimum_size, for_size,
cache->requests_x[i]->cached_size.minimum_size,
cache->requests_x[i]->lower_for_size); break;
}
} #endif
for (i = 0; i < n_sizes; i++)
{ if (cached_sizes[i]->cached_size.minimum_size == minimum_size &&
cached_sizes[i]->cached_size.natural_size == natural_size &&
cached_sizes[i]->cached_size.minimum_baseline == minimum_baseline &&
cached_sizes[i]->cached_size.natural_baseline == natural_baseline)
{
cached_sizes[i]->lower_for_size = MIN (cached_sizes[i]->lower_for_size, for_size);
cached_sizes[i]->upper_for_size = MAX (cached_sizes[i]->upper_for_size, for_size); return;
}
}
/* If not found, pull a new size from the cache, the returned size cache *willimmediatelybeusedtocachethenewcomputedsizesowegoahead
* and increment the last_cached_request right away */ if (n_sizes < GTK_SIZE_REQUEST_CACHED_SIZES)
{
cache->flags[orientation].n_cached_requests++;
cache->flags[orientation].last_cached_request = cache->flags[orientation].n_cached_requests - 1;
} else
{ if (++cache->flags[orientation].last_cached_request == GTK_SIZE_REQUEST_CACHED_SIZES)
cache->flags[orientation].last_cached_request = 0;
}
if (cache->requests_y == NULL)
cache->requests_y = g_new0 (SizeRequestY *, GTK_SIZE_REQUEST_CACHED_SIZES);
if (cache->requests_y[cache->flags[orientation].last_cached_request] == NULL)
cache->requests_y[cache->flags[orientation].last_cached_request] = g_new (SizeRequestY, 1);
/* looks for a cached size request for this for_size. * *Notethatthiscachingcodewasoriginallyderivedfrom *theCluttertoolkitbuthasevolvedforotherGTKrequirements.
*/
gboolean
_gtk_size_request_cache_lookup (const SizeRequestCache *cache,
GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline)
{
guint i, p;
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{ if (for_size < 0)
{ if (cache->flags[GTK_ORIENTATION_HORIZONTAL].cached_size_valid)
{ const CachedSizeX *result = &cache->cached_size_x;
returnFALSE;
} else
{ /* Search for an already cached size */ for (i = 0, p = cache->flags[GTK_ORIENTATION_HORIZONTAL].n_cached_requests; i < p; i++)
{ const SizeRequestX *cur = cache->requests_x[i];
returnFALSE;
} else
{ /* Search for an already cached size */ for (i = 0, p = cache->flags[GTK_ORIENTATION_VERTICAL].n_cached_requests; i < p; i++)
{ const SizeRequestY *cur = cache->requests_y[i];
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.