Kaydet (Commit) f3695b26 authored tarafından Armin Le Grand's avatar Armin Le Grand

i122216 Ensure FormControls get printed/PDFed, also ensure graphics are all visible in metafiles

üst bab3ddce
...@@ -1342,7 +1342,10 @@ namespace drawinglayer ...@@ -1342,7 +1342,10 @@ namespace drawinglayer
} }
case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D :
{ {
// direct draw of transformed BitmapEx primitive; use default processing // direct draw of transformed BitmapEx primitive; use default processing, but without
// former testing if graphic content is inside discrete local viewport; this is not
// setup for metafile targets (metafile renderer tries to render in logic coordinates,
// the mapping is kept to the OutputDevice for better Metafile recording)
RenderBitmapPrimitive2D(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate)); RenderBitmapPrimitive2D(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate));
break; break;
} }
......
...@@ -183,6 +183,25 @@ namespace drawinglayer ...@@ -183,6 +183,25 @@ namespace drawinglayer
case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D :
{ {
// direct draw of transformed BitmapEx primitive // direct draw of transformed BitmapEx primitive
const primitive2d::BitmapPrimitive2D& rBitmapCandidate = static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate);
// check if graphic content is inside discrete local ViewPort
const basegfx::B2DRange& rDiscreteViewPort(getViewInformation2D().getDiscreteViewport());
const basegfx::B2DHomMatrix aLocalTransform(maCurrentTransformation * rBitmapCandidate.getTransform());
if(!rDiscreteViewPort.isEmpty())
{
basegfx::B2DRange aUnitRange(0.0, 0.0, 1.0, 1.0);
aUnitRange.transform(aLocalTransform);
if(!aUnitRange.overlaps(rDiscreteViewPort))
{
// content is outside discrete local ViewPort
break;
}
}
RenderBitmapPrimitive2D(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate)); RenderBitmapPrimitive2D(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate));
break; break;
} }
......
...@@ -387,24 +387,8 @@ namespace drawinglayer ...@@ -387,24 +387,8 @@ namespace drawinglayer
// direct draw of transformed BitmapEx primitive // direct draw of transformed BitmapEx primitive
void VclProcessor2D::RenderBitmapPrimitive2D(const primitive2d::BitmapPrimitive2D& rBitmapCandidate) void VclProcessor2D::RenderBitmapPrimitive2D(const primitive2d::BitmapPrimitive2D& rBitmapCandidate)
{ {
// check local ViewPort
const basegfx::B2DRange& rDiscreteViewPort(getViewInformation2D().getDiscreteViewport());
const basegfx::B2DHomMatrix aLocalTransform(maCurrentTransformation * rBitmapCandidate.getTransform());
if(!rDiscreteViewPort.isEmpty())
{
// check if we are visible
basegfx::B2DRange aUnitRange(0.0, 0.0, 1.0, 1.0);
aUnitRange.transform(aLocalTransform);
if(!aUnitRange.overlaps(rDiscreteViewPort))
{
return;
}
}
BitmapEx aBitmapEx(rBitmapCandidate.getBitmapEx()); BitmapEx aBitmapEx(rBitmapCandidate.getBitmapEx());
const basegfx::B2DHomMatrix aLocalTransform(maCurrentTransformation * rBitmapCandidate.getTransform());
if(maBColorModifierStack.count()) if(maBColorModifierStack.count())
{ {
......
...@@ -178,7 +178,6 @@ namespace sdr ...@@ -178,7 +178,6 @@ namespace sdr
const double fCurrentTime(getPrimitiveAnimator().GetTime()); const double fCurrentTime(getPrimitiveAnimator().GetTime());
OutputDevice& rTargetOutDev = GetPageWindow().GetPaintWindow().GetTargetOutputDevice(); OutputDevice& rTargetOutDev = GetPageWindow().GetPaintWindow().GetTargetOutputDevice();
basegfx::B2DRange aViewRange; basegfx::B2DRange aViewRange;
basegfx::B2DHomMatrix aViewTransformation;
// create ViewRange // create ViewRange
if(isOutputToRecordingMetaFile()) if(isOutputToRecordingMetaFile())
...@@ -228,16 +227,12 @@ namespace sdr ...@@ -228,16 +227,12 @@ namespace sdr
// transform to world coordinates // transform to world coordinates
aViewRange.transform(rTargetOutDev.GetInverseViewTransformation()); aViewRange.transform(rTargetOutDev.GetInverseViewTransformation());
// for metafile, leave ViewTransformation empty, but for pixel renderer
// get it from OutputDevice
aViewTransformation = rTargetOutDev.GetViewTransformation();
} }
// update local ViewInformation2D // update local ViewInformation2D
const drawinglayer::geometry::ViewInformation2D aNewViewInformation2D( const drawinglayer::geometry::ViewInformation2D aNewViewInformation2D(
basegfx::B2DHomMatrix(), basegfx::B2DHomMatrix(),
aViewTransformation, rTargetOutDev.GetViewTransformation(),
aViewRange, aViewRange,
GetXDrawPageForSdrPage(GetSdrPage()), GetXDrawPageForSdrPage(GetSdrPage()),
fCurrentTime, fCurrentTime,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment