Kaydet (Commit) 597f7b1f authored tarafından Bartosz Kosiorek's avatar Bartosz Kosiorek Kaydeden (comit) Markus Mohrhard

tdf#48140 Replace uno call from worksheethelper.cxx

Change-Id: Ibf738d67af6536e9300e11f8d4fa3fe79ab7099b
Reviewed-on: https://gerrit.libreoffice.org/31006Reviewed-by: 's avatarMarkus Mohrhard <markus.mohrhard@googlemail.com>
Tested-by: 's avatarMarkus Mohrhard <markus.mohrhard@googlemail.com>
üst 069445f9
...@@ -163,8 +163,7 @@ public: ...@@ -163,8 +163,7 @@ public:
const SheetViewModelRef& rxSheetView, const SheetViewModelRef& rxSheetView,
const css::uno::Any& rProperties ); const css::uno::Any& rProperties );
/** Stores the used area for a specific worksheet. */ /** Stores the used area for a specific worksheet. */
void setSheetUsedArea( void setSheetUsedArea( const ScRange& rUsedArea );
const css::table::CellRangeAddress& rUsedArea );
/** Converts all imported document view settings. */ /** Converts all imported document view settings. */
void finalizeImport(); void finalizeImport();
......
...@@ -33,13 +33,10 @@ namespace com { namespace sun { namespace star { ...@@ -33,13 +33,10 @@ namespace com { namespace sun { namespace star {
namespace awt { struct Rectangle; } namespace awt { struct Rectangle; }
namespace awt { struct Size; } namespace awt { struct Size; }
namespace drawing { class XDrawPage; } namespace drawing { class XDrawPage; }
namespace sheet { class XSheetCellRanges; }
namespace sheet { class XSpreadsheet; } namespace sheet { class XSpreadsheet; }
namespace table { class XCell; } namespace table { class XCell; }
namespace table { class XCell2; } namespace table { class XCell2; }
namespace table { class XCellRange; } namespace table { class XCellRange; }
namespace table { class XTableColumns; }
namespace table { class XTableRows; }
} } } } } }
namespace oox { namespace oox {
...@@ -191,7 +188,7 @@ public: ...@@ -191,7 +188,7 @@ public:
/** Returns the type of this sheet. */ /** Returns the type of this sheet. */
WorksheetType getSheetType() const; WorksheetType getSheetType() const;
/** Returns the index of the current sheet. */ /** Returns the index of the current sheet. */
sal_Int32 getSheetIndex() const; SCTAB getSheetIndex() const;
/** Returns the XSpreadsheet interface of the current sheet. */ /** Returns the XSpreadsheet interface of the current sheet. */
const css::uno::Reference< css::sheet::XSpreadsheet >& const css::uno::Reference< css::sheet::XSpreadsheet >&
getSheet() const; getSheet() const;
...@@ -252,6 +249,7 @@ public: ...@@ -252,6 +249,7 @@ public:
/** Extends the used area of this sheet by the passed cell position. */ /** Extends the used area of this sheet by the passed cell position. */
void extendUsedArea( const ScAddress& rAddress ); void extendUsedArea( const ScAddress& rAddress );
/** Extends the used area of this sheet by the passed cell range. */ /** Extends the used area of this sheet by the passed cell range. */
void extendUsedArea( const ScRange& rRange );
void extendUsedArea( const css::table::CellRangeAddress& rRange ); void extendUsedArea( const css::table::CellRangeAddress& rRange );
/** Extends the shape bounding box by the position and size of the passed rectangle (in 1/100 mm). */ /** Extends the shape bounding box by the position and size of the passed rectangle (in 1/100 mm). */
void extendShapeBoundingBox( const css::awt::Rectangle& rShapeRect ); void extendShapeBoundingBox( const css::awt::Rectangle& rShapeRect );
......
...@@ -533,9 +533,14 @@ void ViewSettings::setSheetViewSettings( sal_Int16 nSheet, const SheetViewModelR ...@@ -533,9 +533,14 @@ void ViewSettings::setSheetViewSettings( sal_Int16 nSheet, const SheetViewModelR
maSheetProps[ nSheet ] = rProperties; maSheetProps[ nSheet ] = rProperties;
} }
void ViewSettings::setSheetUsedArea( const CellRangeAddress& rUsedArea ) void ViewSettings::setSheetUsedArea( const ScRange& rUsedArea )
{ {
maSheetUsedAreas[ rUsedArea.Sheet ] = rUsedArea; assert( rUsedArea.IsValid() );
assert( rUsedArea.aStart.Col() <= MAXCOLCOUNT );
assert( rUsedArea.aStart.Row() <= MAXROWCOUNT );
maSheetUsedAreas[ rUsedArea.aStart.Tab() ] = CellRangeAddress( rUsedArea.aStart.Tab(),
rUsedArea.aStart.Col(), rUsedArea.aStart.Row(),
rUsedArea.aEnd.Col(), rUsedArea.aEnd.Row() );
} }
void ViewSettings::finalizeImport() void ViewSettings::finalizeImport()
......
...@@ -133,7 +133,7 @@ public: ...@@ -133,7 +133,7 @@ public:
/** Sets the VBA project storage used to import VBA source code and forms. */ /** Sets the VBA project storage used to import VBA source code and forms. */
inline void setVbaProjectStorage( const StorageRef& rxVbaPrjStrg ) { mxVbaPrjStrg = rxVbaPrjStrg; } inline void setVbaProjectStorage( const StorageRef& rxVbaPrjStrg ) { mxVbaPrjStrg = rxVbaPrjStrg; }
/** Sets the index of the current Calc sheet, if filter currently processes a sheet. */ /** Sets the index of the current Calc sheet, if filter currently processes a sheet. */
inline void setCurrentSheetIndex( sal_Int16 nSheet ) { mnCurrSheet = nSheet; } inline void setCurrentSheetIndex( SCTAB nSheet ) { mnCurrSheet = nSheet; }
// document model --------------------------------------------------------- // document model ---------------------------------------------------------
...@@ -676,7 +676,7 @@ void WorkbookHelper::setVbaProjectStorage( const StorageRef& rxVbaPrjStrg ) ...@@ -676,7 +676,7 @@ void WorkbookHelper::setVbaProjectStorage( const StorageRef& rxVbaPrjStrg )
mrBookGlob.setVbaProjectStorage( rxVbaPrjStrg ); mrBookGlob.setVbaProjectStorage( rxVbaPrjStrg );
} }
void WorkbookHelper::setCurrentSheetIndex( sal_Int16 nSheet ) void WorkbookHelper::setCurrentSheetIndex( SCTAB nSheet )
{ {
mrBookGlob.setCurrentSheetIndex( nSheet ); mrBookGlob.setCurrentSheetIndex( nSheet );
} }
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include <com/sun/star/sheet/ValidationType.hpp> #include <com/sun/star/sheet/ValidationType.hpp>
#include <com/sun/star/sheet/ValidationAlertStyle.hpp> #include <com/sun/star/sheet/ValidationAlertStyle.hpp>
#include <com/sun/star/sheet/XCellAddressable.hpp> #include <com/sun/star/sheet/XCellAddressable.hpp>
#include <com/sun/star/sheet/XCellRangeAddressable.hpp>
#include <com/sun/star/sheet/XMultiFormulaTokens.hpp> #include <com/sun/star/sheet/XMultiFormulaTokens.hpp>
#include <com/sun/star/sheet/XSheetCellRangeContainer.hpp> #include <com/sun/star/sheet/XSheetCellRangeContainer.hpp>
#include <com/sun/star/sheet/XSheetCondition2.hpp> #include <com/sun/star/sheet/XSheetCondition2.hpp>
...@@ -216,7 +215,7 @@ public: ...@@ -216,7 +215,7 @@ public:
/** Returns the type of this sheet. */ /** Returns the type of this sheet. */
inline WorksheetType getSheetType() const { return meSheetType; } inline WorksheetType getSheetType() const { return meSheetType; }
/** Returns the index of the current sheet. */ /** Returns the index of the current sheet. */
inline sal_Int32 getSheetIndex() const { return maUsedArea.Sheet; } inline SCTAB getSheetIndex() const { return maUsedArea.aStart.Tab(); }
/** Returns the XSpreadsheet interface of the current sheet. */ /** Returns the XSpreadsheet interface of the current sheet. */
inline const Reference< XSpreadsheet >& getSheet() const { return mxSheet; } inline const Reference< XSpreadsheet >& getSheet() const { return mxSheet; }
...@@ -244,9 +243,9 @@ public: ...@@ -244,9 +243,9 @@ public:
awt::Size getCellSize( sal_Int32 nCol, sal_Int32 nRow ) const; awt::Size getCellSize( sal_Int32 nCol, sal_Int32 nRow ) const;
/** Returns the address of the cell that contains the passed point in 1/100 mm. */ /** Returns the address of the cell that contains the passed point in 1/100 mm. */
CellAddress getCellAddressFromPosition( const awt::Point& rPosition ) const; ScAddress getCellAddressFromPosition( const awt::Point& rPosition ) const;
/** Returns the cell range address that contains the passed rectangle in 1/100 mm. */ /** Returns the cell range address that contains the passed rectangle in 1/100 mm. */
CellRangeAddress getCellRangeFromRectangle( const awt::Rectangle& rRect ) const; ScRange getCellRangeFromRectangle( const awt::Rectangle& rRect ) const;
/** Returns the buffer for cell contents and cell formatting. */ /** Returns the buffer for cell contents and cell formatting. */
inline SheetDataBuffer& getSheetData() { return maSheetData; } inline SheetDataBuffer& getSheetData() { return maSheetData; }
...@@ -281,11 +280,10 @@ public: ...@@ -281,11 +280,10 @@ public:
void setVmlDrawingPath( const OUString& rVmlDrawingPath ); void setVmlDrawingPath( const OUString& rVmlDrawingPath );
/** Extends the used area of this sheet by the passed cell position. */ /** Extends the used area of this sheet by the passed cell position. */
void extendUsedArea( const CellAddress& rAddress );
void extendUsedArea( const ScAddress& rAddress ); void extendUsedArea( const ScAddress& rAddress );
/** Extends the used area of this sheet by the passed cell range. */ /** Extends the used area of this sheet by the passed cell range. */
void extendUsedArea( const CellRangeAddress& rRange ); void extendUsedArea( const ScRange& rRange );
/** Extends the shape bounding box by the position and size of the passed rectangle. */ /** Extends the shape bounding box by the position and size of the passed rectangle. */
void extendShapeBoundingBox( const awt::Rectangle& rShapeRect ); void extendShapeBoundingBox( const awt::Rectangle& rShapeRect );
...@@ -365,14 +363,14 @@ private: ...@@ -365,14 +363,14 @@ private:
void finalizeDrawings(); void finalizeDrawings();
/** Update the row import progress bar */ /** Update the row import progress bar */
void UpdateRowProgress( const CellRangeAddress& rUsedArea, sal_Int32 nRow ); void UpdateRowProgress( const ScRange& rUsedArea, SCROW nRow );
private: private:
typedef ::std::unique_ptr< VmlDrawing > VmlDrawingPtr; typedef ::std::unique_ptr< VmlDrawing > VmlDrawingPtr;
const OUString maSheetCellRanges; /// Service name for a SheetCellRanges object. const OUString maSheetCellRanges; /// Service name for a SheetCellRanges object.
const ScAddress& mrMaxApiPos; /// Reference to maximum Calc cell address from address converter. const ScAddress& mrMaxApiPos; /// Reference to maximum Calc cell address from address converter.
CellRangeAddress maUsedArea; /// Used area of the sheet, and sheet index of the sheet. ScRange maUsedArea; /// Used area of the sheet, and sheet index of the sheet.
ColumnModel maDefColModel; /// Default column formatting. ColumnModel maDefColModel; /// Default column formatting.
ColumnModelRangeMap maColModels; /// Ranges of columns sorted by first column index. ColumnModelRangeMap maColModels; /// Ranges of columns sorted by first column index.
RowModel maDefRowModel; /// Default row formatting. RowModel maDefRowModel; /// Default row formatting.
...@@ -406,7 +404,7 @@ WorksheetGlobals::WorksheetGlobals( const WorkbookHelper& rHelper, const ISegmen ...@@ -406,7 +404,7 @@ WorksheetGlobals::WorksheetGlobals( const WorkbookHelper& rHelper, const ISegmen
WorkbookHelper( rHelper ), WorkbookHelper( rHelper ),
maSheetCellRanges( "com.sun.star.sheet.SheetCellRanges" ), maSheetCellRanges( "com.sun.star.sheet.SheetCellRanges" ),
mrMaxApiPos( rHelper.getAddressConverter().getMaxApiAddress() ), mrMaxApiPos( rHelper.getAddressConverter().getMaxApiAddress() ),
maUsedArea( nSheet, SAL_MAX_INT32, SAL_MAX_INT32, -1, -1 ), maUsedArea( SCCOL_MAX, SCROW_MAX, nSheet, -1, -1, nSheet ), // Set start address to largest possible value, and End Addreess to smallest
maSheetData( *this ), maSheetData( *this ),
maCondFormats( *this ), maCondFormats( *this ),
maComments( *this ), maComments( *this ),
...@@ -422,7 +420,7 @@ WorksheetGlobals::WorksheetGlobals( const WorkbookHelper& rHelper, const ISegmen ...@@ -422,7 +420,7 @@ WorksheetGlobals::WorksheetGlobals( const WorkbookHelper& rHelper, const ISegmen
{ {
mxSheet = getSheetFromDoc( nSheet ); mxSheet = getSheetFromDoc( nSheet );
if( !mxSheet.is() ) if( !mxSheet.is() )
maUsedArea.Sheet = -1; maUsedArea.aStart.SetTab( -1 );
// default column settings (width and hidden state may be updated later) // default column settings (width and hidden state may be updated later)
maDefColModel.mfWidth = 8.5; maDefColModel.mfWidth = 8.5;
...@@ -640,7 +638,7 @@ bool lclUpdateInterval( sal_Int32& rnBegAddr, sal_Int32& rnMidAddr, sal_Int32& r ...@@ -640,7 +638,7 @@ bool lclUpdateInterval( sal_Int32& rnBegAddr, sal_Int32& rnMidAddr, sal_Int32& r
} // namespace } // namespace
CellAddress WorksheetGlobals::getCellAddressFromPosition( const awt::Point& rPosition ) const ScAddress WorksheetGlobals::getCellAddressFromPosition( const awt::Point& rPosition ) const
{ {
// starting cell address and its position in drawing layer (top-left edge) // starting cell address and its position in drawing layer (top-left edge)
sal_Int32 nBegCol = 0; sal_Int32 nBegCol = 0;
...@@ -673,27 +671,28 @@ CellAddress WorksheetGlobals::getCellAddressFromPosition( const awt::Point& rPos ...@@ -673,27 +671,28 @@ CellAddress WorksheetGlobals::getCellAddressFromPosition( const awt::Point& rPos
or the last column/row of the sheet has been reached. */ or the last column/row of the sheet has been reached. */
if( aMidPos.X > rPosition.X ) --nMidCol; if( aMidPos.X > rPosition.X ) --nMidCol;
if( aMidPos.Y > rPosition.Y ) --nMidRow; if( aMidPos.Y > rPosition.Y ) --nMidRow;
return CellAddress( getSheetIndex(), nMidCol, nMidRow ); return ScAddress( nMidCol, nMidRow, getSheetIndex() );
} }
CellRangeAddress WorksheetGlobals::getCellRangeFromRectangle( const awt::Rectangle& rRect ) const ScRange WorksheetGlobals::getCellRangeFromRectangle( const awt::Rectangle& rRect ) const
{ {
CellAddress aStartAddr = getCellAddressFromPosition( awt::Point( rRect.X, rRect.Y ) ); ScAddress aStartAddr = getCellAddressFromPosition( awt::Point( rRect.X, rRect.Y ) );
awt::Point aBotRight( rRect.X + rRect.Width, rRect.Y + rRect.Height ); awt::Point aBotRight( rRect.X + rRect.Width, rRect.Y + rRect.Height );
CellAddress aEndAddr = getCellAddressFromPosition( aBotRight ); ScAddress aEndAddr = getCellAddressFromPosition( aBotRight );
bool bMultiCols = aStartAddr.Column < aEndAddr.Column; bool bMultiCols = aStartAddr.Col() < aEndAddr.Col();
bool bMultiRows = aStartAddr.Row < aEndAddr.Row; bool bMultiRows = aStartAddr.Row() < aEndAddr.Row();
if( bMultiCols || bMultiRows ) if( bMultiCols || bMultiRows )
{ {
/* Reduce end position of the cell range to previous column or row, if /* Reduce end position of the cell range to previous column or row, if
the rectangle ends exactly between two columns or rows. */ the rectangle ends exactly between two columns or rows. */
awt::Point aEndPos = getCellPosition( aEndAddr.Column, aEndAddr.Row ); awt::Point aEndPos = getCellPosition( aEndAddr.Col(), aEndAddr.Row() );
if( bMultiCols && (aBotRight.X <= aEndPos.X) ) if( bMultiCols && (aBotRight.X <= aEndPos.X) )
--aEndAddr.Column; aEndAddr.SetCol( aEndAddr.Col() - 1 );
if( bMultiRows && (aBotRight.Y <= aEndPos.Y) ) if( bMultiRows && (aBotRight.Y <= aEndPos.Y) )
--aEndAddr.Row; aEndAddr.SetRow( aEndAddr.Row() - 1 );
} }
return CellRangeAddress( getSheetIndex(), aStartAddr.Column, aStartAddr.Row, aEndAddr.Column, aEndAddr.Row ); return ScRange( aStartAddr.Col(), aStartAddr.Row(), getSheetIndex(),
aEndAddr.Col(), aEndAddr.Row(), getSheetIndex() );
} }
void WorksheetGlobals::setPageBreak( const PageBreakModel& rModel, bool bRowBreak ) void WorksheetGlobals::setPageBreak( const PageBreakModel& rModel, bool bRowBreak )
...@@ -725,26 +724,24 @@ void WorksheetGlobals::setVmlDrawingPath( const OUString& rVmlDrawingPath ) ...@@ -725,26 +724,24 @@ void WorksheetGlobals::setVmlDrawingPath( const OUString& rVmlDrawingPath )
maVmlDrawingPath = rVmlDrawingPath; maVmlDrawingPath = rVmlDrawingPath;
} }
void WorksheetGlobals::extendUsedArea( const CellAddress& rAddress ) void WorksheetGlobals::extendUsedArea( const ScAddress& rAddress )
{ {
maUsedArea.StartColumn = ::std::min( maUsedArea.StartColumn, rAddress.Column ); maUsedArea.aStart.SetCol( ::std::min( maUsedArea.aStart.Col(), rAddress.Col() ) );
maUsedArea.StartRow = ::std::min( maUsedArea.StartRow, rAddress.Row ); maUsedArea.aStart.SetRow( ::std::min( maUsedArea.aStart.Row(), rAddress.Row() ) );
maUsedArea.EndColumn = ::std::max( maUsedArea.EndColumn, rAddress.Column ); maUsedArea.aEnd.SetCol( ::std::max( maUsedArea.aEnd.Col(), rAddress.Col() ) );
maUsedArea.EndRow = ::std::max( maUsedArea.EndRow, rAddress.Row ); maUsedArea.aEnd.SetRow( ::std::max( maUsedArea.aEnd.Row(), rAddress.Row() ) );
} }
void WorksheetGlobals::extendUsedArea( const ScAddress& rAddress ) void WorksheetGlobals::extendUsedArea( const ScRange& rRange )
{ {
maUsedArea.StartColumn = ::std::min( maUsedArea.StartColumn, sal_Int32( rAddress.Col() ) ); extendUsedArea( rRange.aStart );
maUsedArea.StartRow = ::std::min( maUsedArea.StartRow, sal_Int32( rAddress.Row() ) ); extendUsedArea( rRange.aEnd );
maUsedArea.EndColumn = ::std::max( maUsedArea.EndColumn, sal_Int32( rAddress.Col() ) );
maUsedArea.EndRow = ::std::max( maUsedArea.EndRow, sal_Int32( rAddress.Row() ) );
} }
void WorksheetGlobals::extendUsedArea( const CellRangeAddress& rRange ) void WorksheetHelper::extendUsedArea( const css::table::CellRangeAddress& rRange )
{ {
extendUsedArea( CellAddress( rRange.Sheet, rRange.StartColumn, rRange.StartRow ) ); extendUsedArea( ScAddress( rRange.StartColumn, rRange.StartRow, rRange.Sheet ) );
extendUsedArea( CellAddress( rRange.Sheet, rRange.EndColumn, rRange.EndRow ) ); extendUsedArea( ScAddress( rRange.EndColumn, rRange.EndRow, rRange.Sheet ) );
} }
void WorksheetGlobals::extendShapeBoundingBox( const awt::Rectangle& rShapeRect ) void WorksheetGlobals::extendShapeBoundingBox( const awt::Rectangle& rShapeRect )
...@@ -903,12 +900,12 @@ void WorksheetGlobals::setRowModel( const RowModel& rModel ) ...@@ -903,12 +900,12 @@ void WorksheetGlobals::setRowModel( const RowModel& rModel )
} }
// This is called at a higher frequency inside the (threaded) inner loop. // This is called at a higher frequency inside the (threaded) inner loop.
void WorksheetGlobals::UpdateRowProgress( const CellRangeAddress& rUsedArea, sal_Int32 nRow ) void WorksheetGlobals::UpdateRowProgress( const ScRange& rUsedArea, SCROW nRow )
{ {
if (!mxRowProgress || nRow < rUsedArea.StartRow || rUsedArea.EndRow < nRow) if (!mxRowProgress || nRow < rUsedArea.aStart.Row() || rUsedArea.aEnd.Row() < nRow)
return; return;
double fNewPos = static_cast<double>(nRow - rUsedArea.StartRow + 1.0) / (rUsedArea.EndRow - rUsedArea.StartRow + 1.0); double fNewPos = static_cast<double>(nRow - rUsedArea.aStart.Row() + 1.0) / (rUsedArea.aEnd.Row() - rUsedArea.aStart.Row() + 1.0);
if (mbFastRowProgress) if (mbFastRowProgress)
mxRowProgress->setPosition(fNewPos); mxRowProgress->setPosition(fNewPos);
...@@ -1359,10 +1356,17 @@ void WorksheetGlobals::finalizeDrawings() ...@@ -1359,10 +1356,17 @@ void WorksheetGlobals::finalizeDrawings()
extendUsedArea( getCellRangeFromRectangle( maShapeBoundingBox ) ); extendUsedArea( getCellRangeFromRectangle( maShapeBoundingBox ) );
// if no used area is set, default to A1 // if no used area is set, default to A1
if( maUsedArea.StartColumn > maUsedArea.EndColumn ) if( maUsedArea.aStart.Col() > maUsedArea.aEnd.Col() )
maUsedArea.StartColumn = maUsedArea.EndColumn = 0; {
if( maUsedArea.StartRow > maUsedArea.EndRow ) maUsedArea.aStart.SetCol( 0 );
maUsedArea.StartRow = maUsedArea.EndRow = 0; maUsedArea.aEnd.SetCol( 0 );
}
if( maUsedArea.aStart.Row() > maUsedArea.aEnd.Row() )
{
maUsedArea.aStart.SetRow( 0 );
maUsedArea.aEnd.SetRow( 0 );
}
/* Register the used area of this sheet in global view settings. The /* Register the used area of this sheet in global view settings. The
global view settings will set the visible area if this document is an global view settings will set the visible area if this document is an
...@@ -1403,7 +1407,7 @@ WorksheetType WorksheetHelper::getSheetType() const ...@@ -1403,7 +1407,7 @@ WorksheetType WorksheetHelper::getSheetType() const
return mrSheetGlob.getSheetType(); return mrSheetGlob.getSheetType();
} }
sal_Int32 WorksheetHelper::getSheetIndex() const SCTAB WorksheetHelper::getSheetIndex() const
{ {
return mrSheetGlob.getSheetIndex(); return mrSheetGlob.getSheetIndex();
} }
...@@ -1528,11 +1532,6 @@ void WorksheetHelper::extendUsedArea( const ScAddress& rAddress ) ...@@ -1528,11 +1532,6 @@ void WorksheetHelper::extendUsedArea( const ScAddress& rAddress )
mrSheetGlob.extendUsedArea( rAddress ); mrSheetGlob.extendUsedArea( rAddress );
} }
void WorksheetHelper::extendUsedArea( const CellRangeAddress& rRange )
{
mrSheetGlob.extendUsedArea( rRange );
}
void WorksheetHelper::extendShapeBoundingBox( const awt::Rectangle& rShapeRect ) void WorksheetHelper::extendShapeBoundingBox( const awt::Rectangle& rShapeRect )
{ {
mrSheetGlob.extendShapeBoundingBox( rShapeRect ); mrSheetGlob.extendShapeBoundingBox( rShapeRect );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment