ooo-build r13021 - in trunk: . patches/dev300
- From: thorstenb svn gnome org
- To: svn-commits-list gnome org
- Subject: ooo-build r13021 - in trunk: . patches/dev300
- Date: Wed, 2 Jul 2008 07:50:02 +0000 (UTC)
Author: thorstenb
Date: Wed Jul 2 07:50:01 2008
New Revision: 13021
URL: http://svn.gnome.org/viewvc/ooo-build?rev=13021&view=rev
Log:
* patches/dev300/apply:
* patches/dev300/fit-list-to-size.diff: enabled now, contains all
the core changes for this feature. To try it, make IsAutoFit()
return true.
Modified:
trunk/ChangeLog
trunk/patches/dev300/apply
trunk/patches/dev300/fit-list-to-size.diff
Modified: trunk/patches/dev300/apply
==============================================================================
--- trunk/patches/dev300/apply (original)
+++ trunk/patches/dev300/apply Wed Jul 2 07:50:01 2008
@@ -2205,8 +2205,8 @@
sd-update-relative-links.diff, n#355674, i#55224, rodo
# have Impress text boxes shrink font automatically when text starts
-# to overflow (currently enabled for ppt import only)
-#fit-list-to-size.diff, thorsten
+# to overflow (only core changes for now)
+fit-list-to-size.diff, thorsten
# apply this patch if you need to disable vcl grabbing your mouse -
# after applying the patch, set SAL_NO_MOUSEGRABS in your env
Modified: trunk/patches/dev300/fit-list-to-size.diff
==============================================================================
--- trunk/patches/dev300/fit-list-to-size.diff (original)
+++ trunk/patches/dev300/fit-list-to-size.diff Wed Jul 2 07:50:01 2008
@@ -1,12 +1,15 @@
- svx/inc/svx/svdotext.hxx | 3 ++
- svx/source/editeng/impedit3.cxx | 7 +++++
- svx/source/msfilter/msdffimp.cxx | 14 ++++++++++-
- svx/source/svdraw/svdedxv.cxx | 38 +++++++++++++++++++++--------
- svx/source/svdraw/svdotext.cxx | 50 +++++++++++++++++++++++++++++++++-----
- 5 files changed, 93 insertions(+), 19 deletions(-)
+ svx/inc/svx/svdotext.hxx | 10 +++-
+ svx/source/editeng/impedit3.cxx | 7 ++-
+ svx/source/svdraw/svdedxv.cxx | 4 +-
+ svx/source/svdraw/svdotext.cxx | 100 ++++++++++++++++++++++++++++++--------
+ svx/source/svdraw/svdotxat.cxx | 3 -
+ svx/source/svdraw/svdotxed.cxx | 17 ++++--
+ svx/source/svdraw/svdtxhdl.cxx | 3 -
+ svx/source/svdraw/svdview.cxx | 3 -
+ 9 files changed, 119 insertions(+), 39 deletions(-)
diff --git a/svx/inc/svx/svdotext.hxx b/svx/inc/svx/svdotext.hxx
-index e90c491..7d1d0ae 100644
+index e90c491..d1fc9df 100644
--- svx/inc/svx/svdotext.hxx
+++ svx/inc/svx/svdotext.hxx
@@ -244,6 +244,9 @@ protected:
@@ -19,6 +22,34 @@
SVX_DLLPRIVATE SdrOutliner& ImpGetDrawOutliner() const;
private:
+@@ -257,6 +260,7 @@ private:
+ Rectangle& rAnchorRect,
+ Rectangle& rPaintRect,
+ Fraction& aFitXKorreg ) const;
++ void ImpAutoFitText( SdrOutliner& rOutliner ) const;
+ SVX_DLLPRIVATE SdrObject* ImpConvertObj(FASTBOOL bToPoly) const;
+ SVX_DLLPRIVATE void ImpLinkAnmeldung();
+ SVX_DLLPRIVATE void ImpLinkAbmeldung();
+@@ -268,7 +272,7 @@ protected:
+ SdrObject* ImpConvertMakeObj(const basegfx::B2DPolyPolygon& rPolyPolygon, sal_Bool bClosed, sal_Bool bBezier, sal_Bool bNoSetAttr = sal_False) const;
+ SdrObject* ImpConvertAddText(SdrObject* pObj, FASTBOOL bBezier) const;
+ void ImpSetTextStyleSheetListeners();
+- void ImpSetCharStretching(SdrOutliner& rOutliner, const Rectangle& rTextRect, const Rectangle& rAnchorRect, Fraction& rFitXKorreg) const;
++ void ImpSetCharStretching(SdrOutliner& rOutliner, const Size& rTextSize, const Size& rShapeSize, Fraction& rFitXKorreg) const;
+ void ImpAddTextToBoundRect();
+ void ImpJustifyRect(Rectangle& rRect) const;
+ void ImpCheckShear();
+@@ -331,6 +335,10 @@ public:
+ void NbcResizeTextAttributes(const Fraction& xFact, const Fraction& yFact);
+ FASTBOOL IsTextFrame() const { return bTextFrame; }
+ FASTBOOL IsOutlText() const { return bTextFrame && (eTextKind==OBJ_OUTLINETEXT || eTextKind==OBJ_TITLETEXT); }
++ /// returns true if the PPT autofit of text into shape bounds is enabled. implies IsFitToSize()==false!
++ FASTBOOL IsAutoFit() const;
++ /// returns true if the old feature for fitting shape content should into shape is enabled. implies IsAutoFit()==false!
++ FASTBOOL IsFitToSize() const;
+ SdrObjKind GetTextKind() const { return eTextKind; }
+
+ virtual bool HasText() const;
diff --git a/svx/source/editeng/impedit3.cxx b/svx/source/editeng/impedit3.cxx
index 5639cb5..aa7162c 100644
--- svx/source/editeng/impedit3.cxx
@@ -50,119 +81,30 @@
UpdateViews( GetActiveView() );
}
}
-diff --git a/svx/source/msfilter/msdffimp.cxx b/svx/source/msfilter/msdffimp.cxx
-index e34d920..d572729 100644
---- svx/source/msfilter/msdffimp.cxx
-+++ svx/source/msfilter/msdffimp.cxx
-@@ -1921,7 +1921,16 @@ void DffPropertyReader::ApplyCustomShapeTextAttributes( SfxItemSet& rSet ) const
- rSet.Put( SdrTextLowerDistItem( nTextBottom ) );
-
- rSet.Put( SdrTextWordWrapItem( (MSO_WrapMode)GetPropertyValue( DFF_Prop_WrapText, mso_wrapSquare ) != mso_wrapNone ? sal_True : sal_False ) );
-- rSet.Put( SdrTextAutoGrowHeightItem( ( GetPropertyValue( DFF_Prop_FitTextToShape ) & 2 ) != 0 ) );
-+ if( GetPropertyValue( DFF_Prop_FitTextToShape ) & 2 )
-+ rSet.Put( SdrTextAutoGrowHeightItem( TRUE ) );
-+ else
-+ {
-+ OSL_TRACE( "DFF_Prop_FitTextToShape is %d", GetPropertyValue(DFF_Prop_FitTextToShape) );
-+
-+ rSet.Put( SdrTextAutoGrowHeightItem( FALSE ) );
-+ //if (GetPropertyValue(DFF_Prop_FitTextToShape) & 1)
-+ rSet.Put( SdrTextFitToSizeTypeItem(SDRTEXTFIT_ALLLINES) ); // seems PPT unconditionally implies fit-to-shape for presentation text outliner
-+ }
-
- // rSet.Put( SdrTextAutoGrowWidthItem( (MSO_WrapMode)GetPropertyValue( DFF_Prop_WrapText, mso_wrapSquare ) != mso_wrapNone ? sal_False : sal_True ) );
- // rSet.Put( SdrTextAutoGrowHeightItem( ( GetPropertyValue( DFF_Prop_FitTextToShape ) & 2 ) != 0 ) );
-@@ -5587,6 +5596,9 @@ SdrObject* SvxMSDffManager::ProcessObj(SvStream& rSt,
- }
- else
- {
-+ if (GetPropertyValue(DFF_Prop_FitTextToShape) & 1)
-+ aSet.Put( SdrTextFitToSizeTypeItem(SDRTEXTFIT_ALLLINES) );
-+
- aSet.Put( SdrTextAutoGrowHeightItem( FALSE ) );
- aSet.Put( SdrTextAutoGrowWidthItem( FALSE ) );
- }
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
-index 40d9ee8..764706b 100644
+index 40d9ee8..d373176 100644
--- svx/source/svdraw/svdedxv.cxx
+++ svx/source/svdraw/svdedxv.cxx
-@@ -218,11 +218,16 @@ void SdrObjEditView::ModelHasChanged()
- pTextEditOutliner->SetMinAutoPaperSize(aPaperMin1);
- pTextEditOutliner->SetMaxAutoPaperSize(aPaperMax1);
- pTextEditOutliner->SetPaperSize(Size(0,0)); // Damit der Outliner neu formatiert
-+ const SdrFitToSizeType eFit = pTextObj->GetFitToSize();
-+ ULONG nStat=pTextEditOutliner->GetControlWord();
- if (!bContourFrame) {
- pTextEditOutliner->ClearPolygon();
-- ULONG nStat=pTextEditOutliner->GetControlWord();
-- nStat|=EE_CNTRL_AUTOPAGESIZE;
-- pTextEditOutliner->SetControlWord(nStat);
-+ if( eFit!=SDRTEXTFIT_PROPORTIONAL &&
-+ eFit!=SDRTEXTFIT_ALLLINES )
-+ {
-+ nStat|=EE_CNTRL_AUTOPAGESIZE;
-+ pTextEditOutliner->SetControlWord(nStat);
-+ }
- } else {
- ULONG nStat=pTextEditOutliner->GetControlWord();
- nStat&=~EE_CNTRL_AUTOPAGESIZE;
-@@ -234,10 +239,17 @@ void SdrObjEditView::ModelHasChanged()
- for (ULONG nOV=0; nOV<nOutlViewAnz; nOV++) {
- OutlinerView* pOLV=pTextEditOutliner->GetView(nOV);
- ULONG nStat0=pOLV->GetControlWord();
-- ULONG nStat=nStat0;
-- // AutoViewSize nur wenn nicht KontourFrame.
-- if (!bContourFrame) nStat|=EV_CNTRL_AUTOSIZE;
-- else nStat&=~EV_CNTRL_AUTOSIZE;
-+ nStat=nStat0;
-+ // AutoViewSize only when not a ContourFrame, and not when scaling
-+ // down text to shape size anyway
-+ if (!bContourFrame)
-+ {
-+ nStat|=EV_CNTRL_AUTOSIZE;
-+ }
-+ else
-+ {
-+ nStat&=~EV_CNTRL_AUTOSIZE;
-+ }
- if (nStat!=nStat0) pOLV->SetControlWord(nStat);
- }
- pTextEditOutliner->SetUpdateMode(TRUE);
-@@ -318,7 +330,6 @@ void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const Rectang
+@@ -318,7 +318,7 @@ void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const Rectang
{
const SdrTextObj* pText = PTR_CAST(SdrTextObj,GetTextEditObject());
bool bTextFrame(pText && pText->IsTextFrame());
- bool bFitToSize(0 != (pTextEditOutliner->GetControlWord() & EE_CNTRL_STRETCHING));
++ bool bFitToSize(pText && pText->IsFitToSize());
bool bModifyMerk(pTextEditOutliner->IsModified()); // #43095#
Rectangle aBlankRect(rOutlView.GetOutputArea());
aBlankRect.Union(aMinTextEditArea);
-@@ -333,7 +344,7 @@ void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const Rectang
- pTextEditOutliner->ClearModifyFlag();
- }
+@@ -387,7 +387,7 @@ void SdrObjEditView::ImpInvalidateOutlinerView(OutlinerView& rOutlView) const
+ {
+ const SdrTextObj* pText = PTR_CAST(SdrTextObj,GetTextEditObject());
+ bool bTextFrame(pText && pText->IsTextFrame());
+- bool bFitToSize(0 != (pTextEditOutliner->GetControlWord() & EE_CNTRL_STRETCHING));
++ bool bFitToSize(pText && pText->IsFitToSize());
-- if(bTextFrame && !bFitToSize)
-+ if(bTextFrame)
+ if(bTextFrame && !bFitToSize)
{
- aPixRect.Left()--;
- aPixRect.Top()--;
-@@ -485,8 +496,13 @@ OutlinerView* SdrObjEditView::ImpMakeOutlinerView(Window* pWin, BOOL /*bNoPaint*
- // Scrollen verbieten
- ULONG nStat=pOutlView->GetControlWord();
- nStat&=~EV_CNTRL_AUTOSCROLL;
-- // AutoViewSize nur wenn nicht KontourFrame.
-- if (!bContourFrame) nStat|=EV_CNTRL_AUTOSIZE;
-+ // AutoViewSize only when not a ContourFrame, and not when scaling
-+ // down text to shape size anyway
-+ const SdrFitToSizeType eFit = pText->GetFitToSize();
-+ if (!bContourFrame)
-+ {
-+ nStat|=EV_CNTRL_AUTOSIZE;
-+ }
- if (bTextFrame) {
- USHORT nPixSiz=aHdl.GetHdlSize()*2+1;
- nStat|=EV_CNTRL_INVONEMORE;
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
-index 65d164b..2c00ec3 100644
+index 65d164b..e5efa9f 100644
--- svx/source/svdraw/svdotext.cxx
+++ svx/source/svdraw/svdotext.cxx
@@ -140,6 +140,7 @@ SdrTextObj::SdrTextObj()
@@ -205,80 +147,270 @@
// #108784#
maTextEditOffset = Point(0, 0);
-@@ -876,6 +881,10 @@ void SdrTextObj::TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, FAS
- rOutliner.SetMinAutoPaperSize(Size(0, nAnkHgt));
- }
- }
-+ else if( bFitToSize && !bContourFrame )
+@@ -829,8 +834,7 @@ void SdrTextObj::TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, FAS
+ SdrTextAniKind eAniKind=GetTextAniKind();
+ SdrTextAniDirection eAniDirection=GetTextAniDirection();
+
+- SdrFitToSizeType eFit=GetFitToSize();
+- FASTBOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ FASTBOOL bFitToSize(IsFitToSize());
+ FASTBOOL bContourFrame=IsContourTextFrame();
+
+ FASTBOOL bFrame=IsTextFrame();
+@@ -988,7 +992,7 @@ OutlinerParaObject* SdrTextObj::GetEditOutlinerParaObject() const
+ return pPara;
+ }
+
+-void SdrTextObj::ImpSetCharStretching(SdrOutliner& rOutliner, const Rectangle& rTextRect, const Rectangle& rAnchorRect, Fraction& rFitXKorreg) const
++void SdrTextObj::ImpSetCharStretching(SdrOutliner& rOutliner, const Size& rTextSize, const Size& rShapeSize, Fraction& rFitXKorreg) const
+ {
+ OutputDevice* pOut = rOutliner.GetRefDevice();
+ BOOL bNoStretching(FALSE);
+@@ -1033,12 +1037,12 @@ void SdrTextObj::ImpSetCharStretching(SdrOutliner& rOutliner, const Rectangle& r
+ unsigned nLoopCount=0;
+ FASTBOOL bNoMoreLoop=FALSE;
+ long nXDiff0=0x7FFFFFFF;
+- long nWantWdt=rAnchorRect.Right()-rAnchorRect.Left();
+- long nIsWdt=rTextRect.Right()-rTextRect.Left();
++ long nWantWdt=rShapeSize.Width();
++ long nIsWdt=rTextSize.Width();
+ if (nIsWdt==0) nIsWdt=1;
+
+- long nWantHgt=rAnchorRect.Bottom()-rAnchorRect.Top();
+- long nIsHgt=rTextRect.Bottom()-rTextRect.Top();
++ long nWantHgt=rShapeSize.Height();
++ long nIsHgt=rTextSize.Height();
+ if (nIsHgt==0) nIsHgt=1;
+
+ long nXTolPl=nWantWdt/100; // Toleranz +1%
+@@ -1401,8 +1405,7 @@ void SdrTextObj::ImpAddTextToBoundRect()
+ Rectangle aTextRect;
+ Rectangle aAnchorRect;
+ TakeTextRect(rOutliner,aTextRect,TRUE,&aAnchorRect); // EditText ignorieren!
+- SdrFitToSizeType eFit=GetFitToSize();
+- FASTBOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ FASTBOOL bFitToSize(IsFitToSize());
+ if (bFitToSize) aTextRect=aAnchorRect;
+ rOutliner.Clear();
+ if (aGeo.nDrehWink!=0) {
+@@ -1431,8 +1434,7 @@ SdrObject* SdrTextObj::CheckHit(const Point& rPnt, USHORT nTol, const SetOfByte*
+
+ INT32 nMyTol=nTol;
+ FASTBOOL bFontwork=IsFontwork();
+- SdrFitToSizeType eFit=GetFitToSize();
+- FASTBOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ FASTBOOL bFitToSize(IsFitToSize());
+ Rectangle aR(aRect);
+ Rectangle aAnchor2(aR);
+ Rectangle aTextRect(aR);
+@@ -1665,8 +1667,7 @@ basegfx::B2DPolyPolygon SdrTextObj::TakeContour() const
+ Rectangle aR;
+ TakeTextRect(rOutliner,aR,FALSE,&aAnchor2);
+ rOutliner.Clear();
+- SdrFitToSizeType eFit=GetFitToSize();
+- FASTBOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ FASTBOOL bFitToSize(IsFitToSize());
+ if (bFitToSize) aR=aAnchor2;
+ Polygon aPol(aR);
+ if (aGeo.nDrehWink!=0) RotatePoly(aPol,aR.TopLeft(),aGeo.nSin,aGeo.nCos);
+@@ -1783,8 +1784,7 @@ void SdrTextObj::ImpSetupDrawOutlinerForPaint( FASTBOOL bContourFrame,
+ if (!bContourFrame)
+ {
+ // FitToSize erstmal nicht mit ContourFrame
+- SdrFitToSizeType eFit=GetFitToSize();
+- if (eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES)
++ if (IsFitToSize() || IsAutoFit())
+ {
+ ULONG nStat=rOutliner.GetControlWord();
+ nStat|=EE_CNTRL_STRETCHING|EE_CNTRL_AUTOPAGESIZE;
+@@ -1798,15 +1798,52 @@ void SdrTextObj::ImpSetupDrawOutlinerForPaint( FASTBOOL bContourFrame,
+ if (!bContourFrame)
+ {
+ // FitToSize erstmal nicht mit ContourFrame
+- SdrFitToSizeType eFit=GetFitToSize();
+- if (eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES)
++ if (IsFitToSize())
+ {
+- ImpSetCharStretching(rOutliner,rTextRect,rAnchorRect,rFitXKorreg);
++ ImpSetCharStretching(rOutliner,rTextRect.GetSize(),rAnchorRect.GetSize(),rFitXKorreg);
+ rPaintRect=rAnchorRect;
+ }
++ else if (IsAutoFit())
++ {
++ ImpAutoFitText(rOutliner);
++ }
+ }
+ }
+
++void SdrTextObj::ImpAutoFitText( SdrOutliner& rOutliner ) const
++{
++ // EditEngine formatting is unstable enough for
++ // line-breaking text that we need some more samples
++ USHORT nMinStretchX=65535, nMinStretchY=65535;
++ const Size aShapeSize = GetLastBoundRect().GetSize();
++ for(int i=0; i<3; ++i)
+ {
-+ rOutliner.SetMinAutoPaperSize(aAnkRect.GetSize());
++ const Size aCurrTextSize = rOutliner.CalcTextSize();
++ const double fFactor(
++ double(aShapeSize.Height())/
++ (aCurrTextSize.Height()+GetTextUpperDistance()+GetTextLowerDistance()));
++
++ USHORT nCurrStretchX, nCurrStretchY;
++ rOutliner.GetGlobalCharStretching(nCurrStretchX, nCurrStretchY);
++
++ // only do the scaling once (we'll get notified again, recursively)
++ if (fFactor < 1.0 || (fFactor >= 1.0 && nCurrStretchX != 100))
++ {
++ nCurrStretchX = sal::static_int_cast<USHORT>(nCurrStretchX*fFactor);
++ nCurrStretchY = sal::static_int_cast<USHORT>(nCurrStretchY*fFactor);
++ rOutliner.SetGlobalCharStretching(std::min(USHORT(100),nCurrStretchX),
++ std::min(USHORT(100),nCurrStretchY));
++ OSL_TRACE("SdrTextObj::onEditOutlinerStatusEvent(): zoom is %d", nCurrStretchX);
++
++ nMinStretchX = std::min(nMinStretchX,nCurrStretchX);
++ nMinStretchY = std::min(nMinStretchY,nCurrStretchY);
++ }
+ }
++
++ rOutliner.SetGlobalCharStretching(std::min(USHORT(100),nMinStretchX),
++ std::min(USHORT(100),nMinStretchY));
++}
++
+ void SdrTextObj::SetupOutlinerFormatting( SdrOutliner& rOutl, Rectangle& rPaintRect ) const
+ {
+ ImpInitDrawOutliner( rOutl );
+@@ -2397,6 +2434,17 @@ sal_Bool SdrTextObj::IsTextAnimationAllowed() const
+ return mbTextAnimationAllowed;
+ }
- rOutliner.SetPaperSize(aNullSize);
- if (bContourFrame)
-@@ -1057,11 +1066,11 @@ void SdrTextObj::ImpSetCharStretching(SdrOutliner& rOutliner, const Rectangle& r
- while (nLoopCount<5 && !bNoMoreLoop) {
- if (nX<0) nX=-nX;
- if (nX<1) { nX=1; bNoMoreLoop=TRUE; }
-- if (nX>65535) { nX=65535; bNoMoreLoop=TRUE; }
-+ if (nX>100) { nX=100; bNoMoreLoop=TRUE; }
-
- if (nY<0) nY=-nY;
- if (nY<1) { nY=1; bNoMoreLoop=TRUE; }
-- if (nY>65535) { nY=65535; bNoMoreLoop=TRUE; }
-+ if (nY>100) { nY=100; bNoMoreLoop=TRUE; }
-
- // exception, there is no text yet (horizontal case)
- if(nIsWdt <= 1)
-@@ -1077,7 +1086,7 @@ void SdrTextObj::ImpSetCharStretching(SdrOutliner& rOutliner, const Rectangle& r
- bNoMoreLoop = TRUE;
- }
-
-- rOutliner.SetGlobalCharStretching((USHORT)nX,(USHORT)nY);
-+ rOutliner.SetGlobalCharStretching((USHORT)std::min(nX,nY),(USHORT)std::min(nX,nY));
- nLoopCount++;
- Size aSiz(rOutliner.CalcTextSize());
- long nXDiff=aSiz.Width()-nWantWdt;
-@@ -2414,10 +2423,39 @@ void SdrTextObj::onEditOutlinerStatusEvent( EditStatus* pEditStatus )
++FASTBOOL SdrTextObj::IsAutoFit() const
++{
++ return FALSE;
++}
++
++FASTBOOL SdrTextObj::IsFitToSize() const
++{
++ const SdrFitToSizeType eFit=GetFitToSize();
++ return (eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++}
++
+ void SdrTextObj::SetTextAnimationAllowed(sal_Bool bNew)
+ {
+ if(mbTextAnimationAllowed != bNew)
+@@ -2414,13 +2462,21 @@ void SdrTextObj::onEditOutlinerStatusEvent( EditStatus* pEditStatus )
const bool bGrowY=(nStat & EE_STAT_TEXTHEIGHTCHANGED) !=0;
if(bTextFrame && (bGrowX || bGrowY))
{
- const bool bAutoGrowHgt= bTextFrame && IsAutoGrowHeight();
- const bool bAutoGrowWdt= bTextFrame && IsAutoGrowWidth();
-+ // auto-shrink text when GetFitToSize() demands it
-+ const SdrFitToSizeType eFit = GetFitToSize();
-+ if( (bGrowX || bGrowY) &&
-+ (eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES) )
-+ {
-+ const Size aShapeSize = GetLastBoundRect().GetSize();
-+ const Size aCurrTextSize = pEdtOutl->CalcTextSize();
-+ const double fFactor(
-+ std::min(
-+ double(aShapeSize.Width())/
-+ (aCurrTextSize.Width()+GetTextLeftDistance()+GetTextRightDistance()),
-+ double(aShapeSize.Height())/
-+ (aCurrTextSize.Height()+GetTextUpperDistance()+GetTextLowerDistance())));
-+
-+ USHORT nOldStretchX, nOldStretchY;
-+ pEdtOutl->GetGlobalCharStretching(nOldStretchX, nOldStretchY);
-+
-+ // only do the scaling once (we'll get notified again, recursively)
-+ if( !mbInDownScale && (fFactor < 1.0 || (fFactor >= 1.0 && nOldStretchX != 100)) )
-+ {
-+ mbInDownScale = sal_True;
-
+-
- if ((bGrowX && bAutoGrowWdt) || (bGrowY && bAutoGrowHgt))
-+ nOldStretchX = sal::static_int_cast<USHORT>(nOldStretchX*fFactor);
-+ nOldStretchY = sal::static_int_cast<USHORT>(nOldStretchY*fFactor);
-+ pEdtOutl->SetGlobalCharStretching(std::min(USHORT(100),nOldStretchX),
-+ std::min(USHORT(100),nOldStretchY));
-+
-+ OSL_TRACE("SdrObjEditView::ImpOutlinerStatusEventHdl: shrink factor is %f, shrink X: %d, shrink Y: %d\n", fFactor, nOldStretchX, nOldStretchY);
-+
-+ mbInDownScale = sal_False;
-+ }
-+ }
-+ else if ((bGrowX && IsAutoGrowWidth()) || (bGrowY && IsAutoGrowHeight()))
++ if ((bGrowX && IsAutoGrowWidth()) || (bGrowY && IsAutoGrowHeight()))
{
AdjustTextFrameWidthAndHeight();
}
++ else if (IsAutoFit() && !mbInDownScale)
++ {
++ OSL_ASSERT(pEdtOutl);
++ mbInDownScale = sal_True;
++
++ // sucks that we cannot disable paints via
++ // pEdtOutl->SetUpdateMode(FALSE) - but EditEngine skips
++ // formatting as well, then.
++ ImpAutoFitText(*pEdtOutl);
++ mbInDownScale = sal_False;
++ }
+ }
+ }
+
+diff --git a/svx/source/svdraw/svdotxat.cxx b/svx/source/svdraw/svdotxat.cxx
+index 4d6ec63..15eb01b 100644
+--- svx/source/svdraw/svdotxat.cxx
++++ svx/source/svdraw/svdotxat.cxx
+@@ -82,8 +82,7 @@ FASTBOOL SdrTextObj::AdjustTextFrameWidthAndHeight(Rectangle& rR, FASTBOOL bHgt,
+ {
+ if (bTextFrame && pModel!=NULL && !rR.IsEmpty())
+ {
+- SdrFitToSizeType eFit=GetFitToSize();
+- FASTBOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ FASTBOOL bFitToSize(IsFitToSize());
+ FASTBOOL bWdtGrow=bWdt && IsAutoGrowWidth();
+ FASTBOOL bHgtGrow=bHgt && IsAutoGrowHeight();
+ SdrTextAniKind eAniKind=GetTextAniKind();
+diff --git a/svx/source/svdraw/svdotxed.cxx b/svx/source/svdraw/svdotxed.cxx
+index 7838d97..265283b 100644
+--- svx/source/svdraw/svdotxed.cxx
++++ svx/source/svdraw/svdotxed.cxx
+@@ -75,15 +75,17 @@ sal_Bool SdrTextObj::BegTextEdit(SdrOutliner& rOutl)
+ rOutl.Init( nOutlinerMode );
+ rOutl.SetRefDevice( pModel->GetRefDevice() );
+
+- SdrFitToSizeType eFit=GetFitToSize();
+- FASTBOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ FASTBOOL bFitToSize(IsFitToSize());
+ FASTBOOL bContourFrame=IsContourTextFrame();
+ ImpSetTextEditParams();
+
+ if (!bContourFrame) {
+ ULONG nStat=rOutl.GetControlWord();
+ nStat|=EE_CNTRL_AUTOPAGESIZE;
+- if (bFitToSize) nStat|=EE_CNTRL_STRETCHING; else nStat&=~EE_CNTRL_STRETCHING;
++ if (bFitToSize || IsAutoFit())
++ nStat|=EE_CNTRL_STRETCHING;
++ else
++ nStat&=~EE_CNTRL_STRETCHING;
+ rOutl.SetControlWord(nStat);
+ }
+
+@@ -119,8 +121,12 @@ sal_Bool SdrTextObj::BegTextEdit(SdrOutliner& rOutl)
+ TakeTextRect(rOutl, aTextRect, FALSE,
+ &aAnchorRect/* #97097# give TRUE here, not FALSE */);
+ Fraction aFitXKorreg(1,1);
+- ImpSetCharStretching(rOutl,aTextRect,aAnchorRect,aFitXKorreg);
++ ImpSetCharStretching(rOutl,aTextRect.GetSize(),aAnchorRect.GetSize(),aFitXKorreg);
+ }
++ else if (IsAutoFit())
++ {
++ ImpAutoFitText(rOutl);
++ }
+
+ if(pOutlinerParaObject)
+ {
+@@ -146,8 +152,7 @@ sal_Bool SdrTextObj::BegTextEdit(SdrOutliner& rOutl)
+
+ void SdrTextObj::TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const
+ {
+- SdrFitToSizeType eFit=GetFitToSize();
+- FASTBOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ FASTBOOL bFitToSize(IsFitToSize());
+ Size aPaperMin,aPaperMax;
+ Rectangle aViewInit;
+ TakeTextAnchorRect(aViewInit);
+diff --git a/svx/source/svdraw/svdtxhdl.cxx b/svx/source/svdraw/svdtxhdl.cxx
+index 69aeaa4..d1e526f 100644
+--- svx/source/svdraw/svdtxhdl.cxx
++++ svx/source/svdraw/svdtxhdl.cxx
+@@ -90,8 +90,7 @@ void ImpTextPortionHandler::ConvertToPathObj(SdrObjGroup& rGroup, FASTBOOL bPoly
+
+ Rectangle aAnchorRect;
+ Rectangle aTextRect;
+- SdrFitToSizeType eFit=rTextObj.GetFitToSize();
+- FASTBOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ FASTBOOL bFitToSize(rTextObj.IsFitToSize());
+ // Bei TakeTextRect wird u.a. auch der Text in
+ // den Outliner gesteckt
+ rTextObj.TakeTextRect(rOutliner,aTextRect,FALSE,&aAnchorRect);
+diff --git a/svx/source/svdraw/svdview.cxx b/svx/source/svdraw/svdview.cxx
+index f1b2a6d..e353e58 100644
+--- svx/source/svdraw/svdview.cxx
++++ svx/source/svdraw/svdview.cxx
+@@ -504,8 +504,7 @@ SdrHitKind SdrView::PickAnything(const Point& rLogicPos, SdrViewEvent& rVEvt) co
+ Point aTemporaryTextRelativePosition(aLocalLogicPosition - aTextRect.TopLeft());
+
+ // FitToSize berueksichtigen
+- SdrFitToSizeType eFit=pTextObj->GetFitToSize();
+- BOOL bFitToSize=(eFit==SDRTEXTFIT_PROPORTIONAL || eFit==SDRTEXTFIT_ALLLINES);
++ BOOL bFitToSize(pTextObj->IsFitToSize());
+ if (bFitToSize) {
+ Fraction aX(aTextRect.GetWidth()-1,aAnchor.GetWidth()-1);
+ Fraction aY(aTextRect.GetHeight()-1,aAnchor.GetHeight()-1);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]