Patch from Carlo Wood to do some miscellaneous code cleanups found while

2007-04-02  Elijah Newren  <newren gmail com>

	Patch from Carlo Wood to do some miscellaneous code cleanups found
	while working on #358311.

	* src/constraints.c (do_screen_and_xinerama_relative_constraints):
	nicer way of avoiding compilation warning

	* src/boxes.c (meta_rectangle_clamp_to_fit_into_region,
	  meta_rectangle_clip_to_region, meta_rectangle_shove_into_region):
	Much cleaner way of ignoring invalid boxes in comparisons

svn path=/trunk/; revision=3145
This commit is contained in:
Elijah Newren 2007-04-03 18:40:00 +00:00 committed by Elijah Newren
parent 08f51fdf94
commit ec51e41c62
3 changed files with 41 additions and 47 deletions

View File

@ -1,3 +1,15 @@
2007-04-02 Elijah Newren <newren gmail com>
Patch from Carlo Wood to do some miscellaneous code cleanups found
while working on #358311.
* src/constraints.c (do_screen_and_xinerama_relative_constraints):
nicer way of avoiding compilation warning
* src/boxes.c (meta_rectangle_clamp_to_fit_into_region,
meta_rectangle_clip_to_region, meta_rectangle_shove_into_region):
Much cleaner way of ignoring invalid boxes in comparisons
2007-04-02 Elijah Newren <newren gmail com> 2007-04-02 Elijah Newren <newren gmail com>
Patch from Carlo Wood to fix handling of unidirectional Patch from Carlo Wood to fix handling of unidirectional

View File

@ -808,39 +808,36 @@ meta_rectangle_clamp_to_fit_into_region (const GList *spanning_rects,
/* First, find best rectangle from spanning_rects to which we can clamp /* First, find best rectangle from spanning_rects to which we can clamp
* rect to fit into. * rect to fit into.
*/ */
temp = spanning_rects; for (temp = spanning_rects; temp; temp = temp->next)
while (temp)
{ {
int factor = 1;
MetaRectangle *compare_rect = temp->data; MetaRectangle *compare_rect = temp->data;
int maximal_overlap_amount_for_compare; int maximal_overlap_amount_for_compare;
/* If x is fixed and the entire width of rect doesn't fit in compare, set /* If x is fixed and the entire width of rect doesn't fit in compare,
* factor to 0. * skip this rectangle.
*/ */
if ((fixed_directions & FIXED_DIRECTION_X) && if ((fixed_directions & FIXED_DIRECTION_X) &&
(compare_rect->x > rect->x || (compare_rect->x > rect->x ||
compare_rect->x + compare_rect->width < rect->x + rect->width)) compare_rect->x + compare_rect->width < rect->x + rect->width))
factor = 0; continue;
/* If y is fixed and the entire height of rect doesn't fit in compare, set /* If y is fixed and the entire height of rect doesn't fit in compare,
* factor to 0. * skip this rectangle.
*/ */
if ((fixed_directions & FIXED_DIRECTION_Y) && if ((fixed_directions & FIXED_DIRECTION_Y) &&
(compare_rect->y > rect->y || (compare_rect->y > rect->y ||
compare_rect->y + compare_rect->height < rect->y + rect->height)) compare_rect->y + compare_rect->height < rect->y + rect->height))
factor = 0; continue;
/* If compare can't hold the min_size window, set factor to 0 */ /* If compare can't hold the min_size window, skip this rectangle. */
if (compare_rect->width < min_size->width || if (compare_rect->width < min_size->width ||
compare_rect->height < min_size->height) compare_rect->height < min_size->height)
factor = 0; continue;
/* Determine maximal overlap amount */ /* Determine maximal overlap amount */
maximal_overlap_amount_for_compare = maximal_overlap_amount_for_compare =
MIN (rect->width, compare_rect->width) * MIN (rect->width, compare_rect->width) *
MIN (rect->height, compare_rect->height); MIN (rect->height, compare_rect->height);
maximal_overlap_amount_for_compare *= factor;
/* See if this is the best rect so far */ /* See if this is the best rect so far */
if (maximal_overlap_amount_for_compare > best_overlap) if (maximal_overlap_amount_for_compare > best_overlap)
@ -848,8 +845,6 @@ meta_rectangle_clamp_to_fit_into_region (const GList *spanning_rects,
best_rect = compare_rect; best_rect = compare_rect;
best_overlap = maximal_overlap_amount_for_compare; best_overlap = maximal_overlap_amount_for_compare;
} }
temp = temp->next;
} }
/* Clamp rect appropriately */ /* Clamp rect appropriately */
@ -882,34 +877,31 @@ meta_rectangle_clip_to_region (const GList *spanning_rects,
/* First, find best rectangle from spanning_rects to which we will clip /* First, find best rectangle from spanning_rects to which we will clip
* rect into. * rect into.
*/ */
temp = spanning_rects; for (temp = spanning_rects; temp; temp = temp->next)
while (temp)
{ {
int factor = 1;
MetaRectangle *compare_rect = temp->data; MetaRectangle *compare_rect = temp->data;
MetaRectangle overlap; MetaRectangle overlap;
int maximal_overlap_amount_for_compare; int maximal_overlap_amount_for_compare;
/* If x is fixed and the entire width of rect doesn't fit in compare, set /* If x is fixed and the entire width of rect doesn't fit in compare,
* factor to 0. * skip the rectangle.
*/ */
if ((fixed_directions & FIXED_DIRECTION_X) && if ((fixed_directions & FIXED_DIRECTION_X) &&
(compare_rect->x > rect->x || (compare_rect->x > rect->x ||
compare_rect->x + compare_rect->width < rect->x + rect->width)) compare_rect->x + compare_rect->width < rect->x + rect->width))
factor = 0; continue;
/* If y is fixed and the entire height of rect doesn't fit in compare, set /* If y is fixed and the entire height of rect doesn't fit in compare,
* factor to 0. * skip the rectangle.
*/ */
if ((fixed_directions & FIXED_DIRECTION_Y) && if ((fixed_directions & FIXED_DIRECTION_Y) &&
(compare_rect->y > rect->y || (compare_rect->y > rect->y ||
compare_rect->y + compare_rect->height < rect->y + rect->height)) compare_rect->y + compare_rect->height < rect->y + rect->height))
factor = 0; continue;
/* Determine maximal overlap amount */ /* Determine maximal overlap amount */
meta_rectangle_intersect (rect, compare_rect, &overlap); meta_rectangle_intersect (rect, compare_rect, &overlap);
maximal_overlap_amount_for_compare = meta_rectangle_area (&overlap); maximal_overlap_amount_for_compare = meta_rectangle_area (&overlap);
maximal_overlap_amount_for_compare *= factor;
/* See if this is the best rect so far */ /* See if this is the best rect so far */
if (maximal_overlap_amount_for_compare > best_overlap) if (maximal_overlap_amount_for_compare > best_overlap)
@ -917,8 +909,6 @@ meta_rectangle_clip_to_region (const GList *spanning_rects,
best_rect = compare_rect; best_rect = compare_rect;
best_overlap = maximal_overlap_amount_for_compare; best_overlap = maximal_overlap_amount_for_compare;
} }
temp = temp->next;
} }
/* Clip rect appropriately */ /* Clip rect appropriately */
@ -965,36 +955,35 @@ meta_rectangle_shove_into_region (const GList *spanning_rects,
/* First, find best rectangle from spanning_rects to which we will shove /* First, find best rectangle from spanning_rects to which we will shove
* rect into. * rect into.
*/ */
temp = spanning_rects;
while (temp) for (temp = spanning_rects; temp; temp = temp->next)
{ {
int factor = 1;
MetaRectangle *compare_rect = temp->data; MetaRectangle *compare_rect = temp->data;
int maximal_overlap_amount_for_compare; int maximal_overlap_amount_for_compare;
int dist_to_compare; int dist_to_compare;
/* If x is fixed and the entire width of rect doesn't fit in compare, set /* If x is fixed and the entire width of rect doesn't fit in compare,
* factor to 0. * skip this rectangle.
*/ */
if ((fixed_directions & FIXED_DIRECTION_X) && if ((fixed_directions & FIXED_DIRECTION_X) &&
(compare_rect->x > rect->x || (compare_rect->x > rect->x ||
compare_rect->x + compare_rect->width < rect->x + rect->width)) compare_rect->x + compare_rect->width < rect->x + rect->width))
factor = 0; continue;
/* If y is fixed and the entire height of rect doesn't fit in compare, set /* If y is fixed and the entire height of rect doesn't fit in compare,
* factor to 0. * skip this rectangle.
*/ */
if ((fixed_directions & FIXED_DIRECTION_Y) && if ((fixed_directions & FIXED_DIRECTION_Y) &&
(compare_rect->y > rect->y || (compare_rect->y > rect->y ||
compare_rect->y + compare_rect->height < rect->y + rect->height)) compare_rect->y + compare_rect->height < rect->y + rect->height))
factor = 0; continue;
/* Determine maximal overlap amount between rect & compare_rect */ /* Determine maximal overlap amount between rect & compare_rect */
maximal_overlap_amount_for_compare = maximal_overlap_amount_for_compare =
MIN (rect->width, compare_rect->width) * MIN (rect->width, compare_rect->width) *
MIN (rect->height, compare_rect->height); MIN (rect->height, compare_rect->height);
/* Determine distance necessary to put rect into comapre_rect */ /* Determine distance necessary to put rect into compare_rect */
dist_to_compare = 0; dist_to_compare = 0;
if (compare_rect->x > rect->x) if (compare_rect->x > rect->x)
dist_to_compare += compare_rect->x - rect->x; dist_to_compare += compare_rect->x - rect->x;
@ -1007,13 +996,6 @@ meta_rectangle_shove_into_region (const GList *spanning_rects,
dist_to_compare += (rect->y + rect->height) - dist_to_compare += (rect->y + rect->height) -
(compare_rect->y + compare_rect->height); (compare_rect->y + compare_rect->height);
/* If we'd have to move in the wrong direction, disqualify compare_rect */
if (factor == 0)
{
maximal_overlap_amount_for_compare = 0;
dist_to_compare = G_MAXINT;
}
/* See if this is the best rect so far */ /* See if this is the best rect so far */
if ((maximal_overlap_amount_for_compare > best_overlap) || if ((maximal_overlap_amount_for_compare > best_overlap) ||
(maximal_overlap_amount_for_compare == best_overlap && (maximal_overlap_amount_for_compare == best_overlap &&
@ -1023,8 +1005,6 @@ meta_rectangle_shove_into_region (const GList *spanning_rects,
best_overlap = maximal_overlap_amount_for_compare; best_overlap = maximal_overlap_amount_for_compare;
shortest_distance = dist_to_compare; shortest_distance = dist_to_compare;
} }
temp = temp->next;
} }
/* Shove rect appropriately */ /* Shove rect appropriately */

View File

@ -1026,13 +1026,15 @@ do_screen_and_xinerama_relative_constraints (
gboolean exit_early = FALSE, constraint_satisfied; gboolean exit_early = FALSE, constraint_satisfied;
MetaRectangle how_far_it_can_be_smushed, min_size, max_size; MetaRectangle how_far_it_can_be_smushed, min_size, max_size;
#ifdef WITH_VERBOSE_MODE
/* First, log some debugging information */ /* First, log some debugging information */
char spanning_region[1 + 28 * g_list_length (region_spanning_rectangles)]; char spanning_region[1 + 28 * g_list_length (region_spanning_rectangles)];
(void) spanning_region; /* Avoid stupid & incorrect compiler warnings... */
meta_topic (META_DEBUG_GEOMETRY, meta_topic (META_DEBUG_GEOMETRY,
"screen/xinerama constraint; region_spanning_rectangles: %s\n", "screen/xinerama constraint; region_spanning_rectangles: %s\n",
meta_rectangle_region_to_string (region_spanning_rectangles, ", ", meta_rectangle_region_to_string (region_spanning_rectangles, ", ",
spanning_region)); spanning_region));
#endif
/* Determine whether constraint applies; exit if it doesn't */ /* Determine whether constraint applies; exit if it doesn't */
how_far_it_can_be_smushed = info->current; how_far_it_can_be_smushed = info->current;