source: trunk/third/gtk/gdk/gdkrectangle.c @ 14482

Revision 14482, 2.7 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14481, which included commits to RCS files with non-trunk default branches.
Line 
1/* GDK - The GIMP Drawing Kit
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 Library 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 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 */
19
20/*
21 * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
22 * file for a list of people on the GTK+ Team.  See the ChangeLog
23 * files for a list of changes.  These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
25 */
26
27#include "gdk.h"
28
29
30
31void
32gdk_rectangle_union (GdkRectangle *src1,
33                     GdkRectangle *src2,
34                     GdkRectangle *dest)
35{
36  g_return_if_fail (src1 != NULL);
37  g_return_if_fail (src2 != NULL);
38  g_return_if_fail (dest != NULL);
39
40  dest->x = MIN (src1->x, src2->x);
41  dest->y = MIN (src1->y, src2->y);
42  dest->width = MAX (src1->x + src1->width, src2->x + src2->width) - dest->x;
43  dest->height = MAX (src1->y + src1->height, src2->y + src2->height) - dest->y;
44}
45
46gboolean
47gdk_rectangle_intersect (GdkRectangle *src1,
48                         GdkRectangle *src2,
49                         GdkRectangle *dest)
50{
51  GdkRectangle *temp;
52  gint src1_x2, src1_y2;
53  gint src2_x2, src2_y2;
54  gint return_val;
55
56  g_return_val_if_fail (src1 != NULL, FALSE);
57  g_return_val_if_fail (src2 != NULL, FALSE);
58  g_return_val_if_fail (dest != NULL, FALSE);
59
60  return_val = FALSE;
61
62  if (src2->x < src1->x)
63    {
64      temp = src1;
65      src1 = src2;
66      src2 = temp;
67    }
68  dest->x = src2->x;
69
70  src1_x2 = src1->x + src1->width;
71  src2_x2 = src2->x + src2->width;
72
73  if (src2->x < src1_x2)
74    {
75      if (src1_x2 < src2_x2)
76        dest->width = src1_x2 - dest->x;
77      else
78        dest->width = src2_x2 - dest->x;
79
80      if (src2->y < src1->y)
81        {
82          temp = src1;
83          src1 = src2;
84          src2 = temp;
85        }
86      dest->y = src2->y;
87
88      src1_y2 = src1->y + src1->height;
89      src2_y2 = src2->y + src2->height;
90
91      if (src2->y < src1_y2)
92        {
93          return_val = TRUE;
94
95          if (src1_y2 < src2_y2)
96            dest->height = src1_y2 - dest->y;
97          else
98            dest->height = src2_y2 - dest->y;
99
100          if (dest->height == 0)
101            return_val = FALSE;
102          if (dest->width == 0)
103            return_val = FALSE;
104        }
105    }
106
107  return return_val;
108}
Note: See TracBrowser for help on using the repository browser.