Honour source wxDC coordinate system in wxDC::Blit() in wxMSW.

wxGTK and wxOSX already did this so do it in wxMSW as well.

Update the documentation to make this explicit.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71028 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-03-27 12:28:04 +00:00
parent 825842b411
commit 6f26e88002
3 changed files with 19 additions and 1 deletions

View File

@@ -207,6 +207,9 @@ Changes in behaviour not resulting in compilation errors, please read this!
behaved differently in wxMSW and wxGTK/wxOSX before) if more than one item
is selected in a control with wxDV_MULTIPLE style.
- wxDC::Blit() now honours the source DC coordinate system in wxMSW, as in all
the other ports, do not apply scaling to source coordinates manually any more.
Changes in behaviour which may result in compilation errors
-----------------------------------------------------------

View File

@@ -1125,6 +1125,11 @@ public:
target DCs. If you need to apply scaling while copying, use
StretchBlit().
Notice that source DC coordinates @a xsrc and @a ysrc are interpreted
using the current source DC coordinate system, i.e. the scale, origin
position and axis directions are taken into account when transforming
them to physical (pixel) coordinates.
@param xdest
Destination device context x position.
@param ydest
@@ -1195,7 +1200,10 @@ public:
source or target DC but calling this method is simpler and can also be
more efficient if the platform provides a native implementation of it.
The meaning of its other parameters is the same as with Blit().
The meaning of its other parameters is the same as with Blit(), in
particular all source coordinates are interpreted using the source DC
coordinate system, i.e. are affected by its scale, origin translation
and axis direction.
@param xdest
Destination device context x position.

View File

@@ -2246,6 +2246,13 @@ bool wxMSWDCImpl::DoStretchBlit(wxCoord xdest, wxCoord ydest,
return false;
}
// We need to interpret source-related coordinates in source DC
// coordinate system.
xsrc = source->LogicalToDeviceX(xsrc);
ysrc = source->LogicalToDeviceY(ysrc);
srcWidth = source->LogicalToDeviceXRel(srcWidth);
srcHeight = source->LogicalToDeviceYRel(srcHeight);
const HDC hdcSrc = GetHdcOf(*implSrc);
// if either the source or destination has alpha channel, we must use