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:
committed by
Vadim Zeitlin
parent
cb08b32f43
commit
bb2b48f2ba
@@ -523,8 +523,14 @@ public:
|
|||||||
wxPolygonFillMode fill_style = wxODDEVEN_RULE);
|
wxPolygonFillMode fill_style = wxODDEVEN_RULE);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Draws a rectangle with the given top left corner, and with the given
|
Draws a rectangle with the given corner coordinate and size.
|
||||||
size. The current pen is used for the outline and the current brush
|
|
||||||
|
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.
|
for filling the shape.
|
||||||
*/
|
*/
|
||||||
void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
|
void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
|
||||||
|
@@ -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();
|
Brush *brush = m_brush.IsNull() ? NULL : ((wxGDIPlusBrushData*)m_brush.GetRefData())->GetGDIPlusBrush();
|
||||||
Pen *pen = m_pen.IsNull() ? NULL : ((wxGDIPlusPenData*)m_pen.GetGraphicsData())->GetGDIPlusPen();
|
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 )
|
if ( brush )
|
||||||
{
|
{
|
||||||
// the offset is used to fill only the inside of the rectangle and not paint underneath
|
// the offset is used to fill only the inside of the rectangle and not paint underneath
|
||||||
|
Reference in New Issue
Block a user