Handle negative width size in GDI+ DrawRectangle() and document it

Apparently it's a common convention to allow width and/or height of a
rectangle to be negative as both GDI and Cairo handle this natively, so also
allow this for GDI+ and document this as the expected behaviour.

Closes #17495.
This commit is contained in:
Kolya Kosenko 2016-04-23 18:12:56 +02:00 committed by Vadim Zeitlin
parent cb08b32f43
commit bb2b48f2ba
2 changed files with 20 additions and 2 deletions

View File

@ -523,8 +523,14 @@ public:
wxPolygonFillMode fill_style = wxODDEVEN_RULE);
/**
Draws a rectangle with the given top left corner, and with the given
size. The current pen is used for the outline and the current brush
Draws a rectangle with the given corner coordinate and size.
Normally, @a x and @a y specify the top left corner coordinates and
both @a width and @a height are positive, however they are also allowed
to be negative, in which case the corresponding corner coordinate
refers to the right or bottom corner instead.
The current pen is used for the outline and the current brush
for filling the shape.
*/
void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);

View File

@ -1508,6 +1508,18 @@ void wxGDIPlusContext::DrawRectangle( wxDouble x, wxDouble y, wxDouble w, wxDoub
Brush *brush = m_brush.IsNull() ? NULL : ((wxGDIPlusBrushData*)m_brush.GetRefData())->GetGDIPlusBrush();
Pen *pen = m_pen.IsNull() ? NULL : ((wxGDIPlusPenData*)m_pen.GetGraphicsData())->GetGDIPlusPen();
if ( w < 0 )
{
x += w;
w = -w;
}
if ( h < 0 )
{
y += h;
h = -h;
}
if ( brush )
{
// the offset is used to fill only the inside of the rectangle and not paint underneath