// For correct handling of accessibility, high contrast, the // page background color is set as the background color at the // outliner of the draw view. Only necessary for the layers // hell and heaven
Color aOldOutlinerBackgroundColor; // set default horizontal text direction on painting <hell> or // <heaven>.
EEHorizontalTextDirection aOldEEHoriTextDir = EEHorizontalTextDirection::L2R; const IDocumentDrawModelAccess& rIDDMA = GetShell().getIDocumentDrawModelAccess(); if ( (_nLayerID == rIDDMA.GetHellId()) ||
(_nLayerID == rIDDMA.GetHeavenId()) )
{
OSL_ENSURE( _pPageBackgrdColor, "incorrect usage of SwViewShellImp::PaintLayer: pPageBackgrdColor have to be set for painting layer <hell> or <heaven>"); if ( _pPageBackgrdColor )
{
aOldOutlinerBackgroundColor =
GetDrawView()->GetModel().GetDrawOutliner().GetBackgroundColor();
GetDrawView()->GetModel().GetDrawOutliner().SetBackgroundColor( *_pPageBackgrdColor );
}
// reset background color of the outliner & default horiz. text dir. if ( (_nLayerID == rIDDMA.GetHellId()) ||
(_nLayerID == rIDDMA.GetHeavenId()) )
{
GetDrawView()->GetModel().GetDrawOutliner().SetBackgroundColor( aOldOutlinerBackgroundColor );
GetDrawView()->GetModel().GetDrawOutliner().SetDefaultHorizontalTextDirection( aOldEEHoriTextDir );
}
pOutDev->SetDrawMode( nOldDrawMode );
}
bool SwViewShellImp::IsDragPossible( const Point &rPoint )
{ if ( !HasDrawView() ) returnfalse;
if ( GetPageView() )
GetPageView()->GetPage()->SetSize( rNewSz );
// Limitation of the work area const tools::Rectangle aDocRect( Point( DOCUMENTBORDER, DOCUMENTBORDER ), rNewSz ); const tools::Rectangle &rOldWork = GetDrawView()->GetWorkArea(); bool bCheckDrawObjs = false; if ( aDocRect != rOldWork )
{ if ( rOldWork.Bottom() > aDocRect.Bottom() || rOldWork.Right() > aDocRect.Right())
bCheckDrawObjs = true;
GetDrawView()->SetWorkArea( aDocRect );
} if ( !bCheckDrawObjs ) return;
OSL_ENSURE( m_rShell.getIDocumentDrawModelAccess().GetDrawModel(), "NotifySizeChg without DrawModel" );
SdrPage* pPage = m_rShell.getIDocumentDrawModelAccess().GetDrawModel()->GetPage( 0 );
std::vector<SdrObject*> aCandidatesToMove; for (const rtl::Reference<SdrObject>& pObj : *pPage)
{ if( dynamic_cast<const SwVirtFlyDrawObj*>( pObj.get()) == nullptr )
{ // Objects not anchored to the frame, do not need to be adjusted const SwContact *pCont = GetUserCall(pObj.get()); // this function might be called by the InsertDocument, when // a PageDesc-Attribute is set on a node. Then the SdrObject // must not have an UserCall. if( !pCont ) continue; auto pDrawContact = dynamic_cast<const SwDrawContact*>( pCont); if( !pDrawContact ) continue;
const SwFrame *pAnchor = pDrawContact->GetAnchorFrame(); if ( !pAnchor || pAnchor->IsInFly() || !pAnchor->isFrameAreaDefinitionValid() ||
!pAnchor->GetUpper() || !pAnchor->FindPageFrame() ||
(RndStdIds::FLY_AS_CHAR == pCont->GetFormat()->GetAnchor().GetAnchorId()) )
{ continue;
} else
{ // Actually this should never happen but currently layouting // is broken. So don't move anchors, if the page is invalid. // This should be turned into a DBG_ASSERT, once layouting is fixed! const SwPageFrame *pPageFrame = pAnchor->FindPageFrame(); if (!pPageFrame || pPageFrame->IsInvalid() ) {
SAL_WARN( "sw.core", "Trying to move anchor from invalid page - fix layouting!" ); continue;
}
}
// no move for drawing objects in header/footer if ( pAnchor->FindFooterOrHeader() )
{ continue;
}
aCandidatesToMove.push_back(pObj.get());
}
}
// Moving a SdrObject can invalidate their positions in SdrPage's container of objects for (constauto pObj : aCandidatesToMove)
{ const tools::Rectangle aObjBound( pObj->GetCurrentBoundRect() ); if ( !aDocRect.Contains( aObjBound ) )
{
Size aSz; if ( aObjBound.Left() > aDocRect.Right() )
aSz.setWidth( (aDocRect.Right() - aObjBound.Left()) - MINFLY ); if ( aObjBound.Top() > aDocRect.Bottom() )
aSz.setHeight( (aDocRect.Bottom() - aObjBound.Top()) - MINFLY ); if ( aSz.Width() || aSz.Height() )
pObj->Move( aSz );
// Don't let large objects disappear to the top
aSz.setWidth(0);
aSz.setHeight(0); if ( aObjBound.Right() < aDocRect.Left() )
aSz.setWidth( (aDocRect.Left() - aObjBound.Right()) + MINFLY ); if ( aObjBound.Bottom() < aDocRect.Top() )
aSz.setHeight( (aDocRect.Top() - aObjBound.Bottom()) + MINFLY ); if ( aSz.Width() || aSz.Height() )
pObj->Move( aSz );
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.