/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include // fuer SwFmtChg #include #include // --> OD 2009-07-13 #i73249# #include // <-- SwNoTxtNode::SwNoTxtNode( const SwNodeIndex & rWhere, const sal_uInt8 nNdType, SwGrfFmtColl *pGrfColl, SwAttrSet* pAutoAttr ) : SwCntntNode( rWhere, nNdType, pGrfColl ), pContour( 0 ), bAutomaticContour( sal_False ), bContourMapModeValid( sal_True ), bPixelContour( sal_False ) { // soll eine Harte-Attributierung gesetzt werden? if( pAutoAttr ) SetAttr( *pAutoAttr ); } SwNoTxtNode::~SwNoTxtNode() { delete pContour; } // erzeugt fuer alle Ableitungen einen AttrSet mit Bereichen // fuer Frame- und Grafik-Attributen void SwNoTxtNode::NewAttrSet( SwAttrPool& rPool ) { ASSERT( !mpAttrSet.get(), "AttrSet ist doch gesetzt" ); SwAttrSet aNewAttrSet( rPool, aNoTxtNodeSetRange ); // put names of parent style and conditional style: const SwFmtColl* pFmtColl = GetFmtColl(); String sVal; SwStyleNameMapper::FillProgName( pFmtColl->GetName(), sVal, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, sal_True ); SfxStringItem aFmtColl( RES_FRMATR_STYLE_NAME, sVal ); aNewAttrSet.Put( aFmtColl ); aNewAttrSet.SetParent( &GetFmtColl()->GetAttrSet() ); mpAttrSet = GetDoc()->GetIStyleAccess().getAutomaticStyle( aNewAttrSet, IStyleAccess::AUTO_STYLE_NOTXT ); } // Dummies fuer das Laden/Speichern von persistenten Daten // bei Grafiken und OLE-Objekten sal_Bool SwNoTxtNode::RestorePersistentData() { return sal_True; } sal_Bool SwNoTxtNode::SavePersistentData() { return sal_True; } void SwNoTxtNode::SetContour( const PolyPolygon *pPoly, sal_Bool bAutomatic ) { delete pContour; if ( pPoly ) pContour = new PolyPolygon( *pPoly ); else pContour = 0; bAutomaticContour = bAutomatic; bContourMapModeValid = sal_True; bPixelContour = sal_False; } void SwNoTxtNode::CreateContour() { ASSERT( !pContour, "Contour available." ); pContour = new PolyPolygon(SvxContourDlg::CreateAutoContour(GetGraphic())); bAutomaticContour = sal_True; bContourMapModeValid = sal_True; bPixelContour = sal_False; } const PolyPolygon *SwNoTxtNode::HasContour() const { if( !bContourMapModeValid ) { const MapMode aGrfMap( GetGraphic().GetPrefMapMode() ); sal_Bool bPixelGrf = aGrfMap.GetMapUnit() == MAP_PIXEL; const MapMode aContourMap( bPixelGrf ? MAP_PIXEL : MAP_100TH_MM ); if( bPixelGrf ? !bPixelContour : aGrfMap != aContourMap ) { // --> OD #i102238# double nGrfDPIx = 0.0; double nGrfDPIy = 0.0; { if ( !bPixelGrf && bPixelContour ) { const Size aGrfPixelSize( GetGraphic().GetSizePixel() ); const Size aGrfPrefMapModeSize( GetGraphic().GetPrefSize() ); if ( aGrfMap.GetMapUnit() == MAP_INCH ) { nGrfDPIx = aGrfPixelSize.Width() / ( (double)aGrfMap.GetScaleX() * aGrfPrefMapModeSize.Width() ); nGrfDPIy = aGrfPixelSize.Height() / ( (double)aGrfMap.GetScaleY() * aGrfPrefMapModeSize.Height() ); } else { const Size aGrf1000thInchSize = OutputDevice::LogicToLogic( aGrfPrefMapModeSize, aGrfMap, MAP_1000TH_INCH ); nGrfDPIx = 1000.0 * aGrfPixelSize.Width() / aGrf1000thInchSize.Width(); nGrfDPIy = 1000.0 * aGrfPixelSize.Height() / aGrf1000thInchSize.Height(); } } } // <-- ASSERT( !bPixelGrf || aGrfMap == aContourMap, "scale factor for pixel unsupported" ); OutputDevice* pOutDev = (bPixelGrf || bPixelContour) ? Application::GetDefaultDevice() : 0; sal_uInt16 nPolyCount = pContour->Count(); for( sal_uInt16 j=0; jLogicToPixel( rPoly[i], aContourMap ); else if( bPixelContour ) { rPoly[i] = pOutDev->PixelToLogic( rPoly[i], aGrfMap ); // --> OD #i102238# if ( nGrfDPIx != 0 && nGrfDPIy != 0 ) { rPoly[i] = Point( rPoly[i].X() * pOutDev->ImplGetDPIX() / nGrfDPIx, rPoly[i].Y() * pOutDev->ImplGetDPIY() / nGrfDPIy ); } // <-- } else rPoly[i] = OutputDevice::LogicToLogic( rPoly[i], aContourMap, aGrfMap ); } } } ((SwNoTxtNode *)this)->bContourMapModeValid = sal_True; ((SwNoTxtNode *)this)->bPixelContour = sal_False; } return pContour; } void SwNoTxtNode::GetContour( PolyPolygon &rPoly ) const { ASSERT( pContour, "Contour not available." ); rPoly = *HasContour(); } void SwNoTxtNode::SetContourAPI( const PolyPolygon *pPoly ) { delete pContour; if ( pPoly ) pContour = new PolyPolygon( *pPoly ); else pContour = 0; bContourMapModeValid = sal_False; } sal_Bool SwNoTxtNode::GetContourAPI( PolyPolygon &rContour ) const { if( !pContour ) return sal_False; rContour = *pContour; if( bContourMapModeValid ) { const MapMode aGrfMap( GetGraphic().GetPrefMapMode() ); const MapMode aContourMap( MAP_100TH_MM ); ASSERT( aGrfMap.GetMapUnit() != MAP_PIXEL || aGrfMap == MapMode( MAP_PIXEL ), "scale factor for pixel unsupported" ); if( aGrfMap.GetMapUnit() != MAP_PIXEL && aGrfMap != aContourMap ) { sal_uInt16 nPolyCount = rContour.Count(); for( sal_uInt16 j=0; j OD #i102238# - use the right instance Polygon& rPoly = rContour[j]; // <-- sal_uInt16 nCount = rPoly.GetSize(); for( sal_uInt16 i=0 ; iSwapIn( sal_True ); aRet = ((SwGrfNode*)this)->GetGrf(); } else { ASSERT( GetOLENode(), "new type of Node?" ); aRet = *((SwOLENode*)this)->SwOLENode::GetGraphic(); } return aRet; } void SwNoTxtNode::SetTitle( const String& rTitle, bool bBroadcast ) { // Title attribute of replaces own AlternateText attribute SwFlyFrmFmt* pFlyFmt = dynamic_cast(GetFlyFmt()); ASSERT( pFlyFmt, " - missing instance" ); if ( !pFlyFmt ) { return; } pFlyFmt->SetObjTitle( rTitle, bBroadcast ); } const String SwNoTxtNode::GetTitle() const { const SwFlyFrmFmt* pFlyFmt = dynamic_cast(GetFlyFmt()); ASSERT( pFlyFmt, " - missing instance" ); if ( !pFlyFmt ) { return aEmptyStr; } return pFlyFmt->GetObjTitle(); } void SwNoTxtNode::SetDescription( const String& rDescription, bool bBroadcast ) { SwFlyFrmFmt* pFlyFmt = dynamic_cast(GetFlyFmt()); ASSERT( pFlyFmt, " - missing instance" ); if ( !pFlyFmt ) { return; } pFlyFmt->SetObjDescription( rDescription, bBroadcast ); } const String SwNoTxtNode::GetDescription() const { const SwFlyFrmFmt* pFlyFmt = dynamic_cast(GetFlyFmt()); ASSERT( pFlyFmt, " - missing instance" ); if ( !pFlyFmt ) { return aEmptyStr; } return pFlyFmt->GetObjDescription(); } // <--