// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "gdicmn.h"
-#endif
-
#ifdef __VMS
#define XtDisplay XTDISPLAY
#endif
#include "wx/log.h"
#include <string.h>
-#if defined(__WXMSW__) && !defined(__PALMOS__)
+#if defined(__WXMSW__)
#include "wx/msw/wrapwin.h"
#endif
wxRect& wxRect::Union(const wxRect& rect)
{
- // ignore empty rectangles
- if ( rect.width && rect.height )
+ // ignore empty rectangles: union with an empty rectangle shouldn't extend
+ // this one to (0, 0)
+ if ( !width || !height )
+ {
+ *this = rect;
+ }
+ else if ( rect.width && rect.height )
{
int x1 = wxMin(x, rect.x);
int y1 = wxMin(y, rect.y);
width = x2 - x1;
height = y2 - y1;
}
+ //else: we're not empty and rect is empty
return *this;
}
wxRect& wxRect::Inflate(wxCoord dx, wxCoord dy)
{
- x -= dx;
- y -= dy;
- width += 2*dx;
- height += 2*dy;
-
- // check that we didn't make the rectangle invalid by accident (you almost
- // never want to have negative coords and never want negative size)
- if ( x < 0 )
- x = 0;
- if ( y < 0 )
- y = 0;
-
- // what else can we do?
- if ( width < 0 )
- width = 0;
- if ( height < 0 )
- height = 0;
+ if (-2*dx>width)
+ {
+ // Don't allow deflate to eat more width than we have,
+ // a well-defined rectangle cannot have negative width.
+ x+=width/2;
+ width=0;
+ }
+ else
+ {
+ // The inflate is valid.
+ x-=dx;
+ width+=2*dx;
+ }
+
+ if (-2*dy>height)
+ {
+ // Don't allow deflate to eat more height than we have,
+ // a well-defined rectangle cannot have negative height.
+ y+=height/2;
+ height=0;
+ }
+ else
+ {
+ // The inflate is valid.
+ y-=dy;
+ height+=2*dy;
+ }
return *this;
}