You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by ja...@apache.org on 2013/10/26 16:59:23 UTC
svn commit: r1536001 [4/4] - in /openoffice/branches/l10n40/main:
basegfx/inc/basegfx/polygon/ basegfx/source/polygon/
connectivity/source/commontools/ connectivity/source/resource/
cppuhelper/source/ cui/source/dialogs/ cui/source/options/ cui/source/...
Modified: openoffice/branches/l10n40/main/svgio/source/svgreader/svgstyleattributes.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/svgio/source/svgreader/svgstyleattributes.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/svgio/source/svgreader/svgstyleattributes.cxx (original)
+++ openoffice/branches/l10n40/main/svgio/source/svgreader/svgstyleattributes.cxx Sat Oct 26 14:59:22 2013
@@ -746,59 +746,6 @@ namespace svgio
}
}
- double get_markerRotation(
- const SvgMarkerNode& rMarker,
- const basegfx::B2DPolygon& rPolygon,
- const sal_uInt32 nIndex)
- {
- double fAngle(0.0);
- const sal_uInt32 nPointCount(rPolygon.count());
-
- if(nPointCount)
- {
- if(rMarker.getOrientAuto())
- {
- const bool bPrev(rPolygon.isClosed() || nIndex > 0);
- basegfx::B2DCubicBezier aSegment;
- basegfx::B2DVector aPrev;
- basegfx::B2DVector aNext;
-
- if(bPrev)
- {
- rPolygon.getBezierSegment((nIndex - 1) % nPointCount, aSegment);
- aPrev = aSegment.getTangent(1.0);
- }
-
- const bool bNext(rPolygon.isClosed() || nIndex + 1 < nPointCount);
-
- if(bNext)
- {
- rPolygon.getBezierSegment(nIndex % nPointCount, aSegment);
- aNext = aSegment.getTangent(0.0);
- }
-
- if(bPrev && bNext)
- {
- fAngle = atan2(aPrev.getY() + aNext.getY(), aPrev.getX() + aNext.getX());
- }
- else if(bPrev)
- {
- fAngle = atan2(aPrev.getY(), aPrev.getX());
- }
- else if(bNext)
- {
- fAngle = atan2(aNext.getY(), aNext.getX());
- }
- }
- else
- {
- fAngle = rMarker.getAngle();
- }
- }
-
- return fAngle;
- }
-
bool SvgStyleAttributes::prepare_singleMarker(
drawinglayer::primitive2d::Primitive2DSequence& rMarkerPrimitives,
basegfx::B2DHomMatrix& rMarkerTransform,
@@ -889,49 +836,6 @@ namespace svgio
return false;
}
- void SvgStyleAttributes::add_singleMarker(
- drawinglayer::primitive2d::Primitive2DSequence& rTarget,
- const drawinglayer::primitive2d::Primitive2DSequence& rMarkerPrimitives,
- const basegfx::B2DHomMatrix& rMarkerTransform,
- const basegfx::B2DRange& rClipRange,
- const SvgMarkerNode& rMarker,
- const basegfx::B2DPolygon& rCandidate,
- const sal_uInt32 nIndex) const
- {
- const sal_uInt32 nPointCount(rCandidate.count());
-
- if(nPointCount)
- {
- // get and apply rotation
- basegfx::B2DHomMatrix aCombinedTransform(rMarkerTransform);
- aCombinedTransform.rotate(get_markerRotation(rMarker, rCandidate, nIndex));
-
- // get and apply target position
- const basegfx::B2DPoint aPoint(rCandidate.getB2DPoint(nIndex % nPointCount));
- aCombinedTransform.translate(aPoint.getX(), aPoint.getY());
-
- // prepare marker
- drawinglayer::primitive2d::Primitive2DReference xMarker(
- new drawinglayer::primitive2d::TransformPrimitive2D(
- aCombinedTransform,
- rMarkerPrimitives));
-
- if(!rClipRange.isEmpty())
- {
- // marker needs to be clipped, it's bigger as the mapping
- basegfx::B2DPolyPolygon aClipPolygon(basegfx::tools::createPolygonFromRect(rClipRange));
-
- aClipPolygon.transform(aCombinedTransform);
- xMarker = new drawinglayer::primitive2d::MaskPrimitive2D(
- aClipPolygon,
- drawinglayer::primitive2d::Primitive2DSequence(&xMarker, 1));
- }
-
- // add marker
- drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(rTarget, xMarker);
- }
- }
-
void SvgStyleAttributes::add_markers(
const basegfx::B2DPolyPolygon& rPath,
drawinglayer::primitive2d::Primitive2DSequence& rTarget) const
@@ -943,49 +847,158 @@ namespace svgio
if(pStart || pMid || pEnd)
{
- const sal_uInt32 nCount(rPath.count());
+ const sal_uInt32 nSubPathCount(rPath.count());
- for (sal_uInt32 a(0); a < nCount; a++)
+ if(nSubPathCount)
{
- const basegfx::B2DPolygon aCandidate(rPath.getB2DPolygon(a));
- const sal_uInt32 nPointCount(aCandidate.count());
+ // remember prepared marker; pStart, pMid and pEnd may all be equal when
+ // only 'marker' was used instead of 'marker-start', 'marker-mid' or 'marker-end',
+ // see 'case SVGTokenMarker' in this file; thus in this case only one common
+ // marker in primitive form will be prepared
+ const SvgMarkerNode* pPrepared = 0;
- if(nPointCount)
+ // values for the prepared marker, results of prepare_singleMarker
+ drawinglayer::primitive2d::Primitive2DSequence aPreparedMarkerPrimitives;
+ basegfx::B2DHomMatrix aPreparedMarkerTransform;
+ basegfx::B2DRange aPreparedMarkerClipRange;
+
+ for (sal_uInt32 a(0); a < nSubPathCount; a++)
{
- const sal_uInt32 nMarkerCount(aCandidate.isClosed() ? nPointCount + 1 : nPointCount);
- drawinglayer::primitive2d::Primitive2DSequence aMarkerPrimitives;
- basegfx::B2DHomMatrix aMarkerTransform;
- basegfx::B2DRange aClipRange;
- const SvgMarkerNode* pPrepared = 0;
+ // iterate over sub-paths
+ const basegfx::B2DPolygon aSubPolygonPath(rPath.getB2DPolygon(a));
+ const sal_uInt32 nSubPolygonPointCount(aSubPolygonPath.count());
+ const bool bSubPolygonPathIsClosed(aSubPolygonPath.isClosed());
- if(pStart)
+ if(nSubPolygonPointCount)
{
- if(prepare_singleMarker(aMarkerPrimitives, aMarkerTransform, aClipRange, *pStart))
- {
- pPrepared = pStart;
- add_singleMarker(rTarget, aMarkerPrimitives, aMarkerTransform, aClipRange, *pPrepared, aCandidate, 0);
- }
- }
+ // for each sub-path, create one marker per point (when closed, two markers
+ // need to pe created for the 1st point)
+ const sal_uInt32 nTargetMarkerCount(bSubPolygonPathIsClosed ? nSubPolygonPointCount + 1 : nSubPolygonPointCount);
- if(pMid && nMarkerCount > 2)
- {
- if(pMid == pPrepared || prepare_singleMarker(aMarkerPrimitives, aMarkerTransform, aClipRange, *pMid))
+ for (sal_uInt32 b(0); b < nTargetMarkerCount; b++)
{
- pPrepared = pMid;
+ const bool bIsFirstMarker(!a && !b);
+ const bool bIsLastMarker(nSubPathCount - 1 == a && nTargetMarkerCount - 1 == b);
+ const SvgMarkerNode* pNeeded = 0;
- for(sal_uInt32 b(1); b < nMarkerCount - 1; b++)
+ if(bIsFirstMarker)
{
- add_singleMarker(rTarget, aMarkerPrimitives, aMarkerTransform, aClipRange, *pPrepared, aCandidate, b);
+ // 1st point in 1st sub-polygon, use pStart
+ pNeeded = pStart;
+ }
+ else if(bIsLastMarker)
+ {
+ // last point in last sub-polygon, use pEnd
+ pNeeded = pEnd;
+ }
+ else
+ {
+ // anything in-between, use pMid
+ pNeeded = pMid;
}
- }
- }
- if(pEnd)
- {
- if(pEnd == pPrepared || prepare_singleMarker(aMarkerPrimitives, aMarkerTransform, aClipRange, *pEnd))
- {
- pPrepared = pEnd;
- add_singleMarker(rTarget, aMarkerPrimitives, aMarkerTransform, aClipRange, *pPrepared, aCandidate, nMarkerCount - 1);
+ if(!pNeeded)
+ {
+ // no marker needs to be created for this point
+ continue;
+ }
+
+ if(pPrepared != pNeeded)
+ {
+ // if needed marker is not yet prepared, do it now
+ if(prepare_singleMarker(aPreparedMarkerPrimitives, aPreparedMarkerTransform, aPreparedMarkerClipRange, *pNeeded))
+ {
+ pPrepared = pNeeded;
+ }
+ else
+ {
+ // error: could not prepare given marker
+ OSL_ENSURE(false, "OOps, could not prepare given marker as primitives (!)");
+ pPrepared = 0;
+ continue;
+ }
+ }
+
+ // prepare complete transform
+ basegfx::B2DHomMatrix aCombinedTransform(aPreparedMarkerTransform);
+
+ // get rotation
+ if(pPrepared->getOrientAuto())
+ {
+ const sal_uInt32 nPointIndex(b % nSubPolygonPointCount);
+
+ // get entering and leaving tangents; this will search backward/froward
+ // in the polygon to find tangents unequal to zero, skipping empty edges
+ // see basegfx descriptions)
+ // Hint: Mozilla, Inkscape and others use only leaving tangent for start marker
+ // and entering tangent for end marker. To achieve this (if wanted) it is possibe
+ // to make the fetch of aEntering/aLeaving dependent on bIsFirstMarker/bIsLastMarker.
+ // This is not done here, see comment 14 in task #1232379#
+ // or http://www.w3.org/TR/SVG/painting.html#OrientAttribute
+ basegfx::B2DVector aEntering(
+ basegfx::tools::getTangentEnteringPoint(
+ aSubPolygonPath,
+ nPointIndex));
+ basegfx::B2DVector aLeaving(
+ basegfx::tools::getTangentLeavingPoint(
+ aSubPolygonPath,
+ nPointIndex));
+ const bool bEntering(!aEntering.equalZero());
+ const bool bLeaving(!aLeaving.equalZero());
+
+ if(bEntering || bLeaving)
+ {
+ basegfx::B2DVector aSum(0.0, 0.0);
+
+ if(bEntering)
+ {
+ aSum += aEntering.normalize();
+ }
+
+ if(bLeaving)
+ {
+ aSum += aLeaving.normalize();
+ }
+
+ if(!aSum.equalZero())
+ {
+ const double fAngle(atan2(aSum.getY(), aSum.getX()));
+
+ // apply rotation
+ aCombinedTransform.rotate(fAngle);
+ }
+ }
+ }
+ else
+ {
+ // apply rotation
+ aCombinedTransform.rotate(pPrepared->getAngle());
+ }
+
+ // get and apply target position
+ const basegfx::B2DPoint aPoint(aSubPolygonPath.getB2DPoint(b % nSubPolygonPointCount));
+
+ aCombinedTransform.translate(aPoint.getX(), aPoint.getY());
+
+ // prepare marker
+ drawinglayer::primitive2d::Primitive2DReference xMarker(
+ new drawinglayer::primitive2d::TransformPrimitive2D(
+ aCombinedTransform,
+ aPreparedMarkerPrimitives));
+
+ if(!aPreparedMarkerClipRange.isEmpty())
+ {
+ // marker needs to be clipped, it's bigger as the mapping
+ basegfx::B2DPolyPolygon aClipPolygon(basegfx::tools::createPolygonFromRect(aPreparedMarkerClipRange));
+
+ aClipPolygon.transform(aCombinedTransform);
+ xMarker = new drawinglayer::primitive2d::MaskPrimitive2D(
+ aClipPolygon,
+ drawinglayer::primitive2d::Primitive2DSequence(&xMarker, 1));
+ }
+
+ // add marker
+ drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(rTarget, xMarker);
}
}
}
Modified: openoffice/branches/l10n40/main/svtools/source/graphic/grfmgr.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/svtools/source/graphic/grfmgr.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/svtools/source/graphic/grfmgr.cxx (original)
+++ openoffice/branches/l10n40/main/svtools/source/graphic/grfmgr.cxx Sat Oct 26 14:59:22 2013
@@ -946,23 +946,25 @@ Graphic GraphicObject::GetTransformedGra
if( aMapGraph == MAP_PIXEL )
{
- aCropLeftTop = Application::GetDefaultDevice()->LogicToPixel( Size( rAttr.GetLeftCrop(),
- rAttr.GetTopCrop() ),
- aMap100 );
- aCropRightBottom = Application::GetDefaultDevice()->LogicToPixel( Size( rAttr.GetRightCrop(),
- rAttr.GetBottomCrop() ),
- aMap100 );
+ // crops are in 1/100th mm -> to aMapGraph -> to MAP_PIXEL
+ aCropLeftTop = Application::GetDefaultDevice()->LogicToPixel(
+ Size(rAttr.GetLeftCrop(), rAttr.GetTopCrop()),
+ aMap100);
+ aCropRightBottom = Application::GetDefaultDevice()->LogicToPixel(
+ Size(rAttr.GetRightCrop(), rAttr.GetBottomCrop()),
+ aMap100);
}
else
{
- aCropLeftTop = OutputDevice::LogicToLogic( Size( rAttr.GetLeftCrop(),
- rAttr.GetTopCrop() ),
- aMap100,
- aMapGraph );
- aCropRightBottom = OutputDevice::LogicToLogic( Size( rAttr.GetRightCrop(),
- rAttr.GetBottomCrop() ),
- aMap100,
- aMapGraph );
+ // crops are in GraphicObject units -> to aMapGraph
+ aCropLeftTop = OutputDevice::LogicToLogic(
+ Size(rAttr.GetLeftCrop(), rAttr.GetTopCrop()),
+ aMap100,
+ aMapGraph);
+ aCropRightBottom = OutputDevice::LogicToLogic(
+ Size(rAttr.GetRightCrop(), rAttr.GetBottomCrop()),
+ aMap100,
+ aMapGraph);
}
// #104115# If the metafile is cropped, give it a special
@@ -1012,15 +1014,29 @@ Graphic GraphicObject::GetTransformedGra
BitmapEx aBitmapEx( aTransGraphic.GetBitmapEx() );
Rectangle aCropRect;
- // convert crops to pixel (crops are always in GraphicObject units)
+ // convert crops to pixel
if(rAttr.IsCropped())
{
- aCropLeftTop = Application::GetDefaultDevice()->LogicToPixel(
- Size(rAttr.GetLeftCrop(), rAttr.GetTopCrop()),
- aMapGraph);
- aCropRightBottom = Application::GetDefaultDevice()->LogicToPixel(
- Size(rAttr.GetRightCrop(), rAttr.GetBottomCrop()),
- aMapGraph);
+ if( aMapGraph == MAP_PIXEL )
+ {
+ // crops are in 1/100th mm -> to MAP_PIXEL
+ aCropLeftTop = Application::GetDefaultDevice()->LogicToPixel(
+ Size(rAttr.GetLeftCrop(), rAttr.GetTopCrop()),
+ aMap100);
+ aCropRightBottom = Application::GetDefaultDevice()->LogicToPixel(
+ Size(rAttr.GetRightCrop(), rAttr.GetBottomCrop()),
+ aMap100);
+ }
+ else
+ {
+ // crops are in GraphicObject units -> to MAP_PIXEL
+ aCropLeftTop = Application::GetDefaultDevice()->LogicToPixel(
+ Size(rAttr.GetLeftCrop(), rAttr.GetTopCrop()),
+ aMapGraph);
+ aCropRightBottom = Application::GetDefaultDevice()->LogicToPixel(
+ Size(rAttr.GetRightCrop(), rAttr.GetBottomCrop()),
+ aMapGraph);
+ }
// convert from prefmapmode to pixel
Size aSrcSizePixel(
@@ -1040,8 +1056,9 @@ Graphic GraphicObject::GetTransformedGra
// another possibility is to adapt the values created so far with a factor; this
// will keep the original Bitmap untouched and thus quality will not change
- const double fFactorX(aBitmapEx.GetSizePixel().Width() / aSrcSizePixel.Width());
- const double fFactorY(aBitmapEx.GetSizePixel().Height() / aSrcSizePixel.Height());
+ // caution: convert to double first, else pretty big errors may occurr
+ const double fFactorX((double)aBitmapEx.GetSizePixel().Width() / aSrcSizePixel.Width());
+ const double fFactorY((double)aBitmapEx.GetSizePixel().Height() / aSrcSizePixel.Height());
aCropLeftTop.Width() = basegfx::fround(aCropLeftTop.Width() * fFactorX);
aCropLeftTop.Height() = basegfx::fround(aCropLeftTop.Height() * fFactorY);
Modified: openoffice/branches/l10n40/main/svx/inc/svx/fillctrl.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/svx/inc/svx/fillctrl.hxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/svx/inc/svx/fillctrl.hxx (original)
+++ openoffice/branches/l10n40/main/svx/inc/svx/fillctrl.hxx Sat Oct 26 14:59:22 2013
@@ -58,7 +58,6 @@ private:
SvxFillAttrBox* pFillAttrLB;
sal_Bool bUpdate;
- sal_Bool bIgnoreStatusUpdate;
sal_uInt16 eLastXFS;
public:
@@ -71,7 +70,6 @@ public:
const SfxPoolItem* pState );
void Update( const SfxPoolItem* pState );
virtual Window* CreateItemWindow( Window *pParent );
- void IgnoreStatusUpdate( sal_Bool bSet );
};
//========================================================================
Modified: openoffice/branches/l10n40/main/svx/inc/svx/sdrundomanager.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/svx/inc/svx/sdrundomanager.hxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/svx/inc/svx/sdrundomanager.hxx (original)
+++ openoffice/branches/l10n40/main/svx/inc/svx/sdrundomanager.hxx Sat Oct 26 14:59:22 2013
@@ -51,6 +51,9 @@ public:
virtual sal_Bool Undo();
virtual sal_Bool Redo();
+ // ##
+ virtual void Clear();
+
// Call for the view which starts the interactive text edit. Use link to
// activate (start text edit) and empty link to reset (end text edit). On
// reset all text edit actions will be removed from this undo manager to
Modified: openoffice/branches/l10n40/main/svx/source/svdraw/sdrundomanager.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/svx/source/svdraw/sdrundomanager.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/svx/source/svdraw/sdrundomanager.cxx (original)
+++ openoffice/branches/l10n40/main/svx/source/svdraw/sdrundomanager.cxx Sat Oct 26 14:59:22 2013
@@ -85,6 +85,25 @@ sal_Bool SdrUndoManager::Redo()
return bRetval;
}
+void SdrUndoManager::Clear()
+{
+ if(isTextEditActive())
+ {
+ while(GetUndoActionCount() && mpLastUndoActionBeforeTextEdit != GetUndoAction(0))
+ {
+ RemoveLastUndoAction();
+ }
+
+ // urgently needed: RemoveLastUndoAction does NOT correct the Redo stack by itself (!)
+ ClearRedo();
+ }
+ else
+ {
+ // call parent
+ EditUndoManager::Clear();
+ }
+}
+
void SdrUndoManager::SetEndTextEditHdl(const Link& rLink)
{
maEndTextEditHdl = rLink;
Modified: openoffice/branches/l10n40/main/svx/source/tbxctrls/fillctrl.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/svx/source/tbxctrls/fillctrl.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/svx/source/tbxctrls/fillctrl.cxx (original)
+++ openoffice/branches/l10n40/main/svx/source/tbxctrls/fillctrl.cxx Sat Oct 26 14:59:22 2013
@@ -74,7 +74,6 @@ SvxFillToolBoxControl::SvxFillToolBoxCon
pFillTypeLB ( NULL ),
pFillAttrLB ( NULL ),
bUpdate ( sal_False ),
- bIgnoreStatusUpdate( sal_False ),
eLastXFS ( XFILL_NONE )
{
addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillColor" )));
@@ -107,9 +106,6 @@ void SvxFillToolBoxControl::StateChanged
{
bool bEnableControls = sal_False;
- if ( bIgnoreStatusUpdate )
- return;
-
if( eState == SFX_ITEM_DISABLED )
{
if( nSID == SID_ATTR_FILL_STYLE )
@@ -229,13 +225,6 @@ void SvxFillToolBoxControl::StateChanged
//========================================================================
-void SvxFillToolBoxControl::IgnoreStatusUpdate( sal_Bool bSet )
-{
- bIgnoreStatusUpdate = bSet;
-}
-
-//========================================================================
-
void SvxFillToolBoxControl::Update( const SfxPoolItem* pState )
{
if ( pStyleItem && pState && bUpdate )
@@ -686,10 +675,8 @@ IMPL_LINK( FillControl, SelectFillAttrHd
aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FillStyle" ));
aXFillStyleItem.QueryValue( a );
aArgs[0].Value = a;
- ( (SvxFillToolBoxControl*)GetData() )->IgnoreStatusUpdate( sal_True );
((SvxFillToolBoxControl*)GetData())->Dispatch(
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillStyle" )), aArgs );
- ( (SvxFillToolBoxControl*)GetData() )->IgnoreStatusUpdate( sal_False );
switch( eXFS )
{
Modified: openoffice/branches/l10n40/main/sw/inc/ndtxt.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/sw/inc/ndtxt.hxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/sw/inc/ndtxt.hxx (original)
+++ openoffice/branches/l10n40/main/sw/inc/ndtxt.hxx Sat Oct 26 14:59:22 2013
@@ -285,8 +285,12 @@ public:
refmarks, toxmarks, and metas will be ignored unless this is true
ATTENTION: setting bInclRefToxMark is only allowed from UNDO!
*/
- void RstAttr( const SwIndex &rIdx, xub_StrLen nLen, sal_uInt16 nWhich = 0,
- const SfxItemSet* pSet = 0, sal_Bool bInclRefToxMark = sal_False );
+ void RstAttr(
+ const SwIndex &rIdx,
+ const xub_StrLen nLen,
+ const sal_uInt16 nWhich = 0,
+ const SfxItemSet* pSet = 0,
+ const sal_Bool bInclRefToxMark = sal_False );
void GCAttr();
// loesche das Text-Attribut (muss beim Pool abgemeldet werden!)
Modified: openoffice/branches/l10n40/main/sw/source/core/layout/paintfrm.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/sw/source/core/layout/paintfrm.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/sw/source/core/layout/paintfrm.cxx (original)
+++ openoffice/branches/l10n40/main/sw/source/core/layout/paintfrm.cxx Sat Oct 26 14:59:22 2013
@@ -6383,10 +6383,27 @@ const Color& SwPageFrm::GetDrawBackgrdCo
const SvxBrushItem* pBrushItem;
const Color* pDummyColor;
SwRect aDummyRect;
+
if ( GetBackgroundBrush( pBrushItem, pDummyColor, aDummyRect, true) )
- return pBrushItem->GetColor();
- else
- return aGlobalRetoucheColor;
+ {
+ const Graphic* pGraphic = pBrushItem->GetGraphic();
+
+ if(pGraphic)
+ {
+ // #29105# when a graphic is set, it may be possible to calculate a single
+ // color which looks good in all places of the graphic. Since it is
+ // planned to have text edit on the overlay one day and the fallback
+ // to aGlobalRetoucheColor returns something useful, just use that
+ // for now.
+ }
+ else
+ {
+ // not a graphic, use (hopefully) initialized color
+ return pBrushItem->GetColor();
+ }
+ }
+
+ return aGlobalRetoucheColor;
}
/*************************************************************************
Modified: openoffice/branches/l10n40/main/sw/source/core/text/EnhancedPDFExportHelper.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/sw/source/core/text/EnhancedPDFExportHelper.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/sw/source/core/text/EnhancedPDFExportHelper.cxx (original)
+++ openoffice/branches/l10n40/main/sw/source/core/text/EnhancedPDFExportHelper.cxx Sat Oct 26 14:59:22 2013
@@ -375,8 +375,9 @@ bool SwTaggedPDFHelper::CheckReopenTag()
if ( pKey )
{
FrmTagIdMap& rFrmTagIdMap = SwEnhancedPDFExportHelper::GetFrmTagIdMap();
- const FrmTagIdMap::const_iterator aIter = rFrmTagIdMap.find( pKey );
- nReopenTag = (*aIter).second;
+ const FrmTagIdMap::const_iterator aIter = rFrmTagIdMap.find( pKey );
+ if( aIter != rFrmTagIdMap.end())
+ nReopenTag = (*aIter).second;
}
}
}
Modified: openoffice/branches/l10n40/main/sw/source/core/txtnode/txtedt.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/sw/source/core/txtnode/txtedt.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/sw/source/core/txtnode/txtedt.cxx (original)
+++ openoffice/branches/l10n40/main/sw/source/core/txtnode/txtedt.cxx Sat Oct 26 14:59:22 2013
@@ -394,26 +394,25 @@ inline sal_Bool InRange(xub_StrLen nIdx,
* -> nothing to do
*/
-void SwTxtNode::RstAttr(const SwIndex &rIdx, xub_StrLen nLen, sal_uInt16 nWhich,
- const SfxItemSet* pSet, sal_Bool bInclRefToxMark )
+void SwTxtNode::RstAttr(
+ const SwIndex &rIdx,
+ const xub_StrLen nLen,
+ const sal_uInt16 nWhich,
+ const SfxItemSet* pSet,
+ const sal_Bool bInclRefToxMark )
{
- // Attribute?
- if ( !GetpSwpHints() )
- return;
-
- sal_uInt16 i = 0;
- xub_StrLen nStt = rIdx.GetIndex();
- xub_StrLen nEnd = nStt + nLen;
- xub_StrLen nAttrStart;
- SwTxtAttr *pHt;
+ if ( !GetpSwpHints() )
+ return;
- sal_Bool bChanged = sal_False;
+ const xub_StrLen nStt = rIdx.GetIndex();
+ const xub_StrLen nEnd = nStt + nLen;
+
+ bool bChanged = false;
// nMin and nMax initialized to maximum / minimum (inverse)
xub_StrLen nMin = m_Text.Len();
xub_StrLen nMax = nStt;
-
- const sal_Bool bNoLen = !nMin;
+ const bool bNoLen = nMin == 0;
// We have to remember the "new" attributes, which have
// been introduced by splitting surrounding attributes (case 4).
@@ -422,18 +421,30 @@ void SwTxtNode::RstAttr(const SwIndex &r
// iterate over attribute array until start of attribute is behind
// deletion range
+ sal_uInt16 i = 0;
+ xub_StrLen nAttrStart;
+ SwTxtAttr *pHt = NULL;
while ((i < m_pSwpHints->Count()) &&
((( nAttrStart = *(*m_pSwpHints)[i]->GetStart()) < nEnd ) || nLen==0) )
{
pHt = m_pSwpHints->GetTextHint(i);
// attributes without end stay in!
- xub_StrLen * const pAttrEnd = pHt->GetEnd();
- if ( !pAttrEnd /*|| pHt->HasDummyChar()*/ ) // see bInclRefToxMark
+ // but consider <bInclRefToxMark> used by Undo
+ xub_StrLen* const pAttrEnd = pHt->GetEnd();
+ const bool bKeepAttrWithoutEnd =
+ pAttrEnd == NULL
+ && ( !bInclRefToxMark
+ || ( RES_TXTATR_REFMARK != pHt->Which()
+ && RES_TXTATR_TOXMARK != pHt->Which()
+ && RES_TXTATR_META != pHt->Which()
+ && RES_TXTATR_METAFIELD != pHt->Which() ) );
+ if ( bKeepAttrWithoutEnd )
{
- i++;
- continue;
- }
+
+ i++;
+ continue;
+ }
// Default behavior is to process all attributes:
bool bSkipAttr = false;;
@@ -473,28 +484,29 @@ void SwTxtNode::RstAttr(const SwIndex &r
if ( bSkipAttr )
{
- i++;
- continue;
- }
+ i++;
+ continue;
+ }
if( nStt <= nAttrStart ) // Faelle: 1,3,5
- {
- if( nEnd > nAttrStart
- || ( nEnd == *pAttrEnd && nEnd==nAttrStart ) )
- {
- // Faelle: 1,3
- if ( nMin > nAttrStart )
- nMin = nAttrStart;
- if ( nMax < *pAttrEnd )
- nMax = *pAttrEnd;
- // Falls wir nur ein nichtaufgespanntes Attribut entfernen,
- // tun wir mal so, als ob sich nichts geaendert hat.
- bChanged = bChanged || nEnd > nAttrStart || bNoLen;
- if( *pAttrEnd <= nEnd ) // Fall: 1
- {
- const xub_StrLen nAttrEnd = *pAttrEnd;
-
+ {
+ const xub_StrLen nAttrEnd = pAttrEnd != NULL
+ ? *pAttrEnd
+ : nAttrStart;
+ if( nEnd > nAttrStart
+ || ( nEnd == nAttrEnd && nEnd == nAttrStart ) )
+ {
+ // Faelle: 1,3
+ if ( nMin > nAttrStart )
+ nMin = nAttrStart;
+ if ( nMax < nAttrEnd )
+ nMax = nAttrEnd;
+ // Falls wir nur ein nichtaufgespanntes Attribut entfernen,
+ // tun wir mal so, als ob sich nichts geaendert hat.
+ bChanged = bChanged || nEnd > nAttrStart || bNoLen;
+ if( nAttrEnd <= nEnd ) // Fall: 1
+ {
m_pSwpHints->DeleteAtPos(i);
DestroyAttr( pHt );
@@ -505,22 +517,21 @@ void SwTxtNode::RstAttr(const SwIndex &r
InsertHint( pNew, nsSetAttrMode::SETATTR_NOHINTADJUST );
}
- // if the last attribute is a Field, the HintsArray is
- // deleted!
+ // if the last attribute is a Field, the HintsArray is deleted!
if ( !m_pSwpHints )
break;
- //JP 26.11.96:
- // beim DeleteAtPos wird ein Resort ausgefuehrt!!
- // darum muessen wir wieder bei 0 anfangen!!!
- // ueber den Fall 3 koennen Attribute nach hinten
- // verschoben worden sein; damit stimmt jetzt das i
- // nicht mehr!!!
- i = 0;
+ //JP 26.11.96:
+ // beim DeleteAtPos wird ein Resort ausgefuehrt!!
+ // darum muessen wir wieder bei 0 anfangen!!!
+ // ueber den Fall 3 koennen Attribute nach hinten
+ // verschoben worden sein; damit stimmt jetzt das i
+ // nicht mehr!!!
+ i = 0;
- continue;
- }
- else // Fall: 3
+ continue;
+ }
+ else // Fall: 3
{
m_pSwpHints->NoteInHistory( pHt );
*pHt->GetStart() = nEnd;
@@ -533,20 +544,21 @@ void SwTxtNode::RstAttr(const SwIndex &r
InsertHint( pNew, nsSetAttrMode::SETATTR_NOHINTADJUST );
}
- bChanged = sal_True;
- }
- }
- }
- else // Faelle: 2,4,5
+ bChanged = true;
+ }
+ }
+ }
+ else if ( pAttrEnd != NULL ) // Faelle: 2,4,5
+ {
if( *pAttrEnd > nStt ) // Faelle: 2,4
- {
- if( *pAttrEnd < nEnd ) // Fall: 2
- {
- if ( nMin > nAttrStart )
- nMin = nAttrStart;
- if ( nMax < *pAttrEnd )
- nMax = *pAttrEnd;
- bChanged = sal_True;
+ {
+ if( *pAttrEnd < nEnd ) // Fall: 2
+ {
+ if ( nMin > nAttrStart )
+ nMin = nAttrStart;
+ if ( nMax < *pAttrEnd )
+ nMax = *pAttrEnd;
+ bChanged = true;
const xub_StrLen nAttrEnd = *pAttrEnd;
@@ -557,19 +569,20 @@ void SwTxtNode::RstAttr(const SwIndex &r
if ( pStyleHandle.get() )
{
SwTxtAttr* pNew = MakeTxtAttr( *GetDoc(),
- *pStyleHandle, nStt, nAttrEnd );
+ *pStyleHandle, nStt, nAttrEnd );
InsertHint( pNew, nsSetAttrMode::SETATTR_NOHINTADJUST );
}
- }
- else if( nLen ) // Fall: 4
- { // bei Lange 0 werden beide Hints vom Insert(Ht)
- // wieder zu einem zusammengezogen !!!!
- if ( nMin > nAttrStart )
- nMin = nAttrStart;
- if ( nMax < *pAttrEnd )
- nMax = *pAttrEnd;
- bChanged = sal_True;
- xub_StrLen nTmpEnd = *pAttrEnd;
+ }
+ else if( nLen ) // Fall: 4
+ {
+ // bei Lange 0 werden beide Hints vom Insert(Ht)
+ // wieder zu einem zusammengezogen !!!!
+ if ( nMin > nAttrStart )
+ nMin = nAttrStart;
+ if ( nMax < *pAttrEnd )
+ nMax = *pAttrEnd;
+ bChanged = true;
+ xub_StrLen nTmpEnd = *pAttrEnd;
m_pSwpHints->NoteInHistory( pHt );
*pAttrEnd = nStt;
m_pSwpHints->NoteInHistory( pHt, sal_True );
@@ -577,14 +590,14 @@ void SwTxtNode::RstAttr(const SwIndex &r
if ( pStyleHandle.get() && nStt < nEnd )
{
SwTxtAttr* pNew = MakeTxtAttr( *GetDoc(),
- *pStyleHandle, nStt, nEnd );
+ *pStyleHandle, nStt, nEnd );
InsertHint( pNew, nsSetAttrMode::SETATTR_NOHINTADJUST );
}
if( nEnd < nTmpEnd )
{
SwTxtAttr* pNew = MakeTxtAttr( *GetDoc(),
- pHt->GetAttr(), nEnd, nTmpEnd );
+ pHt->GetAttr(), nEnd, nTmpEnd );
if ( pNew )
{
SwTxtCharFmt* pCharFmt = dynamic_cast<SwTxtCharFmt*>(pHt);
@@ -597,13 +610,14 @@ void SwTxtNode::RstAttr(const SwIndex &r
// jetzt kein i+1, weil das eingefuegte Attribut
- // ein anderes auf die Position geschoben hat !
- continue;
- }
- }
- }
- ++i;
- }
+ // ein anderes auf die Position geschoben hat !
+ continue;
+ }
+ }
+ }
+ ++i;
+ }
+ }
TryDeleteSwpHints();
if (bChanged)
Modified: openoffice/branches/l10n40/main/sw/source/core/undo/untblk.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/sw/source/core/undo/untblk.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/sw/source/core/undo/untblk.cxx (original)
+++ openoffice/branches/l10n40/main/sw/source/core/undo/untblk.cxx Sat Oct 26 14:59:22 2013
@@ -219,46 +219,44 @@ void SwUndoInserts::UndoImpl(::sw::UndoR
nNdDiff += nTmp - pPam->GetPoint()->nNode.GetIndex();
}
- SwNodeIndex& rIdx = pPam->GetPoint()->nNode;
- SwTxtNode* pTxtNode = rIdx.GetNode().GetTxtNode();
- if( pTxtNode )
- {
- if( !pTxtFmtColl ) // falls 0, dann war hier auch kein TextNode,
- { // dann muss dieser geloescht werden,
- SwNodeIndex aDelIdx( rIdx );
- rIdx++;
- SwCntntNode* pCNd = rIdx.GetNode().GetCntntNode();
- xub_StrLen nCnt = 0; if( pCNd ) nCnt = pCNd->Len();
- pPam->GetPoint()->nContent.Assign( pCNd, nCnt );
- pPam->SetMark();
- pPam->DeleteMark();
-
- RemoveIdxRel( aDelIdx.GetIndex(), *pPam->GetPoint() );
-
- pDoc->GetNodes().Delete( aDelIdx, 1 );
- }
- else
- {
- if( bJoinNext && pTxtNode->CanJoinNext())
- {
- {
- RemoveIdxRel( rIdx.GetIndex()+1, SwPosition( rIdx,
- SwIndex( pTxtNode, pTxtNode->GetTxt().Len() )));
- }
- pTxtNode->JoinNext();
- }
+ SwNodeIndex& rIdx = pPam->GetPoint()->nNode;
+ SwTxtNode* pTxtNode = rIdx.GetNode().GetTxtNode();
+ if( pTxtNode )
+ {
+ if( !pTxtFmtColl ) // falls 0, dann war hier auch kein TextNode,
+ { // dann muss dieser geloescht werden,
+ SwNodeIndex aDelIdx( rIdx );
+ rIdx++;
+ SwCntntNode* pCNd = rIdx.GetNode().GetCntntNode();
+ xub_StrLen nCnt = 0; if( pCNd ) nCnt = pCNd->Len();
+ pPam->GetPoint()->nContent.Assign( pCNd, nCnt );
+ pPam->SetMark();
+ pPam->DeleteMark();
+
+ RemoveIdxRel( aDelIdx.GetIndex(), *pPam->GetPoint() );
+
+ pDoc->GetNodes().Delete( aDelIdx, 1 );
+ }
+ else
+ {
+ if( bJoinNext && pTxtNode->CanJoinNext())
+ {
+ {
+ RemoveIdxRel( rIdx.GetIndex()+1, SwPosition( rIdx,
+ SwIndex( pTxtNode, pTxtNode->GetTxt().Len() )));
+ }
+ pTxtNode->JoinNext();
+ }
// reset all text attributes in the paragraph!
- //i121897, change the hints clearing method from 'RstAttr' to 'ClarSwpHints' as the certain tox mark index hint reason
- if( pTxtNode && pTxtNode->GetpSwpHints() )
- pTxtNode->ClearSwpHintsArr( true );
+ pTxtNode->RstAttr( SwIndex(pTxtNode, 0), pTxtNode->Len(), 0, 0, true );
- // setze alle Attribute im Node zurueck
+ // setze alle Attribute im Node zurueck
pTxtNode->ResetAllAttr();
- if( USHRT_MAX != pDoc->GetTxtFmtColls()->GetPos( pTxtFmtColl ))
- pTxtFmtColl = (SwTxtFmtColl*)pTxtNode->ChgFmtColl( pTxtFmtColl );
+ if( USHRT_MAX != pDoc->GetTxtFmtColls()->GetPos( pTxtFmtColl ))
+ pTxtFmtColl = (SwTxtFmtColl*)pTxtNode->ChgFmtColl( pTxtFmtColl );
- pHistory->SetTmpEnd( nSetPos );
+ pHistory->SetTmpEnd( nSetPos );
pHistory->TmpRollback( pDoc, 0, false );
}
}
Modified: openoffice/branches/l10n40/main/sw/source/ui/config/optpage.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/sw/source/ui/config/optpage.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/sw/source/ui/config/optpage.cxx (original)
+++ openoffice/branches/l10n40/main/sw/source/ui/config/optpage.cxx Sat Oct 26 14:59:22 2013
@@ -1585,45 +1585,49 @@ void SwShdwCrsrOptionsTabPage::PageCreat
sal_Bool SwShdwCrsrOptionsTabPage::FillItemSet( SfxItemSet& rSet )
{
- SwShadowCursorItem aOpt;
- aOpt.SetOn( aOnOffCB.IsChecked() );
+ SwShadowCursorItem aOpt;
+ aOpt.SetOn( aOnOffCB.IsChecked() );
- sal_uInt8 eMode;
- if( aFillIndentRB.IsChecked() )
- eMode= FILL_INDENT;
- else if( aFillMarginRB.IsChecked() )
- eMode = FILL_MARGIN;
- else if( aFillTabRB.IsChecked() )
- eMode = FILL_TAB;
- else
- eMode = FILL_SPACE;
- aOpt.SetMode( eMode );
+ sal_uInt8 eMode;
+ if( aFillIndentRB.IsChecked() )
+ eMode= FILL_INDENT;
+ else if( aFillMarginRB.IsChecked() )
+ eMode = FILL_MARGIN;
+ else if( aFillTabRB.IsChecked() )
+ eMode = FILL_TAB;
+ else
+ eMode = FILL_SPACE;
+ aOpt.SetMode( eMode );
- sal_Bool bRet = sal_False;
- const SfxPoolItem* pItem = 0;
- if( SFX_ITEM_SET != rSet.GetItemState( FN_PARAM_SHADOWCURSOR, sal_False, &pItem )
- || ((SwShadowCursorItem&)*pItem) != aOpt )
- {
- rSet.Put( aOpt );
- bRet = sal_True;
- }
+ sal_Bool bRet = sal_False;
+ const SfxPoolItem* pItem = 0;
+ if( SFX_ITEM_SET != rSet.GetItemState( FN_PARAM_SHADOWCURSOR, sal_False, &pItem )
+ || ((SwShadowCursorItem&)*pItem) != aOpt )
+ {
+ rSet.Put( aOpt );
+ bRet = sal_True;
+ }
- m_pWrtShell->GetDoc()->set( IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT,
+ if ( m_pWrtShell )
+ {
+ m_pWrtShell->GetDoc()->set(
+ IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT,
m_aMathBaselineAlignmentCB.IsChecked() );
- bRet |= m_aMathBaselineAlignmentCB.IsChecked() != m_aMathBaselineAlignmentCB.GetSavedValue();
+ bRet |= m_aMathBaselineAlignmentCB.IsChecked() != m_aMathBaselineAlignmentCB.GetSavedValue();
+ }
- if( aCrsrInProtCB.IsChecked() != aCrsrInProtCB.GetSavedValue())
- {
- rSet.Put(SfxBoolItem(FN_PARAM_CRSR_IN_PROTECTED, aCrsrInProtCB.IsChecked()));
- bRet |= sal_True;
- }
+ if( aCrsrInProtCB.IsChecked() != aCrsrInProtCB.GetSavedValue())
+ {
+ rSet.Put(SfxBoolItem(FN_PARAM_CRSR_IN_PROTECTED, aCrsrInProtCB.IsChecked()));
+ bRet |= sal_True;
+ }
- const SwDocDisplayItem* pOldAttr = (const SwDocDisplayItem*)
- GetOldItem(GetItemSet(), FN_PARAM_DOCDISP);
+ const SwDocDisplayItem* pOldAttr =
+ (const SwDocDisplayItem*)GetOldItem(GetItemSet(), FN_PARAM_DOCDISP);
- SwDocDisplayItem aDisp;
- if(pOldAttr)
- aDisp = *pOldAttr;
+ SwDocDisplayItem aDisp;
+ if(pOldAttr)
+ aDisp = *pOldAttr;
//
aDisp.bParagraphEnd = aParaCB .IsChecked();
aDisp.bTab = aTabCB .IsChecked();
@@ -1636,7 +1640,7 @@ sal_Bool SwShdwCrsrOptionsTabPage::FillI
aDisp.bManualBreak = aBreakCB .IsChecked();
bRet |= (!pOldAttr || aDisp != *pOldAttr);
- if(bRet)
+ if(bRet)
bRet = 0 != rSet.Put(aDisp);
return bRet;
@@ -1644,31 +1648,41 @@ sal_Bool SwShdwCrsrOptionsTabPage::FillI
void SwShdwCrsrOptionsTabPage::Reset( const SfxItemSet& rSet )
{
- const SfxPoolItem* pItem = 0;
+ const SfxPoolItem* pItem = 0;
SwShadowCursorItem aOpt;
- if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_SHADOWCURSOR, sal_False, &pItem ))
- aOpt = *(SwShadowCursorItem*)pItem;
- aOnOffCB.Check( aOpt.IsOn() );
-
- sal_uInt8 eMode = aOpt.GetMode();
- aFillIndentRB.Check( FILL_INDENT == eMode );
- aFillMarginRB.Check( FILL_MARGIN == eMode );
- aFillTabRB.Check( FILL_TAB == eMode );
- aFillSpaceRB.Check( FILL_SPACE == eMode );
-
- m_aMathBaselineAlignmentCB.Check( m_pWrtShell->GetDoc()->get( IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT ) );
- m_aMathBaselineAlignmentCB.SaveValue();
-
- if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_CRSR_IN_PROTECTED, sal_False, &pItem ))
- aCrsrInProtCB.Check(((const SfxBoolItem*)pItem)->GetValue());
- aCrsrInProtCB.SaveValue();
+ if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_SHADOWCURSOR, sal_False, &pItem ))
+ {
+ aOpt = *(SwShadowCursorItem*)pItem;
+ }
+ aOnOffCB.Check( aOpt.IsOn() );
+
+ sal_uInt8 eMode = aOpt.GetMode();
+ aFillIndentRB.Check( FILL_INDENT == eMode );
+ aFillMarginRB.Check( FILL_MARGIN == eMode );
+ aFillTabRB.Check( FILL_TAB == eMode );
+ aFillSpaceRB.Check( FILL_SPACE == eMode );
+
+ if ( m_pWrtShell )
+ {
+ m_aMathBaselineAlignmentCB.Check( m_pWrtShell->GetDoc()->get( IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT ) );
+ m_aMathBaselineAlignmentCB.SaveValue();
+ }
+ else
+ {
+ m_aMathBaselineAlignmentCB.Disable();
+ }
+
+ if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_CRSR_IN_PROTECTED, sal_False, &pItem ))
+ {
+ aCrsrInProtCB.Check(((const SfxBoolItem*)pItem)->GetValue());
+ }
+ aCrsrInProtCB.SaveValue();
const SwDocDisplayItem* pDocDisplayAttr = 0;
- rSet.GetItemState( FN_PARAM_DOCDISP, sal_False,
- (const SfxPoolItem**)&pDocDisplayAttr );
- if(pDocDisplayAttr)
+ rSet.GetItemState( FN_PARAM_DOCDISP, sal_False, (const SfxPoolItem**)&pDocDisplayAttr );
+ if(pDocDisplayAttr)
{
aParaCB .Check (pDocDisplayAttr->bParagraphEnd );
aTabCB .Check (pDocDisplayAttr->bTab );
Modified: openoffice/branches/l10n40/main/sw/source/ui/uno/unotxdoc.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/sw/source/ui/uno/unotxdoc.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/sw/source/ui/uno/unotxdoc.cxx (original)
+++ openoffice/branches/l10n40/main/sw/source/ui/uno/unotxdoc.cxx Sat Oct 26 14:59:22 2013
@@ -2666,6 +2666,8 @@ sal_Int32 SAL_CALL SwXTextDocument::getR
if(!IsValid())
throw RuntimeException();
+ CleanUpRenderingData();
+
const bool bIsPDFExport = !lcl_SeqHasProperty( rxOptions, "IsPrinter" );
bool bIsSwSrcView = false;
SfxViewShell *pView = GetRenderView( bIsSwSrcView, rxOptions, bIsPDFExport );
@@ -2677,20 +2679,6 @@ sal_Int32 SAL_CALL SwXTextDocument::getR
return 0;
}
- // clean up <RenderData> and <PrintUIOptions>
- {
- if ( m_pRenderData )
- {
- delete m_pRenderData;
- m_pRenderData = 0;
- }
- if ( m_pPrintUIOptions )
- {
- delete m_pPrintUIOptions;
- m_pPrintUIOptions = 0;
- }
- }
-
if ( !bIsSwSrcView )
{
m_pRenderData = new SwRenderData;
@@ -3067,8 +3055,7 @@ SfxViewShell * SwXTextDocument::GuessVie
SfxViewFrame *pFrame = SfxViewFrame::GetFirst( pDocShell, sal_False );
// look for the view shell with the same controller in use,
- // otherwise look for a suitable view, preferably a SwView,
- // if that one is not found use a SwPagePreView if found.
+ // otherwise look for a suitable view
while (pFrame)
{
pView = pFrame->GetViewShell();
@@ -3081,7 +3068,7 @@ SfxViewShell * SwXTextDocument::GuessVie
if (pView && pView->GetController() == xController)
break;
}
- else if (pSwView || pSwSrcView)
+ else if ( pSwView || pSwSrcView || pSwPagePreView )
break;
pFrame = SfxViewFrame::GetNext( *pFrame, pDocShell, sal_False );
}
Modified: openoffice/branches/l10n40/main/vcl/source/fontsubset/sft.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/vcl/source/fontsubset/sft.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/vcl/source/fontsubset/sft.cxx (original)
+++ openoffice/branches/l10n40/main/vcl/source/fontsubset/sft.cxx Sat Oct 26 14:59:22 2013
@@ -799,7 +799,10 @@ static int GetCompoundTTOutline(TrueType
} while (flags & MORE_COMPONENTS);
-
+ // #i123417# some fonts like IFAOGrec have no outline points in some compound glyphs
+ // so this unlikely but possible scenario should be handled gracefully
+ if( myPoints.empty() )
+ return 0;
np = myPoints.size();
@@ -2787,7 +2790,7 @@ GlyphData *GetTTRawGlyphData(TrueTypeFon
/* now calculate npoints and ncontours */
ControlPoint *cp;
n = GetTTGlyphPoints(ttf, glyphID, &cp);
- if (n != -1) {
+ if( n > 0) {
m = 0;
for (i = 0; i < n; i++) {
if (cp[i].flags & 0x8000) m++;
Modified: openoffice/branches/l10n40/main/vcl/win/source/gdi/salbmp.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/l10n40/main/vcl/win/source/gdi/salbmp.cxx?rev=1536001&r1=1536000&r2=1536001&view=diff
==============================================================================
--- openoffice/branches/l10n40/main/vcl/win/source/gdi/salbmp.cxx (original)
+++ openoffice/branches/l10n40/main/vcl/win/source/gdi/salbmp.cxx Sat Oct 26 14:59:22 2013
@@ -333,6 +333,9 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreat
if(pExtraRGB)
{
+ // #123478# shockingly, BitmapBuffer does not free the memory it is controlling
+ // in it's destructor, this *has to be done handish*. Doing it here now
+ delete[] pExtraRGB->mpBits;
delete pExtraRGB;
}
else
@@ -471,6 +474,9 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreat
if(pExtraA)
{
+ // #123478# shockingly, BitmapBuffer does not free the memory it is controlling
+ // in it's destructor, this *has to be done handish*. Doing it here now
+ delete[] pExtraA->mpBits;
delete pExtraA;
}
else
@@ -485,6 +491,9 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreat
if(pExtraRGB)
{
+ // #123478# shockingly, BitmapBuffer does not free the memory it is controlling
+ // in it's destructor, this *has to be done handish*. Doing it here now
+ delete[] pExtraRGB->mpBits;
delete pExtraRGB;
}
else