61#include <osl/diagnose.h>
65#include <document.hxx>
71#include <progress.hxx>
74#include <stlsheet.hxx>
78#include <com/sun/star/i18n/DirectionProperty.hpp>
92#define DROPDOWN_BITMAP_SIZE 18
94#define DRAWTEXT_MAX 32767
206 pPattern ( nullptr ),
207 pCondSet ( nullptr ),
222 bLineBreak ( false ),
225 bPixelToLogic( bPTL ),
255 if ( nNewHeight > 0 )
261 if ( pFmtDevice != pDev )
283template<
typename ItemType,
typename EnumType>
287 return static_cast<EnumType
>(rItem.GetValue());
292 return lcl_GetValue<SfxBoolItem, bool>(rPattern, nWhich, pCondSet);
299 sal_uInt32 nCurrentNumberFormat = pDoc->
GetNumberFormat( nCellX, nCellY, nTab );
301 return pNumberFormatter->
GetType( nCurrentNumberFormat ) == SvNumFormatType::TEXT;
378 case SvxCellOrientation::Standard:
383 case SvxCellOrientation::Stacked:
387 case SvxCellOrientation::TopBottom:
391 case SvxCellOrientation::BottomUp:
396 OSL_FAIL(
"Invalid SvxCellOrientation value");
413 if ( pFmtDevice != pDev )
501 bool bChanged =
false;
580 if ( nCharWidth < 1 || (
bPixelToLogic && nCharWidth < pOutput->mpRefDevice->PixelToLogic(
Size(1,0)).
Width()) )
592 if ( nSpaceToFill <= nCharWidth )
595 sal_Int32 nCharsToInsert = nSpaceToFill / nCharWidth;
596 OUStringBuffer aFill(nCharsToInsert);
644 sal_uInt16 nNumDigits =
static_cast<sal_uInt16
>(nWidth / nMaxDigit);
655 sal_uInt8 nSignCount = 0, nDecimalCount = 0, nExpCount = 0;
656 sal_Int32 nLen =
aString.getLength();
658 for( sal_Int32
i = 0;
i < nLen; ++
i )
663 else if (c == cDecSep)
671 if (
aString ==
"0" && fVal != 0.0)
675 nWidth += (nMaxDigit -
GetDotWidth()) * nDecimalCount;
681 if (nDecimalCount || nSignCount || nExpCount)
684 nNumDigits =
static_cast<sal_uInt16
>(nWidth / nMaxDigit);
696 if (nActualTextWidth > nWidth)
724 if (
GetOrient() != SvxCellOrientation::Standard )
743 for (
char i = 0;
i < 10; ++
i)
745 char cDigit =
'0' +
i;
800 if (
GetOrient() != SvxCellOrientation::Standard )
814 for (sal_Int32 nIdx = 0; nIdx <
aString.getLength(); ++nIdx)
861 return static_cast<double>(
aZoomY) /
static_cast<double>(
aZoomX);
880 if ( !
aURL.isEmpty() && pPDFData )
885 std::vector< vcl::PDFExtOutDevBookmarkEntry >& rBookmarks = pPDFData->
GetBookmarks();
886 rBookmarks.push_back( aBookmark );
943 bool bVisRowChanged )
945 bool bDoMerge =
false;
946 bool bIsLeft = ( nX ==
nVisX1 );
947 bool bIsTop = ( nY ==
nVisY1 ) || bVisRowChanged;
967 if ( bHOver && bVOver )
968 bDoMerge = bIsLeft && bIsTop;
981 if ( !bDoMerge && !bHidden )
984 if (rOverX >=
nX1 && !bHidden)
1001 if ( !bDoMerge && !bHidden )
1007 if (rOverX >=
nX1 && rOverY >=
nY1 &&
1026 OSL_ENSURE( pNewPattern,
"pNewPattern" );
1028 if ( pNewPattern == rpOldPattern )
1030 else if ( !rpOldPattern )
1096 rpOldPattern = pNewPattern;
1104 if ( !bProgress && pFCell->
GetDirty() )
1113 return ( nScript != SvtScriptType::LATIN &&
1114 nScript != SvtScriptType::ASIAN &&
1115 nScript != SvtScriptType::COMPLEX );
1123 if ( pThisRowInfo && nX <=
nX2 )
1131 if ( !bEmpty && ( nX < nX1 || nX >
nX2 || !pThisRowInfo ) )
1195 sal_uInt16 nHorJustify,
bool bCellIsValue,
1196 bool bBreak,
bool bOverwrite,
1205 SCCOL nCompCol = nX;
1206 while ( nCellX > nCompCol )
1210 pRowInfo[0].basicCellInfo(nCompCol).nWidth :
1212 nCellPosX += nColWidth * nLayoutSign;
1215 while ( nCellX < nCompCol )
1219 pRowInfo[0].basicCellInfo(nCompCol).nWidth :
1221 nCellPosX -= nColWidth * nLayoutSign;
1227 while ( nCellY > nCompRow )
1248 if ( nMergeCols == 0 )
1251 if ( nMergeRows == 0 )
1258 pRowInfo[0].basicCellInfo(nCellX+
i).nWidth :
1260 nMergeSizeX += nColWidth;
1264 if ( rThisRowInfo.
nRowNo == nCellY )
1267 nMergeSizeY += rThisRowInfo.
nHeight;
1291 if ( nNeeded > nMergeSizeX )
1300 case SvxCellHorJustify::Left:
1301 nRightMissing = nMissing;
1303 case SvxCellHorJustify::Right:
1304 nLeftMissing = nMissing;
1306 case SvxCellHorJustify::Center:
1307 nLeftMissing = nMissing / 2;
1308 nRightMissing = nMissing - nLeftMissing;
1318 ::std::swap( nLeftMissing, nRightMissing );
1320 SCCOL nRightX = nCellX;
1321 SCCOL nLeftX = nCellX;
1322 if ( !bMerged && !bCellIsValue && !bBreak )
1326 while ( nRightMissing > 0 && nRightX < mpDoc->MaxCol() && ( bOverwrite ||
IsAvailable( nRightX+1, nCellY ) ) )
1330 nRightMissing -= nAdd;
1333 if ( rThisRowInfo.
nRowNo == nCellY && nRightX >=
nX1 && nRightX <=
nX2 )
1337 while ( nLeftMissing > 0 && nLeftX > 0 && ( bOverwrite ||
IsAvailable( nLeftX-1, nCellY ) ) )
1339 if ( rThisRowInfo.
nRowNo == nCellY && nLeftX >=
nX1 && nLeftX <=
nX2 )
1344 nLeftMissing -= nAdd;
1351 if ( nRightMissing > 0 &&
bMarkClipped && nRightX >=
nX1 && nRightX <=
nX2 && !bBreak && !bCellIsValue )
1358 if ( nLeftMissing > 0 &&
bMarkClipped && nLeftX >=
nX1 && nLeftX <=
nX2 && !bBreak && !bCellIsValue )
1384 fZoom = fZoom > 1.0 ? fZoom : 1.0;
1386 bool bFit = ( nNeeded + nFilter <= nMergeSizeX );
1406bool beginsWithRTLCharacter(
const OUString& rStr)
1413 case i18n::DirectionProperty_RIGHT_TO_LEFT:
1414 case i18n::DirectionProperty_RIGHT_TO_LEFT_ARABIC:
1415 case i18n::DirectionProperty_RIGHT_TO_LEFT_EMBEDDING:
1416 case i18n::DirectionProperty_RIGHT_TO_LEFT_OVERRIDE:
1433 bool bCellIsValue,
const OUString& rText,
1438 bool bUseWritingDirection =
false;
1439 if (eInHorJust == SvxCellHorJustify::Standard)
1443 if (beginsWithRTLCharacter( rText))
1446 eHorJustContext = bNumberFormatIsText ? SvxCellHorJustify::Right : SvxCellHorJustify::Left;
1448 eHorJustContext = SvxCellHorJustify::Right;
1450 else if (bCellIsValue)
1451 eHorJustContext = bNumberFormatIsText ? SvxCellHorJustify::Left : SvxCellHorJustify::Right;
1453 bUseWritingDirection =
true;
1456 if (bUseWritingDirection ||
1457 eInHorJust == SvxCellHorJustify::Block || eInHorJust == SvxCellHorJustify::Repeat)
1460 if (nDirection == SvxFrameDirection::Horizontal_LR_TB || nDirection == SvxFrameDirection::Vertical_LR_TB)
1461 eHorJustContext = SvxCellHorJustify::Left;
1462 else if (nDirection == SvxFrameDirection::Environment)
1464 SAL_WARN_IF( !pDoc,
"sc.ui",
"getAlignmentFromContext - pDoc==NULL");
1468 eHorJustContext = (pDoc && pDoc->
IsLayoutRTL(nTab) && (beginsWithRTLCharacter( rText))) ? SvxCellHorJustify::Right : SvxCellHorJustify::Left;
1471 eHorJustContext = SvxCellHorJustify::Right;
1473 return eHorJustContext;
1490 mpDev->GetMapMode().GetMapUnit() ==
mpRefDevice->GetMapMode().GetMapUnit(),
1491 "LayoutStrings: different MapUnits ?!?!" );
1504 bool bProgress =
false;
1512 if ( nX2 < mpDoc->MaxCol() )
1513 nLastContentCol = sal::static_int_cast<SCCOL>(
1521 bool bCellIsValue =
false;
1531 std::vector<std::unique_ptr<ScPatternAttr> > aAltPatterns;
1542 if ( nLoopStartX <
nX1 )
1544 for (
SCCOL nX=nLoopStartX; nX<=
nX2; nX++)
1546 bool bMergeEmpty =
false;
1552 bool bDoCell =
false;
1553 bool bUseEditEngine =
false;
1577 if ( bEmpty && !bMergeEmpty && nX <
nX1 && !bOverlapped )
1583 if ( nTempX <
nX1 &&
1594 if ( bEmpty && !bMergeEmpty && nX ==
nX2 && !bOverlapped )
1599 while (nTempX < nLastContentCol &&
IsEmptyCellText( pThisRowInfo, nTempX, nY ))
1635 if ( nCellY == nY && nCellX == nX && nCellX >=
nX1 && nCellX <=
nX2 )
1642 bUseEditEngine =
true;
1649 bUseEditEngine =
true;
1652 if (bDoCell && !bUseEditEngine)
1654 if ( nCellY == nY && nCellX >=
nX1 && nCellX <=
nX2 )
1675 aAltPatterns.push_back(std::make_unique<ScPatternAttr>(*pPattern));
1690 pPattern = pAltPattern;
1697 aAltPatterns.push_back(std::make_unique<ScPatternAttr>(*pPattern));
1701 pPattern = pAltPattern;
1708 if (nScript == SvtScriptType::NONE)
1711 if ( pPattern != pOldPattern || pCondSet != pOldCondSet ||
1715 pCondSet != pOldCondSet || nScript != nOldScript ||
mbSyntaxMode )
1717 aVars.
SetPattern(pPattern, pCondSet, aCell, nScript);
1721 pOldPattern = pPattern;
1722 pOldCondSet = pCondSet;
1723 nOldScript = nScript;
1727 if ( aVars.
GetOrient() == SvxCellOrientation::Stacked ||
1729 bUseEditEngine =
true;
1731 if (bDoCell && !bUseEditEngine)
1737 pOldPattern =
nullptr;
1742 if (bDoCell && !bUseEditEngine)
1754 *pPattern, pCondSet,
mpDoc,
nTab, bNumberFormatIsText );
1763 bool bRepeat = aVars.
IsRepeat() && !bBreak;
1764 bool bShrink = aVars.
IsShrink() && !bBreak && !bRepeat;
1773 GetOutputArea( nX, nArrY, nPosX, nPosY, nCellX, nCellY, nNeededWidth,
1774 *pPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
1775 bCellIsValue || bRepeat || bShrink, bBreak,
false,
1781 if ( aVars.
GetOrient() != SvxCellOrientation::Standard )
1785 bUseEditEngine =
true;
1792 if ( nAvailable > 0 && nScaleSize > 0 )
1794 tools::Long nScale = ( nAvailable * 100 ) / nScaleSize;
1799 sal_uInt16 nShrinkAgain = 0;
1805 nScale = ( nScale * 9 ) / 10;
1812 if ( nNewSize <= nAvailable )
1819 pOldPattern =
nullptr;
1832 if ( nRepeatSize > 0 )
1834 tools::Long nRepeatCount = nAvailable / nRepeatSize;
1835 if ( nRepeatCount > 1 )
1838 OUStringBuffer aRepeated(aCellStr);
1839 for (
tools::Long nRepeat = 1; nRepeat < nRepeatCount; nRepeat++ )
1840 aRepeated.append(aCellStr);
1841 aVars.
SetAutoText( aRepeated.makeStringAndClear() );
1849 if ( aVars.
GetOrient() == SvxCellOrientation::Standard )
1859 if (!bUseEditEngine)
1862 aVars.
GetHorJust() == SvxCellHorJustify::Block &&
1872 RowInfo* pMarkRowInfo = ( nCellY == nY ) ? pThisRowInfo : &
pRowInfo[0];
1880 bool bHasHashText =
false;
1884 bHasHashText =
true;
1894 if ( eOutHorJust == SvxCellHorJustify::Left )
1896 if ( nCellY == nY && nCellX >=
nX1 && nCellX <=
nX2 )
1901 else if ( eOutHorJust == SvxCellHorJustify::Right )
1903 if ( nCellY == nY && nCellX >=
nX1 && nCellX <=
nX2 )
1910 if ( nCellY == nY && nCellX >=
nX1 && nCellX <=
nX2 )
1946 bool bRightAdjusted =
false;
1947 switch (eOutHorJust)
1949 case SvxCellHorJustify::Left:
1952 case SvxCellHorJustify::Right:
1955 bRightAdjusted =
true;
1957 case SvxCellHorJustify::Center:
1971 case SvxCellVerJustify::Top:
1972 case SvxCellVerJustify::Block:
1976 nTestClipHeight += nTop;
1979 case SvxCellVerJustify::Bottom:
1983 nTestClipHeight += nBot;
1986 case SvxCellVerJustify::Center:
1990 nJustPosY += ( nOutHeight + nTop -
1992 nTestClipHeight += std::abs( nTop - nBot );
2001 if ( nTestClipHeight > nOutHeight )
2011 if ( bHClip || bVClip )
2040 Point aURLStart( nJustPosX, nJustPosY );
2044 case SvxCellOrientation::Standard:
2047 case SvxCellOrientation::TopBottom:
2050 case SvxCellOrientation::BottomUp:
2063 Point aDrawTextPos( nJustPosX, nJustPosY );
2064 if ( bPixelToLogic )
2070 aDrawTextPos =
mpRefDevice->PixelToLogic( aDrawTextPos );
2080 const OUString& aString = aVars.
GetString();
2081 if (!aString.isEmpty())
2087 OUString aShort = aString;
2096 double fVisibleRatio = 1.0;
2098 sal_Int32 nTextLen = aString.getLength();
2102 if (0.0 < fVisibleRatio && fVisibleRatio < 1.0)
2105 sal_Int32 nShortLen = fVisibleRatio*nTextLen + 1;
2106 aShort = aShort.copy(0, nShortLen);
2109 else if (eOutHorJust == SvxCellHorJustify::Right && aAreaParam.
mnLeftClipLength > 0)
2112 if (0.0 < fVisibleRatio && fVisibleRatio < 1.0)
2115 sal_Int32 nShortLen = fVisibleRatio*nTextLen + 1;
2116 aShort = aShort.copy(nTextLen-nShortLen);
2120 double fOffset = fTextWidth - fShortWidth;
2121 aDrawTextPos.
Move(fOffset, 0);
2128 size_t nLen = aShort.getLength();
2129 if (aDX.
size() < nLen)
2138 for (
size_t i = 0;
i < nLen; ++
i)
2139 aDX.
set(
i,
static_cast<sal_Int32
>(aDX[
i] / fMul + 0.5));
2142 mpDev->DrawTextArray(aDrawTextPos, aShort, aDX, {}, 0, nLen);
2146 mpDev->DrawText(aDrawTextPos, aShort, 0, -1,
nullptr,
nullptr,
2151 if ( bHClip || bVClip )
2156 mpDev->SetClipRegion();
2180 pEngine->SetUpdateLayout(
false );
2185 nCtrl |= EEControlBits::ONLINESPELLING;
2192 pEngine->SetControlWord( nCtrl );
2238 for (sal_Int32 nPar=0; nPar<nParCount; nPar++)
2240 std::vector<sal_Int32> aPortions;
2243 sal_Int32 nStart = 0;
2244 for (
const sal_Int32 nEnd : aPortions )
2253 nWestern = ( nWestern * nPercent ) / 100;
2254 nCJK = ( nCJK * nPercent ) / 100;
2255 nCTL = ( nCTL * nPercent ) / 100;
2283 double nRealOrient =
toRadians(nAttrRotate);
2284 double nAbsCos = fabs( cos( nRealOrient ) );
2285 double nAbsSin = fabs( sin( nRealOrient ) );
2287 return static_cast<tools::Long>( nRealWidth * nAbsCos + nRealHeight * nAbsSin );
2289 return static_cast<tools::Long>( nRealHeight * nAbsCos + nRealWidth * nAbsSin );
2307 mpRefDevice->LogicToPixel(
Size(0,rEngineHeight)).Height() : rEngineHeight;
2311 if ( nScaleSize <= rAlignRect.
GetHeight() )
2314 bool bSwap = ( nOrient == SvxCellOrientation::TopBottom || nOrient == SvxCellOrientation::BottomUp );
2316 tools::Long nScale = ( nAvailable * 100 ) / nScaleSize;
2319 rEngineHeight =
lcl_GetEditSize( rEngine,
false, bSwap, nAttrRotate );
2321 mpRefDevice->LogicToPixel(
Size(0,rEngineHeight)).Height() : rEngineHeight;
2323 sal_uInt16 nShrinkAgain = 0;
2328 rEngineHeight =
lcl_GetEditSize( rEngine,
false, bSwap, nAttrRotate );
2329 nNewSize = bPixelToLogic ?
2330 mpRefDevice->LogicToPixel(
Size(0,rEngineHeight)).Height() : rEngineHeight;
2337 mpRefDevice->LogicToPixel(
Size(rEngineWidth,0)).Width() : rEngineWidth;
2338 rNeededPixel = nPixelWidth + nLeftM + nRightM;
2340 else if ( rLeftClip || rRightClip )
2345 tools::Long nScaleSize = rNeededPixel - nLeftM - nRightM;
2347 if ( nScaleSize <= nAvailable )
2350 tools::Long nScale = ( nAvailable * 100 ) / nScaleSize;
2355 mpRefDevice->LogicToPixel(
Size(rEngineWidth,0)).Width() : rEngineWidth;
2357 sal_uInt16 nShrinkAgain = 0;
2363 nNewSize = bPixelToLogic ?
2364 mpRefDevice->LogicToPixel(
Size(rEngineWidth,0)).Width() : rEngineWidth;
2367 if ( nNewSize <= nAvailable )
2368 rLeftClip = rRightClip =
false;
2371 rNeededPixel = nNewSize + nLeftM + nRightM;
2372 rEngineHeight =
lcl_GetEditSize( rEngine,
false,
false, nAttrRotate );
2378 meHorJustContext( meHorJustAttr ),
2379 meHorJustResult( meHorJustAttr ),
2383 meOrient( pPattern->GetCellOrientation(pCondSet) ),
2385 mnX(0),
mnCellX(0), mnCellY(0),
2386 mnPosX(0), mnPosY(0), mnInitPosX(0),
2388 mbCellIsValue(bCellIsValue),
2389 mbAsianVertical(false),
2390 mbPixelToLogic(false),
2391 mbHyphenatorSet(false),
2394 mpCondSet(pCondSet),
2395 mpPreviewFontSet(nullptr),
2396 mpOldPattern(nullptr),
2397 mpOldCondSet(nullptr),
2398 mpOldPreviewFontSet(nullptr),
2399 mpThisRowInfo(nullptr),
2400 mpMisspellRanges(nullptr)
2404 const ScDocument* pDoc,
bool bShowNullValues,
bool bShowFormulas,
bool bSyntaxMode,
bool bUseStyleColor,
bool bForceAutoColor,
bool& rWrapFields)
2411 mpEngine->SetTextCurrentDefaults(*
pData);
2413 if ( mbBreak && !mbAsianVertical &&
pData->HasField() )
2423 OSL_FAIL(
"pData == 0");
2429 sal_uInt32 nFormat =
mpPattern->GetNumberFormat(
2431 const Color* pColor;
2439 mpEngine->SetTextCurrentDefaults(aString);
2440 if ( pColor && !bSyntaxMode && !( bUseStyleColor && bForceAutoColor ) )
2444 if (mpMisspellRanges)
2445 mpEngine->SetAllMisspellRanges(*mpMisspellRanges);
2455 if (
mpPattern == mpOldPattern && mpCondSet == mpOldCondSet && mpPreviewFontSet == mpOldPreviewFontSet )
2459 bool bCellContrast = bUseStyleColor &&
2462 auto pSet = std::make_unique<SfxItemSet>( mpEngine->GetEmptyItemSet() );
2463 mpPattern->FillEditItemSet( pSet.get(), mpCondSet );
2464 if ( mpPreviewFontSet )
2483 mpEngine->SetDefaults( std::move(pSet) );
2485 mpOldCondSet = mpCondSet;
2486 mpOldPreviewFontSet = mpPreviewFontSet;
2489 if (meOrient == SvxCellOrientation::Stacked)
2490 nControl |= EEControlBits::ONECHARPERLINE;
2493 mpEngine->SetControlWord( nControl );
2495 if ( !mbHyphenatorSet && bParaHyphenate )
2499 mpEngine->SetHyphenator( xXHyphenator );
2500 mbHyphenatorSet =
true;
2504 if ( bUseStyleColor && ( aBackCol.
IsTransparent() || bCellContrast ) )
2505 aBackCol = nConfBackColor;
2506 mpEngine->SetBackgroundColor( aBackCol );
2513 sal_uInt16 nIndent = 0;
2514 if (meHorJustAttr == SvxCellHorJustify::Left || meHorJustAttr == SvxCellHorJustify::Right)
2521 if(meHorJustAttr == SvxCellHorJustify::Right)
2532 calcMargins(nTopM, nLeftM, nBottomM, nRightM,
nPPTX,
nPPTY);
2534 if (isVerticallyOriented())
2545 if (mbAsianVertical)
2558 if (!mbBreak || meOrient == SvxCellOrientation::Stacked || mbAsianVertical)
2563 if (isVerticallyOriented())
2564 std::swap( nEngineWidth, nEngineHeight );
2566 if (meOrient == SvxCellOrientation::Stacked)
2567 nEngineWidth = nEngineWidth * 11 / 10;
2569 rWidth = nEngineWidth;
2570 rHeight = nEngineHeight;
2575 return (mbBreak || (meOrient == SvxCellOrientation::Stacked) || mbAsianVertical);
2583 return maCell.getFormula()->IsHyperLinkCell();
2588 return (meOrient == SvxCellOrientation::TopBottom || meOrient == SvxCellOrientation::BottomUp);
2594 OSL_ENSURE(isVerticallyOriented(),
"Use this only for vertically oriented cell!");
2608 switch (meHorJustResult)
2610 case SvxCellHorJustify::Center:
2613 case SvxCellHorJustify::Right:
2623 if (isVerticallyOriented() || mbAsianVertical)
2628 case SvxCellVerJustify::Top:
2629 eSvxAdjust = (meOrient == SvxCellOrientation::TopBottom || mbAsianVertical) ?
2630 SvxAdjust::Left : SvxAdjust::Right;
2632 case SvxCellVerJustify::Center:
2633 eSvxAdjust = SvxAdjust::Center;
2635 case SvxCellVerJustify::Bottom:
2636 case SvxCellVerJustify::Standard:
2637 eSvxAdjust = (meOrient == SvxCellOrientation::TopBottom || mbAsianVertical) ?
2638 SvxAdjust::Right : SvxAdjust::Left;
2640 case SvxCellVerJustify::Block:
2641 eSvxAdjust = SvxAdjust::Block;
2648 if (meHorJustResult == SvxCellHorJustify::Block)
2658 if (meOrient == SvxCellOrientation::Stacked)
2659 eSvxAdjust = SvxAdjust::Center;
2662 if (meOrient == SvxCellOrientation::Standard)
2663 switch (meHorJustResult)
2665 case SvxCellHorJustify::Repeat:
2666 case SvxCellHorJustify::Standard:
2667 SAL_WARN(
"sc.ui",
"meHorJustResult does not match getAlignmentFromContext()");
2669 case SvxCellHorJustify::Left:
2670 eSvxAdjust = SvxAdjust::Left;
2672 case SvxCellHorJustify::Center:
2673 eSvxAdjust = SvxAdjust::Center;
2675 case SvxCellHorJustify::Right:
2676 eSvxAdjust = SvxAdjust::Right;
2678 case SvxCellHorJustify::Block:
2679 eSvxAdjust = SvxAdjust::Block;
2685 case SvxCellVerJustify::Top:
2686 eSvxAdjust = SvxAdjust::Right;
2688 case SvxCellVerJustify::Center:
2689 eSvxAdjust = SvxAdjust::Center;
2691 case SvxCellVerJustify::Bottom:
2692 case SvxCellVerJustify::Standard:
2693 eSvxAdjust = SvxAdjust::Left;
2695 case SvxCellVerJustify::Block:
2696 eSvxAdjust = SvxAdjust::Block;
2703 if (mbAsianVertical)
2706 if (meHorJustResult == SvxCellHorJustify::Block)
2712 if (meVerJust == SvxCellVerJustify::Block)
2717 mpEngine->SetVertical(mbAsianVertical);
2731 if (meHorJustResult == SvxCellHorJustify::Right || meHorJustResult == SvxCellHorJustify::Center)
2733 SvxAdjust eEditAdjust = (meHorJustResult == SvxCellHorJustify::Center) ?
2734 SvxAdjust::Center : SvxAdjust::Right;
2748 bool bHasURL = pPDFData && isHyperlinkCell();
2753 tools::Long nURLHeight = mpEngine->GetTextHeight();
2756 Size aPaper = mpEngine->GetPaperSize();
2757 if ( mbAsianVertical )
2758 nURLHeight = aPaper.
Height();
2760 nURLWidth = aPaper.
Width();
2762 if (isVerticallyOriented())
2763 std::swap( nURLWidth, nURLHeight );
2764 else if (mbAsianVertical)
2765 aURLStart.
AdjustX( -nURLWidth );
2785 bool bVClip =
false;
2808 if (!(bClip || bSimClip))
2818 mpDev->IntersectClipRegion(maRect);
2834 mpDev->SetClipRegion();
2855 rNeededPixel = nEngineWidth;
2857 rNeededPixel += nAddWidthPixels;
2859 return nEngineWidth;
2864 OSL_ASSERT(rParam.
meOrient == SvxCellOrientation::Standard);
2876 rParam.
meOrient = SvxCellOrientation::Standard;
2877 nAttrRotate = 0_deg100;
2902 if ( nXForPos <
nX1 )
2908 if ( nArrYForPos < 1 )
2918 Size aPaperSize( 1000000, 1000000 );
2925 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
2953 rParam.
meVerJust = SvxCellVerJustify::Top;
2960 || rParam.
meVerJust==SvxCellVerJustify::Standard);
2964 bool bWrapFields =
false;
2983 nNeededPixel =
mpRefDevice->LogicToPixel(
Size(nNeededPixel,0)).Width();
2984 nNeededPixel += nLeftM + nRightM;
2986 if (!rParam.
mbBreak || bShrink)
2990 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
2991 rParam.
mbCellIsValue || bRepeat || bShrink,
false,
false, aAreaParam );
2996 nLeftM, nTopM, nRightM, nBottomM,
true,
2998 nEngineWidth, nEngineHeight, nNeededPixel,
3006 tools::Long nFormatted = nNeededPixel - nLeftM - nRightM;
3008 if ( nAvailable >= 2 * nFormatted )
3017 if ( nRepeatSize > 0 )
3019 tools::Long nRepeatCount = nAvailable / nRepeatSize;
3020 if ( nRepeatCount > 1 )
3022 OUStringBuffer aRepeated(aCellStr);
3023 for (
tools::Long nRepeat = 1; nRepeat < nRepeatCount; nRepeat++ )
3024 aRepeated.append(aCellStr);
3027 nNeededPixel, (nLeftM + nRightM ) );
3041 SetClipMarks( aAreaParam, pClipMarkCell, eOutHorJust,
true, nLayoutSign );
3044 if (eOutHorJust != SvxCellHorJustify::Left)
3046 aPaperSize.
setWidth( nNeededPixel + 1 );
3070 if ( eOutHorJust == SvxCellHorJustify::Right )
3071 nStartX -= nNeededPixel -
nCellWidth + nRightM + 1;
3072 else if ( eOutHorJust == SvxCellHorJustify::Center )
3073 nStartX -= ( nNeededPixel -
nCellWidth + nRightM + 1 - nLeftM ) / 2;
3084 bool bSimClip =
false;
3088 aCellSize =
mpRefDevice->PixelToLogic(
Size( nOutWidth, nOutHeight ) );
3090 aCellSize =
Size( nOutWidth, nOutHeight );
3092 if ( nEngineHeight >= aCellSize.
Height() + aRefOne.
Height() )
3102 ( rParam.
mpCondSet && SfxItemState::SET ==
3114 if ( nEngineHeight - aCellSize.
Height() > 100 &&
3137 if (rParam.
meVerJust==SvxCellVerJustify::Standard)
3138 rParam.
meVerJust=SvxCellVerJustify::Top;
3152 aLogicStart =
Point(nStartX, nStartY);
3162 if (rParam.
meVerJust==SvxCellVerJustify::Bottom ||
3163 rParam.
meVerJust==SvxCellVerJustify::Standard)
3174 aLogicStart.
AdjustY(nTopM + aCellSize.
Height() - nEngineHeight );
3176 else if (rParam.
meVerJust==SvxCellVerJustify::Center)
3184 aLogicStart.
AdjustY(nTopM + (aCellSize.
Height() - nEngineHeight) / 2 );
3194 aURLStart = aLogicStart;
3203 aDocStart -= aLogicStart;
3219 if ( !bHasHashText )
3224 if ( eOutHorJust == SvxCellHorJustify::Left )
3230 else if ( eOutHorJust == SvxCellHorJustify::Right )
3289 bool bWrapFields,
bool bTop)
3293 bool bSimClip =
false;
3296 if ( nEngineWidth >= aCellSize.
Width() + aRefOne.
Width() )
3306 ( rParam.
mpCondSet && SfxItemState::SET ==
3312 ShowClipMarks( rParam, nEngineWidth, aCellSize, bMerged, aAreaParam, bTop);
3323 OSL_ASSERT(rParam.
meHorJustAttr != SvxCellHorJustify::Repeat);
3336 if ( nXForPos <
nX1 )
3342 if ( nArrYForPos < 1 )
3352 Size aPaperSize( 1000000, 1000000 );
3359 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
3380 bool bWrapFields =
false;
3399 nNeededPixel =
mpRefDevice->LogicToPixel(
Size(nNeededPixel,0)).Width();
3400 nNeededPixel += nLeftM + nRightM;
3402 if (!rParam.
mbBreak || bShrink)
3406 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
3407 rParam.
mbCellIsValue || bRepeat || bShrink,
false,
false, aAreaParam );
3412 nLeftM, nTopM, nRightM, nBottomM,
false,
3414 nEngineWidth, nEngineHeight, nNeededPixel,
3422 const tools::Long nFormatted = nNeededPixel - nLeftM - nRightM;
3424 if ( nAvailable >= 2 * nFormatted )
3433 if ( nRepeatSize > 0 )
3435 const tools::Long nRepeatCount = nAvailable / nRepeatSize;
3436 if ( nRepeatCount > 1 )
3438 OUStringBuffer aRepeated(aCellStr);
3439 for (
tools::Long nRepeat = 1; nRepeat < nRepeatCount; nRepeat++ )
3440 aRepeated.append(aCellStr);
3443 nNeededPixel, (nLeftM + nRightM ) );
3474 if ( eOutHorJust == SvxCellHorJustify::Right )
3475 nStartX -= nNeededPixel -
nCellWidth + nRightM + 1;
3476 else if ( eOutHorJust == SvxCellHorJustify::Center )
3477 nStartX -= ( nNeededPixel -
nCellWidth + nRightM + 1 - nLeftM ) / 2;
3489 :
Size( nOutWidth, nOutHeight );
3494 const auto pClipRegion =
Clip( rParam, aCellSize, aAreaParam, nEngineWidth, bWrapFields,
true );
3496 Point aLogicStart(nStartX, nStartY);
3499 aURLStart = aLogicStart;
3536 aLogicStart.
AdjustY(nTopOffset );
3540 case SvxCellVerJustify::Standard:
3541 case SvxCellVerJustify::Bottom:
3544 case SvxCellVerJustify::Center:
3546 aLogicStart.
AdjustY( -(nGap / 2) );
3548 case SvxCellVerJustify::Block:
3549 case SvxCellVerJustify::Top:
3566 OSL_ASSERT(rParam.
meHorJustAttr != SvxCellHorJustify::Repeat);
3579 if ( nXForPos <
nX1 )
3585 if ( nArrYForPos < 1 )
3595 Size aPaperSize( 1000000, 1000000 );
3602 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
3623 bool bWrapFields =
false;
3642 nNeededPixel =
mpRefDevice->LogicToPixel(
Size(nNeededPixel,0)).Width();
3643 nNeededPixel += nLeftM + nRightM;
3645 if (!rParam.
mbBreak || bShrink)
3649 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
3650 rParam.
mbCellIsValue || bRepeat || bShrink,
false,
false, aAreaParam );
3655 nLeftM, nTopM, nRightM, nBottomM,
false,
3657 nEngineWidth, nEngineHeight, nNeededPixel,
3665 const tools::Long nFormatted = nNeededPixel - nLeftM - nRightM;
3667 if ( nAvailable >= 2 * nFormatted )
3677 if ( nRepeatSize > 0 )
3679 const tools::Long nRepeatCount = nAvailable / nRepeatSize;
3680 if ( nRepeatCount > 1 )
3682 OUStringBuffer aRepeated(aCellStr);
3683 for (
tools::Long nRepeat = 1; nRepeat < nRepeatCount; nRepeat++ )
3684 aRepeated.append(aCellStr);
3687 nNeededPixel, (nLeftM + nRightM ) );
3716 nStartX += aPaperSize.
Height();
3720 if ( eOutHorJust == SvxCellHorJustify::Right )
3721 nStartX -= nNeededPixel -
nCellWidth + nRightM + 1;
3722 else if ( eOutHorJust == SvxCellHorJustify::Center )
3723 nStartX -= ( nNeededPixel -
nCellWidth + nRightM + 1 - nLeftM ) / 2;
3735 :
Size( nOutWidth, nOutHeight );
3740 const auto pClipRegion =
Clip( rParam, aCellSize, aAreaParam, nEngineWidth, bWrapFields,
false );
3742 Point aLogicStart(nStartX, nStartY);
3745 aURLStart = aLogicStart;
3749 aLogicStart.
AdjustX(nEngineWidth );
3770 aLogicStart.
AdjustY(nTopOffset );
3774 case SvxCellVerJustify::Standard:
3775 case SvxCellVerJustify::Bottom:
3779 case SvxCellVerJustify::Center:
3781 aLogicStart.
AdjustY( -(nGap / 2) );
3783 case SvxCellVerJustify::Block:
3784 case SvxCellVerJustify::Top:
3803 OSL_ASSERT(rParam.
meHorJustAttr != SvxCellHorJustify::Repeat);
3815 rParam.
meOrient = SvxCellOrientation::Standard;
3828 if ( nXForPos <
nX1 )
3834 if ( nArrYForPos < 1 )
3844 Size aPaperSize( 1000000, 1000000 );
3849 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
3880 bool bWrapFields =
false;
3899 nNeededPixel =
mpRefDevice->LogicToPixel(
Size(nNeededPixel,0)).Width();
3900 nNeededPixel += nLeftM + nRightM;
3906 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
3907 true,
false,
false, aAreaParam );
3910 nLeftM, nTopM, nRightM, nBottomM,
true,
3912 nEngineWidth, nEngineHeight, nNeededPixel,
3920 SetClipMarks( aAreaParam, pClipMarkCell, eOutHorJust,
true, nLayoutSign );
3923 if ( eOutHorJust != SvxCellHorJustify::Left )
3925 aPaperSize.
setWidth( nNeededPixel + 1 );
3949 if ( eOutHorJust == SvxCellHorJustify::Right )
3950 nStartX -= nNeededPixel -
nCellWidth + nRightM + 1;
3951 else if ( eOutHorJust == SvxCellHorJustify::Center )
3952 nStartX -= ( nNeededPixel -
nCellWidth + nRightM + 1 - nLeftM ) / 2;
3963 bool bSimClip =
false;
3967 aCellSize =
mpRefDevice->PixelToLogic(
Size( nOutWidth, nOutHeight ) );
3969 aCellSize =
Size( nOutWidth, nOutHeight );
3971 if ( nEngineHeight >= aCellSize.
Height() + aRefOne.
Height() )
3981 ( rParam.
mpCondSet && SfxItemState::SET ==
3993 if ( nEngineHeight - aCellSize.
Height() > 100 &&
4026 aLogicStart =
Point(nStartX, nStartY);
4028 if (rParam.
meVerJust==SvxCellVerJustify::Bottom ||
4029 rParam.
meVerJust==SvxCellVerJustify::Standard)
4040 aLogicStart.
AdjustY(nTopM + aCellSize.
Height() - nEngineHeight );
4042 else if (rParam.
meVerJust==SvxCellVerJustify::Center)
4050 aLogicStart.
AdjustY(nTopM + (aCellSize.
Height() - nEngineHeight) / 2 );
4060 aURLStart = aLogicStart;
4063 aPaperLogic.
setWidth( nEngineWidth );
4073 aDocStart -= aLogicStart;
4089 OSL_ASSERT(rParam.
meOrient == SvxCellOrientation::Standard);
4091 OSL_ASSERT(rParam.
meHorJustAttr != SvxCellHorJustify::Repeat);
4095 bool bHidden =
false;
4124 if ( nXForPos <
nX1 )
4130 if ( nArrYForPos < 1 )
4140 Size aPaperSize( 1000000, 1000000 );
4145 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
4172 if ( rParam.
meVerJust == SvxCellVerJustify::Standard )
4173 rParam.
meVerJust = SvxCellVerJustify::Top;
4180 bool bWrapFields =
false;
4199 nNeededPixel =
mpRefDevice->LogicToPixel(
Size(nNeededPixel,0)).Width();
4200 nNeededPixel += nLeftM + nRightM;
4204 *rParam.
mpPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
4205 rParam.
mbCellIsValue || bShrink,
false,
false, aAreaParam );
4210 nLeftM, nTopM, nRightM, nBottomM,
false,
4212 nEngineWidth, nEngineHeight, nNeededPixel,
4220 SetClipMarks( aAreaParam, pClipMarkCell, eOutHorJust,
true, nLayoutSign );
4223 if (eOutHorJust != SvxCellHorJustify::Left)
4225 aPaperSize.
setWidth( nNeededPixel + 1 );
4250 bool bSimClip =
false;
4254 aCellSize =
mpRefDevice->PixelToLogic(
Size( nOutWidth, nOutHeight ) );
4256 aCellSize =
Size( nOutWidth, nOutHeight );
4258 if ( nEngineHeight >= aCellSize.
Height() + aRefOne.
Height() )
4268 ( rParam.
mpCondSet && SfxItemState::SET ==
4280 if ( nEngineHeight - aCellSize.
Height() > 100 &&
4281 ( rParam.
mbBreak || rParam.
meOrient == SvxCellOrientation::Stacked ) &&
4314 aLogicStart =
Point(nStartX, nStartY);
4322 aLogicStart.
AdjustX(nAvailWidth - nEngineWidth );
4324 aLogicStart.
AdjustX((nAvailWidth - nEngineWidth) / 2 );
4327 aLogicStart.
AdjustX(nEngineWidth );
4335 aURLStart = aLogicStart;
4352 std::unique_ptr<ScFieldEditEngine> pEngine;
4353 bool bHyphenatorSet =
false;
4356 const SfxItemSet* pOldPreviewFontSet =
nullptr;
4368 if ( nX2 < mpDoc->MaxCol() )
4369 nLastContentCol = sal::static_int_cast<SCCOL>(
4377 if (nArrY==1) nRowPosY =
nScrY;
4379 if ( pThisRowInfo->
bChanged || nArrY==0 )
4384 std::unique_ptr< ScPatternAttr > pPreviewPattr;
4385 if (nX==
nX1) nPosX = nInitPosX;
4393 bool bDoCell =
false;
4414 while (nTempX < nLastContentCol &&
IsEmptyCellText( pThisRowInfo, nTempX, nY ))
4437 if ( nCellY == nY && nCellX >=
nX1 && nCellX <=
nX2 &&
4443 aCell = rCellInfo.
maCell;
4461 pPreviewPattr->SetStyleSheet(pPreviewStyle);
4462 pPattern = pPreviewPattr.get();
4502 aParam.
meOrient = SvxCellOrientation::Standard;
4506 case SvxCellOrientation::BottomUp:
4509 case SvxCellOrientation::TopBottom:
4512 case SvxCellOrientation::Stacked:
4554 std::unique_ptr<ScFieldEditEngine> pEngine;
4555 bool bHyphenatorSet =
false;
4574 if (nArrY==1) nRowPosY =
nScrY;
4579 for (
SCCOL nX=0; nX<=nRotMax; nX++)
4581 if (nX==
nX1) nPosX = nInitPosX;
4588 bool bHidden =
false;
4604 bool bFromDoc =
false;
4626 bool bBreak = ( eHorJust == SvxCellHorJustify::Block ) ||
4628 bool bRepeat = ( eHorJust == SvxCellHorJustify::Repeat && !bBreak );
4629 bool bShrink = !bBreak && !bRepeat &&
4640 if ((bBreak || eOrient!=SvxCellOrientation::Standard) && !bMerged)
4644 nStartX = nInitPosX;
4677 if ( pPattern != pOldPattern || pCondSet != pOldCondSet )
4679 auto pSet = std::make_unique<SfxItemSet>( pEngine->GetEmptyItemSet() );
4684 if (eOrient==SvxCellOrientation::Stacked)
4685 eSvxAdjust = SvxAdjust::Center;
4690 pEngine->SetDefaults( std::move(pSet) );
4691 pOldPattern = pPattern;
4692 pOldCondSet = pCondSet;
4695 if (eOrient==SvxCellOrientation::Stacked)
4696 nControl |= EEControlBits::ONECHARPERLINE;
4699 pEngine->SetControlWord( nControl );
4701 if ( !bHyphenatorSet && bParaHyphenate )
4705 pEngine->SetHyphenator( xXHyphenator );
4706 bHyphenatorSet =
true;
4712 aBackCol = nConfBackColor;
4713 pEngine->SetBackgroundColor( aBackCol );
4722 sal_uInt16 nIndent = 0;
4723 if ( eHorJust == SvxCellHorJustify::Left )
4727 if ( bPixelToLogic )
4728 nTotalHeight =
mpRefDevice->PixelToLogic(
Size(0,nTotalHeight)).Height();
4736 nOutWidth -= nLeftM + nRightM;
4737 nOutHeight -= nTopM + nBottomM;
4744 if ( eOrient == SvxCellOrientation::Standard )
4746 nAttrRotate = pPattern->
4755 static const sal_Int32 nMinRad(50);
4758 nAttrRotate =
Degree100(((nAttrRotate.
get() % 36000) + 36000) % 36000);
4767 else if (nAttrRotate >
Degree100(36000 - nMinRad))
4770 nAttrRotate =
Degree100(36000 - nMinRad);
4773 else if (nAttrRotate >
Degree100(18000 - nMinRad) && (nAttrRotate <
Degree100(18000 + nMinRad)))
4776 nAttrRotate = (nAttrRotate >
Degree100(18000))
4788 double nRealOrient =
toRadians(nAttrRotate);
4789 nCos = cos( nRealOrient );
4800 nSin = sin( nRealOrient );
4804 Size aPaperSize( 1000000, 1000000 );
4805 if (eOrient==SvxCellOrientation::Stacked)
4817 else if (eOrient == SvxCellOrientation::Standard)
4820 aPaperSize.
setWidth( nOutHeight - 1 );
4823 pEngine->SetPaperSize(
mpRefDevice->PixelToLogic(aPaperSize));
4825 pEngine->SetPaperSize(aPaperSize);
4832 pEngine->SetTextCurrentDefaults(*aCell.
getEditText());
4835 OSL_FAIL(
"pData == 0");
4842 const Color* pColor;
4850 pEngine->SetTextCurrentDefaults(aString);
4862 pEngine->SetUpdateLayout(
true );
4865 tools::Long nEngineHeight = pEngine->GetTextHeight();
4867 if (nAttrRotate && bBreak)
4869 double nAbsCos = fabs( nCos );
4870 double nAbsSin = fabs( nSin );
4878 Size(0,nEngineHeight)).Height();
4881 bool bFits = ( nNewWidth >= aPaperSize.
Width() );
4886 if ( nNewWidth < 4 )
4889 nEffHeight = nOutHeight / 2;
4890 nNewWidth =
static_cast<tools::Long>(nEffHeight / nAbsSin) + 2;
4899 pEngine->SetPaperSize(
mpRefDevice->PixelToLogic(aPaperSize));
4901 pEngine->SetPaperSize(aPaperSize);
4904 nEngineWidth =
static_cast<tools::Long>(pEngine->CalcTextWidth());
4905 nEngineHeight = pEngine->GetTextHeight();
4916 double nAbsCos = fabs( nCos );
4917 double nAbsSin = fabs( nSin );
4920 nEngineWidth =
static_cast<tools::Long>( nRealWidth * nAbsCos +
4921 nRealHeight * nAbsSin );
4923 nEngineWidth =
static_cast<tools::Long>( nRealHeight / nAbsSin );
4926 nEngineHeight =
static_cast<tools::Long>( nRealHeight * nAbsCos +
4927 nRealWidth * nAbsSin );
4943 aCellSize =
mpRefDevice->PixelToLogic(
Size( nOutWidth, nOutHeight ) );
4945 aCellSize =
Size( nOutWidth, nOutHeight );
4948 bool bNegative =
false;
4951 nGridWidth = aCellSize.
Width() +
4955 bNegative = !bNegative;
4966 eOutHorJust = bNegative ? SvxCellHorJustify::Right : SvxCellHorJustify::Left;
4968 if ( bPixelToLogic )
4971 GetOutputArea( nX, nArrY, nCellStartX, nPosY, nCellX, nCellY, nNeededWidth,
4972 *pPattern, sal::static_int_cast<sal_uInt16>(eOutHorJust),
4973 false,
false,
true, aAreaParam );
4978 mpRefDevice->LogicToPixel(
Size(nEngineWidth,0)).Width() : nEngineWidth;
4979 tools::Long nNeededPixel = nPixelWidth + nLeftM + nRightM;
4985 false, eOrient, nAttrRotate, bPixelToLogic,
4992 true, eOrient, nAttrRotate, bPixelToLogic,
4998 nRealWidth =
static_cast<tools::Long>(pEngine->CalcTextWidth());
4999 nRealHeight = pEngine->GetTextHeight();
5002 nEngineWidth =
static_cast<tools::Long>( nRealHeight / fabs( nSin ) );
5013 nClipStartX =
nScrX;
5019 if (nArrY==0 && nClipStartY < nRowPosY )
5022 nClipStartY = nRowPosY;
5029 nClipStartX =
nScrX;
5035 Point(nClipStartX,nClipStartY), aClipSize ) );
5052 aLogicStart =
Point(nStartX, nStartY);
5053 if ( eOrient!=SvxCellOrientation::Standard || !bBreak )
5057 eOrient!=SvxCellOrientation::Stacked &&
5062 fZoom = fZoom > 1.0 ? fZoom : 1.0;
5068 if (nAvailWidth<nComp) nAvailWidth=nComp;
5073 if (eOrient==SvxCellOrientation::Standard && !nAttrRotate)
5075 if (eHorJust==SvxCellHorJustify::Right ||
5076 eHorJust==SvxCellHorJustify::Center)
5078 pEngine->SetUpdateLayout(
false );
5081 (eHorJust==SvxCellHorJustify::Right) ?
5082 SvxAdjust::Right : SvxAdjust::Center;
5083 pEngine->SetDefaultItem(
5088 pEngine->SetPaperSize(
mpRefDevice->PixelToLogic(aPaperSize));
5090 pEngine->SetPaperSize(aPaperSize);
5092 pEngine->SetUpdateLayout(
true );
5098 if (eHorJust==SvxCellHorJustify::Right)
5099 aLogicStart.
AdjustX(nAvailWidth - nEngineWidth );
5100 else if (eHorJust==SvxCellHorJustify::Center ||
5101 eHorJust==SvxCellHorJustify::Standard)
5102 aLogicStart.
AdjustX((nAvailWidth - nEngineWidth) / 2 );
5115 if ( eOrient==SvxCellOrientation::Standard ||
5116 eOrient==SvxCellOrientation::Stacked || !bBreak )
5118 if (eVerJust==SvxCellVerJustify::Bottom ||
5119 eVerJust==SvxCellVerJustify::Standard)
5130 else if (eVerJust==SvxCellVerJustify::Center)
5138 aLogicStart.
AdjustY((aCellSize.
Height() - nEngineHeight) / 2 );
5143 OSL_ENSURE( eOrient == SvxCellOrientation::Standard && nAttrRotate,
5144 "DrawRotated: no rotation" );
5150 nOriVal = to<Degree10>(nAttrRotate);
5157 double nH = nRealHeight * nCos;
5158 nAddX += nH * ( nCos / fabs(nSin) );
5161 nAddX -= nRealWidth * nCos;
5163 nAddX -= nRealHeight * nSin;
5165 nAddY += nRealWidth * nSin;
5167 nAddY -= nRealHeight * nCos;
5172 double nSkew = nTotalHeight * nCos / fabs(nSin);
5174 nAddX -= nSkew * 0.5;
5180 if ( eVerJust == SvxCellVerJustify::Center )
5181 nUp = ( aCellSize.
Height() - nEngineHeight ) / 2;
5182 else if ( eVerJust == SvxCellVerJustify::Top )
5185 nUp = aCellSize.
Height() - nEngineHeight;
5190 nUp = aCellSize.
Height() - nEngineHeight;
5193 nAddX += ( nUp * nCos / fabs(nSin) );
5202 pEngine->Draw(*
mpDev, aLogicStart, nOriVal);
5207 mpDev->SetClipRegion();
size_t SCSIZE
size_t typedef to be able to find places where code was changed from USHORT to size_t and is used to ...
const StyleSettings & GetStyleSettings() const
static OutputDevice * GetDefaultDevice()
static const AllSettings & GetSettings()
~ClearableClipRegion() COVERITY_NOEXCEPT_FALSE
VclPtr< OutputDevice > mpDev
const tools::Rectangle & getRect() const
ClearableClipRegion(const tools::Rectangle &rRect, bool bClip, bool bSimClip, const VclPtr< OutputDevice > &pDev, bool bMetaFile)
bool IsTransparent() const
void GetPortions(sal_Int32 nPara, std::vector< sal_Int32 > &rList)
OUString GetText(LineEnd eEnd=LINEEND_LF) const
void SetText(const OUString &rStr)
bool SetUpdateLayout(bool bUpdate, bool bRestoring=false)
sal_Int32 GetParagraphCount() const
const Size & GetPaperSize() const
void EnableSkipOutsideFormat(bool set)
sal_uInt32 GetTextHeight() const
SfxItemSet GetAttribs(sal_Int32 nPara, sal_Int32 nStart, sal_Int32 nEnd, GetAttribsFlags nFlags=GetAttribsFlags::ALL) const
sal_uInt32 CalcTextWidth()
const SfxItemSet & GetEmptyItemSet() const
sal_Int32 GetLineCount(sal_Int32 nParagraph) const
void Draw(OutputDevice &rOutDev, const tools::Rectangle &rOutRect)
void SetPaperSize(const Size &rSize)
void QuickSetAttribs(const SfxItemSet &rSet, const ESelection &rSel)
virtual void SetParaAttribs(sal_Int32 nPara, const SfxItemSet &rSet)
const SfxItemSet & GetParaAttribs(sal_Int32 nPara) const
tools::Long GetDescent() const
tools::Long GetAscent() const
tools::Long GetInternalLeading() const
void resize(size_t nSize)
void set(size_t nIndex, sal_Int32 nValue)
static css::uno::Reference< css::linguistic2::XHyphenator > GetHyphenator()
const css::i18n::LocaleDataItem2 & getLocaleItem() const
const Fraction & GetScaleX() const
const Fraction & GetScaleY() const
GDIMetaFile * GetConnectMetaFile() const
void SetFont(const vcl::Font &rNewFont)
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
vcl::ExtOutDevData * GetExtOutDevData() const
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
FontMetric GetFontMetric() const
const MapMode & GetMapMode() const
tools::Long GetTextHeight() const
OutDevType GetOutDevType() const
void Move(tools::Long nHorzMove, tools::Long nVertMove)
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
static SalLayoutGlyphsCache * self()
const SalLayoutGlyphs * GetLayoutGlyphs(VclPtr< const OutputDevice > outputDevice, const OUString &text, const vcl::text::TextLayoutCache *layoutCache=nullptr)
SC_DLLPUBLIC SfxItemPool * GetEnginePool() const
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
SC_DLLPUBLIC sal_uInt32 GetNumberFormat(SCCOL nCol, SCROW nRow, SCTAB nTab) const
SC_DLLPUBLIC sal_uInt16 GetColWidth(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
EEHorizontalTextDirection GetEditTextDirection(SCTAB nTab) const
tools::Long GetScaledRowHeight(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, double fScale) const
SC_DLLPUBLIC SCCOL MaxCol() const
const SfxPoolItem * GetEffItem(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich) const
void SetLayoutStrings(bool bSet)
bool IsInLayoutStrings() const
SC_DLLPUBLIC bool RowHidden(SCROW nRow, SCTAB nTab, SCROW *pFirstRow=nullptr, SCROW *pLastRow=nullptr) const
SC_DLLPUBLIC CRFlags GetRowFlags(SCROW nRow, SCTAB nTab) const
SC_DLLPUBLIC bool HasAttrib(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, HasAttrFlags nMask) const
bool InterpretCellsIfNeeded(const ScRangeList &rRanges)
SC_DLLPUBLIC SvtScriptType GetCellScriptType(const ScAddress &rPos, sal_uInt32 nNumberFormat, const ScRefCellValue *pCell=nullptr)
void ApplyAsianEditSettings(ScEditEngineDefaulter &rEngine)
SfxItemSet * GetPreviewFont()
SC_DLLPUBLIC SvNumberFormatter * GetFormatTable() const
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
SC_DLLPUBLIC OUString GetString(SCCOL nCol, SCROW nRow, SCTAB nTab, const ScInterpreterContext *pContext=nullptr) const
ScStyleSheet * GetPreviewCellStyle()
SC_DLLPUBLIC CellType GetCellType(SCCOL nCol, SCROW nRow, SCTAB nTab) const
SC_DLLPUBLIC bool IsLayoutRTL(SCTAB nTab) const
SC_DLLPUBLIC const SfxPoolItem * GetAttr(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich) const
SC_DLLPUBLIC SCSIZE GetEmptyLinesInBlock(SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab, SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab, ScDirection eDir)
SC_DLLPUBLIC const SfxItemSet * GetCondResult(SCCOL nCol, SCROW nRow, SCTAB nTab, ScRefCellValue *pCell=nullptr) const
SC_DLLPUBLIC const ScPatternAttr * GetPattern(SCCOL nCol, SCROW nRow, SCTAB nTab) const
SvxCellOrientation eAttrOrient
void SetPattern(const ScPatternAttr *pNew, const SfxItemSet *pSet, const ScRefCellValue &rCell, SvtScriptType nScript)
bool HasEditCharacters() const
bool GetLineBreak() const
tools::Long nOriginalWidth
const OUString & GetString() const
const SfxItemSet * pCondSet
SvxCellVerJustify GetVerJust() const
tools::Long GetDotWidth()
tools::Long GetSignWidth()
void SetShrinkScale(tools::Long nScale, SvtScriptType nScript)
SvxCellVerJustify eAttrVerJust
tools::Long nMaxDigitWidth
tools::Long GetAscent() const
SvxCellOrientation GetOrient() const
tools::Long GetOriginalWidth() const
void SetPatternSimple(const ScPatternAttr *pNew, const SfxItemSet *pSet)
bool HasCondHeight() const
SvxCellJustifyMethod eAttrHorJustMethod
SvxCellHorJustify eAttrHorJust
void RepeatToFill(tools::Long nColWidth)
void SetAutoText(const OUString &rAutoText)
const SalLayoutGlyphs * GetLayoutGlyphs(const OUString &rString) const
ScRefCellValue maLastCell
tools::Long GetExpWidth()
ScDrawStringsVars(ScOutputData *pData, bool bPTL)
tools::Long GetMaxDigitWidth()
const ScPatternAttr * pPattern
sal_uInt16 GetLeftTotal() const
SvxCellHorJustify GetHorJust() const
bool SetText(const ScRefCellValue &rCell)
const SvxMarginItem * pMargin
const SvxMarginItem * GetMargin() const
sal_uLong GetResultValueFormat() const
sal_uInt16 GetRightTotal() const
bool SetTextToWidthOrHash(ScRefCellValue &rCell, tools::Long nWidth)
SvxCellJustifyMethod GetHorJustMethod() const
tools::Long GetFmtTextWidth(const OUString &rString)
const Size & GetTextSize() const
void SetTextCurrentDefaults(const EditTextObject &rTextObject)
SetText and apply defaults already set.
void SetDefaultItem(const SfxPoolItem &rItem)
Set the item in the default ItemSet which is created if it doesn't exist yet.
tools::Rectangle GetEditArea(const ScPatternAttr *pPattern, bool bForceToTop)
static SC_DLLPUBLIC const LocaleDataWrapper & getLocaleData()
static SC_DLLPUBLIC SvtScriptType GetDefaultScriptType()
static SC_DLLPUBLIC const CharClass & getCharClass()
SCCOL GetColMerge() const
SCROW GetRowMerge() const
svtools::ColorConfig & GetColorConfig()
bool adjustHorAlignment(ScFieldEditEngine *pEngine)
bool readCellContent(const ScDocument *pDoc, bool bShowNullValues, bool bShowFormulas, bool bSyntaxMode, bool bUseStyleColor, bool bForceAutoColor, bool &rWrapFields)
void adjustForHyperlinkInPDF(Point aURLStart, const OutputDevice *pDev)
SvxCellOrientation meOrient
const SfxItemSet * mpCondSet
const std::vector< editeng::MisspellRanges > * mpMisspellRanges
bool isVerticallyOriented() const
When the text is vertically oriented, the text is either rotated 90 degrees to the right or 90 degree...
const SfxItemSet * mpPreviewFontSet
SvxCellHorJustify meHorJustAttr
alignment attribute
const ScPatternAttr * mpPattern
ScFieldEditEngine * mpEngine
void calcPaperSize(Size &rPaperSize, const tools::Rectangle &rAlignRect, double nPPTX, double nPPTY) const
void setAlignmentToEngine()
const SfxItemSet * mpOldPreviewFontSet
DrawEditParam(const ScPatternAttr *pPattern, const SfxItemSet *pCondSet, bool bCellIsValue)
void getEngineSize(ScFieldEditEngine *pEngine, tools::Long &rWidth, tools::Long &rHeight) const
void setPatternToEngine(bool bUseStyleColor)
bool hasLineBreak() const
SvxCellHorJustify meHorJustResult
result for EditEngine
void calcStartPosForVertical(Point &rLogicStart, tools::Long nCellWidth, tools::Long nEngineWidth, tools::Long nTopM, const OutputDevice *pRefDevice)
Calculate offset position for vertically oriented (either top-bottom or bottom-top orientation) text.
SvxCellVerJustify meVerJust
const ScPatternAttr * mpOldPattern
bool isHyperlinkCell() const
void calcMargins(tools::Long &rTop, tools::Long &rLeft, tools::Long &rBottom, tools::Long &rRight, double nPPTX, double nPPTY) const
const SfxItemSet * mpOldCondSet
SvxCellHorJustify meHorJustContext
context depending on attribute, content and direction
void LayoutStrings(bool bPixelToLogic)
Draw all strings.
void DrawEditStacked(DrawEditParam &rParam)
VclPtr< OutputDevice > mpDev
VclPtr< OutputDevice > mpRefDevice
void GetOutputArea(SCCOL nX, SCSIZE nArrY, tools::Long nPosX, tools::Long nPosY, SCCOL nCellX, SCROW nCellY, tools::Long nNeeded, const ScPatternAttr &rPattern, sal_uInt16 nHorJustify, bool bCellIsValue, bool bBreak, bool bOverwrite, OutputAreaParam &rParam)
void SetSyntaxColor(vcl::Font *pFont, const ScRefCellValue &rCell)
void DrawStrings(bool bPixelToLogic=false)
void DrawEditBottomTop(DrawEditParam &rParam)
bool GetMergeOrigin(SCCOL nX, SCROW nY, SCSIZE nArrY, SCCOL &rOverX, SCROW &rOverY, bool bVisRowChanged)
bool AdjustAreaParamClipRect(OutputAreaParam &rAreaParam)
void SetClipMarks(OutputAreaParam &aAreaParam, ScCellInfo *pClipMarkCell, SvxCellHorJustify eOutHorJust, bool bHasHashText, tools::Long nLayoutSign)
bool IsAvailable(SCCOL nX, SCROW nY)
VclPtr< OutputDevice > pFmtDevice
tools::Long SetEngineTextAndGetWidth(DrawEditParam &rParam, const OUString &rSetString, tools::Long &rNeededPixel, tools::Long nAddWidthPixels)
ClearableClipRegionPtr Clip(DrawEditParam &rParam, const Size &aCellSize, OutputAreaParam &aAreaParam, tools::Long nEngineWidth, bool bWrapFields, bool bTop)
void DrawEditTopBottom(DrawEditParam &rParam)
void DrawEdit(bool bPixelToLogic)
std::optional< Color > mxValueColor
std::unique_ptr< ScFieldEditEngine > CreateOutputEditEngine()
void DrawEditAsianVertical(DrawEditParam &rParam)
void GetVisibleCell(SCCOL nCol, SCROW nRow, SCTAB nTab, ScRefCellValue &rCell)
void ShowClipMarks(DrawEditParam &rParam, tools::Long nEngineWidth, const Size &aCellSize, bool bMerged, OutputAreaParam &aAreaParam, bool bTop)
std::optional< Color > mxFormulaColor
const sc::SpellCheckContext * mpSpellCheckCxt
std::optional< Color > mxTextColor
void ShrinkEditEngine(EditEngine &rEngine, const tools::Rectangle &rAlignRect, tools::Long nLeftM, tools::Long nTopM, tools::Long nRightM, tools::Long nBottomM, bool bWidth, SvxCellOrientation nOrient, Degree100 nAttrRotate, bool bPixelToLogic, tools::Long &rEngineWidth, tools::Long &rEngineHeight, tools::Long &rNeededPixel, bool &rLeftClip, bool &rRightClip)
void SetEditSyntaxColor(EditEngine &rEngine, const ScRefCellValue &rCell)
void DrawRotated(bool bPixelToLogic)
bool IsEmptyCellText(const RowInfo *pThisRowInfo, SCCOL nX, SCROW nY)
double GetStretch() const
void DrawEditStandard(DrawEditParam &rParam)
static void fillFont(vcl::Font &rFont, const SfxItemSet &rItemSet, ScAutoFontColorMode eAutoMode, const OutputDevice *pOutDev=nullptr, const Fraction *pScale=nullptr, const SfxItemSet *pCondSet=nullptr, SvtScriptType nScript=SvtScriptType::NONE, const Color *pBackConfigColor=nullptr, const Color *pTextConfigColor=nullptr)
void SetStyleSheet(ScStyleSheet *pNewStyle, bool bClearDirectFormat=true)
sal_uInt32 GetNumberFormat(SvNumberFormatter *) const
SfxItemSet & GetItemSet()
static void fillFontOnly(vcl::Font &rFont, const SfxItemSet &rItemSet, const OutputDevice *pOutDev=nullptr, const Fraction *pScale=nullptr, const SfxItemSet *pCondSet=nullptr, SvtScriptType nScript=SvtScriptType::NONE)
Static helper function to fill a font object from the passed item set.
const SfxPoolItem & GetItem(sal_uInt16 nWhichP) const
void FillEditItemSet(SfxItemSet *pEditSet, const SfxItemSet *pCondSet=nullptr) const
Converts all Calc items contained in the own item set to edit engine items and puts them into pEditSe...
static SvxCellOrientation GetCellOrientation(const SfxItemSet &rItemSet, const SfxItemSet *pCondSet)
static void DeleteInterpretProgress()
static void CreateInterpretProgress(ScDocument *pDoc, bool bWait=true)
bool GetHideFormula() const
bool GetHidePrint() const
const WhichRangesContainer & GetRanges() const
SfxItemPool * GetPool() const
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr tools::Long Height() const
tools::Long AdjustHeight(tools::Long n)
void setWidth(tools::Long nWidth)
tools::Long AdjustWidth(tools::Long n)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
bool GetHighContrastMode() const
sal_Int16 GetRightMargin() const
sal_Int16 GetTopMargin() const
sal_Int16 GetBottomMargin() const
sal_Int16 GetLeftMargin() const
void reset(reference_type *pBody)
bool isMisspelled(SCCOL nCol, SCROW nRow) const
const std::vector< editeng::MisspellRanges > * getMisspellRanges(SCCOL nCol, SCROW nRow) const
bool HasCellRotation() const
tools::Long GetFontHeight() const
void SetOrientation(Degree10 nLineOrientation)
void SetColor(const Color &)
void SetFontHeight(tools::Long nHeight)
void SetKerning(FontKerning nKerning)
void SetAlignment(TextAlign)
std::vector< PDFExtOutDevBookmarkEntry > & GetBookmarks()
sal_Int32 CreateLink(const tools::Rectangle &rRect, OUString const &rAltText, sal_Int32 nPageNr=-1)
constexpr ::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
constexpr TypedWhichId< SfxBoolItem > EE_PARA_HYPHENATE(EE_PARA_START+6)
constexpr TypedWhichId< SvxVerJustifyItem > EE_PARA_VER_JUST(EE_PARA_START+19)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CJK(EE_CHAR_START+17)
constexpr TypedWhichId< SvxAdjustItem > EE_PARA_JUST(EE_PARA_START+16)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT(EE_CHAR_START+2)
constexpr TypedWhichId< SvxColorItem > EE_CHAR_COLOR(EE_CHAR_START+0)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT_CTL(EE_CHAR_START+20)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CTL(EE_CHAR_START+18)
constexpr TypedWhichId< SvxJustifyMethodItem > EE_PARA_JUST_METHOD(EE_PARA_START+18)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT_CJK(EE_CHAR_START+19)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO(EE_CHAR_START+1)
static OString lcl_GetValue(sal_uInt8 nType, const XclExpString *pStr)
const SCCOL SC_ROTMAX_NONE
const sal_uInt8 SC_CLIPMARK_SIZE
const sal_Unicode CHAR_RLM
const sal_Unicode CHAR_NBHY
const sal_Unicode CHAR_SHY
const sal_Unicode CHAR_NBSP
const sal_Unicode CHAR_LRM
const sal_Unicode CHAR_ZWSP
const sal_Unicode CHAR_WJ
#define SAL_WARN_IF(condition, area, stream)
#define SAL_WARN(area, stream)
std::unique_ptr< sal_Int32[]> pData
OStringBuffer & padToLength(OStringBuffer &rBuffer, sal_Int32 nLength, char cFill='\0')
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
const sal_Int32 nCellHeight
const sal_Int32 nCellWidth
static void lcl_ScaleFonts(EditEngine &rEngine, tools::Long nPercent)
static SvxCellHorJustify getAlignmentFromContext(SvxCellHorJustify eInHorJust, bool bCellIsValue, const OUString &rText, const ScPatternAttr &rPattern, const SfxItemSet *pCondSet, const ScDocument *pDoc, SCTAB nTab, const bool bNumberFormatIsText)
Get left, right or centered alignment from RTL context.
static bool StringDiffer(const ScPatternAttr *&rpOldPattern, const ScPatternAttr *pNewPattern)
static tools::Long lcl_GetEditSize(EditEngine &rEngine, bool bWidth, bool bSwap, Degree100 nAttrRotate)
static bool lcl_SafeIsValue(ScRefCellValue &rCell)
constexpr auto HMM_PER_TWIPS
static void lcl_DoHyperlinkResult(const OutputDevice *pDev, const tools::Rectangle &rRect, ScRefCellValue &rCell)
static bool SameValue(const ScRefCellValue &rCell, const ScRefCellValue &rOldCell)
static void lcl_ClearEdit(EditEngine &rEngine)
static bool lcl_isNumberFormatText(const ScDocument *pDoc, SCCOL nCellX, SCROW nCellY, SCTAB nTab)
#define DROPDOWN_BITMAP_SIZE
Merge Autofilter width with column.cxx.
static void lcl_SetEditColor(EditEngine &rEngine, const Color &rColor)
const sal_uInt16 SC_SHRINKAGAIN_MAX
static void lcl_CreateInterpretProgress(bool &bProgress, ScDocument *pDoc, const ScFormulaCell *pFCell)
static bool IsAmbiguousScript(SvtScriptType nScript)
std::unique_ptr< ClearableClipRegion, o3tl::default_delete< ClearableClipRegion > > ClearableClipRegionPtr
ScAutoFontColorMode
how to treat COL_AUTO in GetFont:
@ Print
black or white, depending on background
@ IgnoreAll
like DISPLAY, but ignore stored font and background colors
@ Display
from style settings, or black/white if needed
@ IgnoreBack
like DISPLAY, but ignore stored background color (use configured color)
@ IgnoreFont
like DISPLAY, but ignore stored font color (assume COL_AUTO)
constexpr TypedWhichId< ScIndentItem > ATTR_INDENT(131)
constexpr TypedWhichId< SvxFontHeightItem > ATTR_FONT_HEIGHT(101)
constexpr TypedWhichId< SfxBoolItem > ATTR_VERTICAL_ASIAN(137)
constexpr TypedWhichId< SvxFontItem > ATTR_CJK_FONT(111)
constexpr TypedWhichId< ScMergeFlagAttr > ATTR_MERGE_FLAG(145)
constexpr TypedWhichId< SvxForbiddenRuleItem > ATTR_FORBIDDEN_RULES(128)
constexpr TypedWhichId< SvxPostureItem > ATTR_CTL_FONT_POSTURE(119)
constexpr TypedWhichId< SvxFontItem > ATTR_CTL_FONT(116)
constexpr TypedWhichId< SvxFontHeightItem > ATTR_CJK_FONT_HEIGHT(112)
constexpr TypedWhichId< SvxPostureItem > ATTR_FONT_POSTURE(103)
constexpr TypedWhichId< SvxWeightItem > ATTR_FONT_WEIGHT(102)
constexpr TypedWhichId< SvxColorItem > ATTR_FONT_COLOR(109)
constexpr TypedWhichId< SvxWeightItem > ATTR_CJK_FONT_WEIGHT(113)
constexpr TypedWhichId< SvxEmphasisMarkItem > ATTR_FONT_EMPHASISMARK(121)
constexpr TypedWhichId< ScShrinkToFitCell > ATTR_SHRINKTOFIT(140)
constexpr TypedWhichId< ScMergeAttr > ATTR_MERGE(144)
constexpr TypedWhichId< SvxShadowedItem > ATTR_FONT_SHADOWED(108)
constexpr TypedWhichId< SvxWordLineModeItem > ATTR_FONT_WORDLINE(123)
constexpr TypedWhichId< SvxContourItem > ATTR_FONT_CONTOUR(107)
constexpr TypedWhichId< SvxBrushItem > ATTR_BACKGROUND(148)
constexpr TypedWhichId< SvxOverlineItem > ATTR_FONT_OVERLINE(105)
constexpr TypedWhichId< ScRotateValueItem > ATTR_ROTATE_VALUE(135)
constexpr TypedWhichId< SvxJustifyMethodItem > ATTR_VER_JUSTIFY_METHOD(133)
constexpr TypedWhichId< SvxHorJustifyItem > ATTR_HOR_JUSTIFY(129)
constexpr TypedWhichId< SvxRotateModeItem > ATTR_ROTATE_MODE(136)
constexpr TypedWhichId< SvxJustifyMethodItem > ATTR_HOR_JUSTIFY_METHOD(130)
constexpr TypedWhichId< SvxCharReliefItem > ATTR_FONT_RELIEF(124)
constexpr TypedWhichId< SvxFrameDirectionItem > ATTR_WRITINGDIR(138)
constexpr TypedWhichId< SvxCrossedOutItem > ATTR_FONT_CROSSEDOUT(106)
constexpr TypedWhichId< SvxMarginItem > ATTR_MARGIN(143)
constexpr TypedWhichId< ScVerticalStackCell > ATTR_STACKED(134)
constexpr TypedWhichId< SvxVerJustifyItem > ATTR_VER_JUSTIFY(132)
constexpr TypedWhichId< SvxFontItem > ATTR_FONT(100)
constexpr TypedWhichId< ScProtectionAttr > ATTR_PROTECTION(149)
constexpr TypedWhichId< SvxWeightItem > ATTR_CTL_FONT_WEIGHT(118)
constexpr TypedWhichId< ScLineBreakCell > ATTR_LINEBREAK(139)
constexpr TypedWhichId< SvxPostureItem > ATTR_CJK_FONT_POSTURE(114)
constexpr TypedWhichId< SvxFontHeightItem > ATTR_CTL_FONT_HEIGHT(117)
constexpr TypedWhichId< SvxUnderlineItem > ATTR_FONT_UNDERLINE(104)
ScCellInfo & cellInfo(SCCOL nCol)
ScBasicCellInfo & basicCellInfo(SCCOL nCol)
const SfxItemSet * pConditionSet
const ScPatternAttr * pPatternAttr
const ScDataBarInfo * pDataBar
const ScIconSetInfo * pIconSet
tools::Long mnLeftClipLength
bool mbLeftClip
length of the string getting cut off on the right.
tools::Rectangle maClipRect
tools::Long mnRightClipLength
length of the string getting cut off on the left.
tools::Rectangle maAlignRect
This is very similar to ScCellValue, except that it references the original value instead of copying ...
ScFormulaCell * getFormula() const
const EditTextObject * getEditText() const
void assign(ScDocument &rDoc, const ScAddress &rPos)
Take cell value from specified position in specified document.
svx::frame::Array maArray
UNDERLYING_TYPE get() const
#define SV_COUNTRY_LANGUAGE_OFFSET