diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2015-05-11 18:36:28 +0900 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2015-05-11 18:59:51 +0900 |
commit | f4147a39374c7692728e8506961f23e59a069c45 (patch) | |
tree | 9363f697eecdf37160cfbff9e1c0673c1caf255a /svtools | |
parent | f54212fb24a21401edd6593735898c9b42c09d0f (diff) |
refactor TableControl to use RenderContext
Change-Id: I4a84cdc8517b69b28fbb8521d0593ae5ed4c3a79
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/table/gridtablerenderer.cxx | 255 | ||||
-rw-r--r-- | svtools/source/table/tablecontrol_impl.cxx | 89 | ||||
-rw-r--r-- | svtools/source/table/tablecontrol_impl.hxx | 5 | ||||
-rw-r--r-- | svtools/source/table/tabledatawindow.cxx | 16 | ||||
-rw-r--r-- | svtools/source/table/tabledatawindow.hxx | 18 |
5 files changed, 169 insertions, 214 deletions
diff --git a/svtools/source/table/gridtablerenderer.cxx b/svtools/source/table/gridtablerenderer.cxx index d4b98433de3b..ee7600a5f85a 100644 --- a/svtools/source/table/gridtablerenderer.cxx +++ b/svtools/source/table/gridtablerenderer.cxx @@ -36,22 +36,20 @@ namespace svt { namespace table { - - - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::TypeClass_INTERFACE; - using ::com::sun::star::graphic::XGraphic; - using ::com::sun::star::style::HorizontalAlignment; - using ::com::sun::star::style::HorizontalAlignment_LEFT; - using ::com::sun::star::style::HorizontalAlignment_CENTER; - using ::com::sun::star::style::HorizontalAlignment_RIGHT; - using ::com::sun::star::style::VerticalAlignment; - using ::com::sun::star::style::VerticalAlignment_TOP; - using ::com::sun::star::style::VerticalAlignment_MIDDLE; - using ::com::sun::star::style::VerticalAlignment_BOTTOM; + using ::css::uno::Any; + using ::css::uno::Reference; + using ::css::uno::UNO_QUERY; + using ::css::uno::XInterface; + using ::css::uno::TypeClass_INTERFACE; + using ::css::graphic::XGraphic; + using ::css::style::HorizontalAlignment; + using ::css::style::HorizontalAlignment_LEFT; + using ::css::style::HorizontalAlignment_CENTER; + using ::css::style::HorizontalAlignment_RIGHT; + using ::css::style::VerticalAlignment; + using ::css::style::VerticalAlignment_TOP; + using ::css::style::VerticalAlignment_MIDDLE; + using ::css::style::VerticalAlignment_BOTTOM; //= CachedSortIndicator @@ -60,26 +58,26 @@ namespace svt { namespace table { public: CachedSortIndicator() - :m_lastHeaderHeight( 0 ) - ,m_lastArrowColor( COL_TRANSPARENT ) + : m_lastHeaderHeight( 0 ) + , m_lastArrowColor( COL_TRANSPARENT ) { } - BitmapEx const & getBitmapFor( OutputDevice const & i_device, long const i_headerHeight, StyleSettings const & i_style, bool const i_sortAscending ); + BitmapEx const & getBitmapFor(OutputDevice const & i_device, long const i_headerHeight, + StyleSettings const & i_style, bool const i_sortAscending); private: - long m_lastHeaderHeight; - Color m_lastArrowColor; - BitmapEx m_sortAscending; - BitmapEx m_sortDescending; + long m_lastHeaderHeight; + Color m_lastArrowColor; + BitmapEx m_sortAscending; + BitmapEx m_sortDescending; }; - - BitmapEx const & CachedSortIndicator::getBitmapFor( OutputDevice const & i_device, long const i_headerHeight, + BitmapEx const & CachedSortIndicator::getBitmapFor(vcl::RenderContext const& i_device, long const i_headerHeight, StyleSettings const & i_style, bool const i_sortAscending ) { - BitmapEx & rBitmap( i_sortAscending ? m_sortAscending : m_sortDescending ); - if ( !rBitmap || ( i_headerHeight != m_lastHeaderHeight ) || ( i_style.GetActiveColor() != m_lastArrowColor ) ) + BitmapEx& rBitmap(i_sortAscending ? m_sortAscending : m_sortDescending); + if (!rBitmap || (i_headerHeight != m_lastHeaderHeight) || (i_style.GetActiveColor() != m_lastArrowColor)) { long const nSortIndicatorWidth = 2 * i_headerHeight / 3; long const nSortIndicatorHeight = 2 * nSortIndicatorWidth / 3; @@ -89,14 +87,12 @@ namespace svt { namespace table ScopedVclPtrInstance< VirtualDevice > aDevice( i_device, 0, 0 ); aDevice->SetOutputSizePixel( aBitmapSize ); - DecorationView aDecoView( aDevice.get() ); - aDecoView.DrawSymbol( - Rectangle( aBitmapPos, aBitmapSize ), - i_sortAscending ? SymbolType::SPIN_UP : SymbolType::SPIN_DOWN, - i_style.GetActiveColor() - ); + DecorationView aDecoView(aDevice.get()); + aDecoView.DrawSymbol(Rectangle(aBitmapPos, aBitmapSize), + i_sortAscending ? SymbolType::SPIN_UP : SymbolType::SPIN_DOWN, + i_style.GetActiveColor()); - rBitmap = aDevice->GetBitmapEx( aBitmapPos, aBitmapSize ); + rBitmap = aDevice->GetBitmapEx(aBitmapPos, aBitmapSize); m_lastHeaderHeight = i_headerHeight; m_lastArrowColor = i_style.GetActiveColor(); } @@ -115,11 +111,11 @@ namespace svt { namespace table CellValueConversion aStringConverter; GridTableRenderer_Impl( ITableModel& _rModel ) - :rModel( _rModel ) - ,nCurrentRow( ROW_INVALID ) - ,bUseGridLines( true ) - ,aSortIndicator( ) - ,aStringConverter() + : rModel( _rModel ) + , nCurrentRow( ROW_INVALID ) + , bUseGridLines( true ) + , aSortIndicator( ) + , aStringConverter() { } }; @@ -205,51 +201,48 @@ namespace svt { namespace table namespace { - Color lcl_getEffectiveColor( - ::boost::optional< ::Color > const & i_modelColor, - StyleSettings const & i_styleSettings, - ::Color const & ( StyleSettings::*i_getDefaultColor ) () const - ) + Color lcl_getEffectiveColor(boost::optional<Color> const& i_modelColor, + StyleSettings const& i_styleSettings, + Color const& (StyleSettings::*i_getDefaultColor) () const) { - if ( !!i_modelColor ) + if (!!i_modelColor) return *i_modelColor; - return ( i_styleSettings.*i_getDefaultColor )(); + return (i_styleSettings.*i_getDefaultColor)(); } } - void GridTableRenderer::PaintHeaderArea( - OutputDevice& _rDevice, const Rectangle& _rArea, bool _bIsColHeaderArea, bool _bIsRowHeaderArea, - const StyleSettings& _rStyle ) + void GridTableRenderer::PaintHeaderArea(vcl::RenderContext& rRenderContext, const Rectangle& _rArea, + bool _bIsColHeaderArea, bool _bIsRowHeaderArea, const StyleSettings& _rStyle) { - OSL_PRECOND( _bIsColHeaderArea || _bIsRowHeaderArea, - "GridTableRenderer::PaintHeaderArea: invalid area flags!" ); + OSL_PRECOND(_bIsColHeaderArea || _bIsRowHeaderArea, "GridTableRenderer::PaintHeaderArea: invalid area flags!"); - _rDevice.Push( PushFlags::FILLCOLOR | PushFlags::LINECOLOR ); + rRenderContext.Push(PushFlags::FILLCOLOR | PushFlags::LINECOLOR); - Color const background = lcl_getEffectiveColor( m_pImpl->rModel.getHeaderBackgroundColor(), _rStyle, &StyleSettings::GetDialogColor ); - _rDevice.SetFillColor( background ); + Color const background = lcl_getEffectiveColor(m_pImpl->rModel.getHeaderBackgroundColor(), + _rStyle, &StyleSettings::GetDialogColor); + rRenderContext.SetFillColor(background); - _rDevice.SetLineColor(); - _rDevice.DrawRect( _rArea ); + rRenderContext.SetLineColor(); + rRenderContext.DrawRect(_rArea); // delimiter lines at bottom/right - ::boost::optional< ::Color > aLineColor( m_pImpl->rModel.getLineColor() ); - ::Color const lineColor = !aLineColor ? _rStyle.GetSeparatorColor() : *aLineColor; - _rDevice.SetLineColor( lineColor ); - _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); - _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() ); + boost::optional<Color> aLineColor(m_pImpl->rModel.getLineColor()); + Color const lineColor = !aLineColor ? _rStyle.GetSeparatorColor() : *aLineColor; + rRenderContext.SetLineColor(lineColor); + rRenderContext.DrawLine(_rArea.BottomLeft(), _rArea.BottomRight()); + rRenderContext.DrawLine(_rArea.BottomRight(), _rArea.TopRight()); - _rDevice.Pop(); + rRenderContext.Pop(); (void)_bIsColHeaderArea; (void)_bIsRowHeaderArea; } - void GridTableRenderer::PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected, - OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle ) + void GridTableRenderer::PaintColumnHeader(ColPos _nCol, bool _bActive, bool _bSelected, vcl::RenderContext& rRenderContext, + const Rectangle& _rArea, const StyleSettings& _rStyle) { - _rDevice.Push( PushFlags::LINECOLOR); + rRenderContext.Push(PushFlags::LINECOLOR); OUString sHeaderText; PColumnModel const pColumn = m_pImpl->rModel.getColumnModel( _nCol ); @@ -257,20 +250,20 @@ namespace svt { namespace table if ( !!pColumn ) sHeaderText = pColumn->getName(); - ::Color const textColor = lcl_getEffectiveColor( m_pImpl->rModel.getTextColor(), _rStyle, &StyleSettings::GetFieldTextColor ); - _rDevice.SetTextColor( textColor ); + Color const textColor = lcl_getEffectiveColor( m_pImpl->rModel.getTextColor(), _rStyle, &StyleSettings::GetFieldTextColor ); + rRenderContext.SetTextColor(textColor); Rectangle const aTextRect( lcl_getTextRenderingArea( lcl_getContentArea( *m_pImpl, _rArea ) ) ); sal_uLong nDrawTextFlags = lcl_getAlignmentTextDrawFlags( *m_pImpl, _nCol ) | TEXT_DRAW_CLIP; - if ( !m_pImpl->rModel.isEnabled() ) + if (!m_pImpl->rModel.isEnabled()) nDrawTextFlags |= TEXT_DRAW_DISABLE; - _rDevice.DrawText( aTextRect, sHeaderText, nDrawTextFlags ); + rRenderContext.DrawText( aTextRect, sHeaderText, nDrawTextFlags ); - ::boost::optional< ::Color > const aLineColor( m_pImpl->rModel.getLineColor() ); - ::Color const lineColor = !aLineColor ? _rStyle.GetSeparatorColor() : *aLineColor; - _rDevice.SetLineColor( lineColor ); - _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight()); - _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); + boost::optional<Color> const aLineColor( m_pImpl->rModel.getLineColor() ); + Color const lineColor = !aLineColor ? _rStyle.GetSeparatorColor() : *aLineColor; + rRenderContext.SetLineColor( lineColor ); + rRenderContext.DrawLine( _rArea.BottomRight(), _rArea.TopRight()); + rRenderContext.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); // draw sort indicator if the model data is sorted by the given column ITableDataSort const * pSortAdapter = m_pImpl->rModel.getSortAdapter(); @@ -280,8 +273,8 @@ namespace svt { namespace table if ( aCurrentSortOrder.nColumnPos == _nCol ) { long const nHeaderHeight( _rArea.GetHeight() ); - BitmapEx const aIndicatorBitmap = m_pImpl->aSortIndicator.getBitmapFor( _rDevice, nHeaderHeight, _rStyle, - aCurrentSortOrder.eSortDirection == ColumnSortAscending ); + BitmapEx const aIndicatorBitmap = m_pImpl->aSortIndicator.getBitmapFor(rRenderContext, nHeaderHeight, _rStyle, + aCurrentSortOrder.eSortDirection == ColumnSortAscending); Size const aBitmapSize( aIndicatorBitmap.GetSizePixel() ); long const nSortIndicatorPaddingX = 2; long const nSortIndicatorPaddingY = ( nHeaderHeight - aBitmapSize.Height() ) / 2; @@ -289,22 +282,18 @@ namespace svt { namespace table if ( ( nDrawTextFlags & TEXT_DRAW_RIGHT ) != 0 ) { // text is right aligned => draw the sort indicator at the left hand side - _rDevice.DrawBitmapEx( - Point( _rArea.Left() + nSortIndicatorPaddingX, _rArea.Top() + nSortIndicatorPaddingY ), - aIndicatorBitmap - ); + rRenderContext.DrawBitmapEx(Point(_rArea.Left() + nSortIndicatorPaddingX, _rArea.Top() + nSortIndicatorPaddingY), + aIndicatorBitmap); } else { // text is left-aligned or centered => draw the sort indicator at the right hand side - _rDevice.DrawBitmapEx( - Point( _rArea.Right() - nSortIndicatorPaddingX - aBitmapSize.Width(), nSortIndicatorPaddingY ), - aIndicatorBitmap - ); + rRenderContext.DrawBitmapEx(Point(_rArea.Right() - nSortIndicatorPaddingX - aBitmapSize.Width(), nSortIndicatorPaddingY), + aIndicatorBitmap); } } - _rDevice.Pop(); + rRenderContext.Pop(); (void)_bActive; // no special painting for the active column at the moment @@ -314,38 +303,38 @@ namespace svt { namespace table } - void GridTableRenderer::PrepareRow( RowPos _nRow, bool i_hasControlFocus, bool _bSelected, - OutputDevice& _rDevice, const Rectangle& _rRowArea, const StyleSettings& _rStyle ) + void GridTableRenderer::PrepareRow(RowPos _nRow, bool i_hasControlFocus, bool _bSelected, vcl::RenderContext& rRenderContext, + const Rectangle& _rRowArea, const StyleSettings& _rStyle) { // remember the row for subsequent calls to the other ->ITableRenderer methods m_pImpl->nCurrentRow = _nRow; - _rDevice.Push( PushFlags::FILLCOLOR | PushFlags::LINECOLOR); + rRenderContext.Push(PushFlags::FILLCOLOR | PushFlags::LINECOLOR); - ::Color backgroundColor = _rStyle.GetFieldColor(); + Color backgroundColor = _rStyle.GetFieldColor(); - ::boost::optional< ::Color > const aLineColor( m_pImpl->rModel.getLineColor() ); - ::Color lineColor = !aLineColor ? _rStyle.GetSeparatorColor() : *aLineColor; + boost::optional<Color> const aLineColor( m_pImpl->rModel.getLineColor() ); + Color lineColor = !aLineColor ? _rStyle.GetSeparatorColor() : *aLineColor; - ::Color const activeSelectionBackColor = - lcl_getEffectiveColor( m_pImpl->rModel.getActiveSelectionBackColor(), _rStyle, &StyleSettings::GetHighlightColor ); - if ( _bSelected ) + Color const activeSelectionBackColor = lcl_getEffectiveColor(m_pImpl->rModel.getActiveSelectionBackColor(), + _rStyle, &StyleSettings::GetHighlightColor); + if (_bSelected) { // selected rows use the background color from the style backgroundColor = i_hasControlFocus - ? activeSelectionBackColor - : lcl_getEffectiveColor( m_pImpl->rModel.getInactiveSelectionBackColor(), _rStyle, &StyleSettings::GetDeactiveColor ); - if ( !aLineColor ) + ? activeSelectionBackColor + : lcl_getEffectiveColor(m_pImpl->rModel.getInactiveSelectionBackColor(), _rStyle, &StyleSettings::GetDeactiveColor); + if (!aLineColor) lineColor = backgroundColor; } else { - ::boost::optional< ::std::vector< ::Color > > aRowColors = m_pImpl->rModel.getRowBackgroundColors(); - if ( !aRowColors ) + boost::optional< std::vector<Color> > aRowColors = m_pImpl->rModel.getRowBackgroundColors(); + if (!aRowColors) { // use alternating default colors Color const fieldColor = _rStyle.GetFieldColor(); - if ( _rStyle.GetHighContrastMode() || ( ( m_pImpl->nCurrentRow % 2 ) == 0 ) ) + if (_rStyle.GetHighContrastMode() || ((m_pImpl->nCurrentRow % 2) == 0)) { backgroundColor = fieldColor; } @@ -360,55 +349,53 @@ namespace svt { namespace table } else { - if ( aRowColors->empty() ) + if (aRowColors->empty()) { // all colors have the same background color backgroundColor = _rStyle.GetFieldColor(); } else { - backgroundColor = aRowColors->at( m_pImpl->nCurrentRow % aRowColors->size() ); + backgroundColor = aRowColors->at(m_pImpl->nCurrentRow % aRowColors->size()); } } } - //m_pImpl->bUseGridLines ? _rDevice.SetLineColor( lineColor ) : _rDevice.SetLineColor(); - _rDevice.SetLineColor(); - _rDevice.SetFillColor( backgroundColor ); - _rDevice.DrawRect( _rRowArea ); + rRenderContext.SetLineColor(); + rRenderContext.SetFillColor(backgroundColor); + rRenderContext.DrawRect(_rRowArea); - _rDevice.Pop(); + rRenderContext.Pop(); } - void GridTableRenderer::PaintRowHeader( bool i_hasControlFocus, bool _bSelected, OutputDevice& _rDevice, const Rectangle& _rArea, - const StyleSettings& _rStyle ) + void GridTableRenderer::PaintRowHeader(bool /*i_hasControlFocus*/, bool /*_bSelected*/, vcl::RenderContext& rRenderContext, + const Rectangle& _rArea, const StyleSettings& _rStyle) { - _rDevice.Push( PushFlags::LINECOLOR | PushFlags::TEXTCOLOR ); + rRenderContext.Push( PushFlags::LINECOLOR | PushFlags::TEXTCOLOR ); - ::boost::optional< ::Color > const aLineColor( m_pImpl->rModel.getLineColor() ); - ::Color const lineColor = !aLineColor ? _rStyle.GetSeparatorColor() : *aLineColor; - _rDevice.SetLineColor( lineColor ); - _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); + boost::optional<Color> const aLineColor( m_pImpl->rModel.getLineColor() ); + Color const lineColor = !aLineColor ? _rStyle.GetSeparatorColor() : *aLineColor; + rRenderContext.SetLineColor(lineColor); + rRenderContext.DrawLine(_rArea.BottomLeft(), _rArea.BottomRight()); Any const rowHeading( m_pImpl->rModel.getRowHeading( m_pImpl->nCurrentRow ) ); OUString const rowTitle( m_pImpl->aStringConverter.convertToString( rowHeading ) ); - if ( !rowTitle.isEmpty() ) + if (!rowTitle.isEmpty()) { - ::Color const textColor = lcl_getEffectiveColor( m_pImpl->rModel.getHeaderTextColor(), _rStyle, &StyleSettings::GetFieldTextColor ); - _rDevice.SetTextColor( textColor ); + Color const textColor = lcl_getEffectiveColor(m_pImpl->rModel.getHeaderTextColor(), + _rStyle, &StyleSettings::GetFieldTextColor); + rRenderContext.SetTextColor(textColor); - Rectangle const aTextRect( lcl_getTextRenderingArea( lcl_getContentArea( *m_pImpl, _rArea ) ) ); - sal_uLong nDrawTextFlags = lcl_getAlignmentTextDrawFlags( *m_pImpl, 0 ) | TEXT_DRAW_CLIP; - if ( !m_pImpl->rModel.isEnabled() ) + Rectangle const aTextRect(lcl_getTextRenderingArea(lcl_getContentArea(*m_pImpl, _rArea))); + sal_uLong nDrawTextFlags = lcl_getAlignmentTextDrawFlags(*m_pImpl, 0) | TEXT_DRAW_CLIP; + if (!m_pImpl->rModel.isEnabled()) nDrawTextFlags |= TEXT_DRAW_DISABLE; // TODO: is using the horizontal alignment of the 0'th column a good idea here? This is pretty ... arbitray .. - _rDevice.DrawText( aTextRect, rowTitle, nDrawTextFlags ); + rRenderContext.DrawText(aTextRect, rowTitle, nDrawTextFlags); } - (void)i_hasControlFocus; - (void)_bSelected; - _rDevice.Pop(); + rRenderContext.Pop(); } @@ -434,14 +421,14 @@ namespace svt { namespace table }; - void GridTableRenderer::PaintCell( ColPos const i_column, bool _bSelected, bool i_hasControlFocus, - OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle ) + void GridTableRenderer::PaintCell(ColPos const i_column, bool _bSelected, bool i_hasControlFocus, + vcl::RenderContext& rRenderContext, const Rectangle& _rArea, const StyleSettings& _rStyle) { - _rDevice.Push( PushFlags::LINECOLOR | PushFlags::FILLCOLOR ); + rRenderContext.Push(PushFlags::LINECOLOR | PushFlags::FILLCOLOR); - Rectangle const aContentArea( lcl_getContentArea( *m_pImpl, _rArea ) ); - CellRenderContext const aRenderContext( _rDevice, aContentArea, _rStyle, i_column, _bSelected, i_hasControlFocus ); - impl_paintCellContent( aRenderContext ); + Rectangle const aContentArea(lcl_getContentArea(*m_pImpl, _rArea)); + CellRenderContext const aCellRenderContext(rRenderContext, aContentArea, _rStyle, i_column, _bSelected, i_hasControlFocus); + impl_paintCellContent(aCellRenderContext); if ( m_pImpl->bUseGridLines ) { @@ -456,12 +443,12 @@ namespace svt { namespace table : lcl_getEffectiveColor( m_pImpl->rModel.getInactiveSelectionBackColor(), _rStyle, &StyleSettings::GetDeactiveColor ); } - _rDevice.SetLineColor( lineColor ); - _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); - _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() ); + rRenderContext.SetLineColor( lineColor ); + rRenderContext.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); + rRenderContext.DrawLine( _rArea.BottomRight(), _rArea.TopRight() ); } - _rDevice.Pop(); + rRenderContext.Pop(); } diff --git a/svtools/source/table/tablecontrol_impl.cxx b/svtools/source/table/tablecontrol_impl.cxx index 1d111466647a..4842dc748e33 100644 --- a/svtools/source/table/tablecontrol_impl.cxx +++ b/svtools/source/table/tablecontrol_impl.cxx @@ -1197,124 +1197,103 @@ namespace svt { namespace table } - void TableControl_Impl::doPaintContent( const Rectangle& _rUpdateRect ) + void TableControl_Impl::doPaintContent(vcl::RenderContext& rRenderContext, const Rectangle& _rUpdateRect) { - if ( !getModel() ) + if (!getModel()) return; PTableRenderer pRenderer = getModel()->getRenderer(); - DBG_ASSERT( !!pRenderer, "TableDataWindow::doPaintContent: invalid renderer!" ); - if ( !pRenderer ) + DBG_ASSERT(!!pRenderer, "TableDataWindow::doPaintContent: invalid renderer!"); + if (!pRenderer) return; // our current style settings, to be passed to the renderer - const StyleSettings& rStyle = m_rAntiImpl.GetSettings().GetStyleSettings(); + const StyleSettings& rStyle = rRenderContext.GetSettings().GetStyleSettings(); m_nRowCount = m_pModel->getRowCount(); // the area occupied by all (at least partially) visible cells, including // headers Rectangle const aAllCellsWithHeaders( impl_getAllVisibleCellsArea() ); - // draw the header column area - if ( m_pModel->hasColumnHeaders() ) + if (m_pModel->hasColumnHeaders()) { - TableRowGeometry const aHeaderRow( *this, Rectangle( Point( 0, 0 ), - aAllCellsWithHeaders.BottomRight() ), ROW_COL_HEADERS ); + TableRowGeometry const aHeaderRow(*this, Rectangle(Point(0, 0), aAllCellsWithHeaders.BottomRight()), ROW_COL_HEADERS); Rectangle const aColRect(aHeaderRow.getRect()); - pRenderer->PaintHeaderArea( - *m_pDataWindow, aColRect, true, false, rStyle - ); + pRenderer->PaintHeaderArea(rRenderContext, aColRect, true, false, rStyle); // Note that strictly, aHeaderRow.getRect() also contains the intersection between column // and row header area. However, below we go to paint this intersection, again, // so this hopefully doesn't hurt if we already paint it here. - for ( TableCellGeometry aCell( aHeaderRow, m_nLeftColumn ); - aCell.isValid(); - aCell.moveRight() - ) + for (TableCellGeometry aCell(aHeaderRow, m_nLeftColumn); aCell.isValid(); aCell.moveRight()) { - if ( _rUpdateRect.GetIntersection( aCell.getRect() ).IsEmpty() ) + if (_rUpdateRect.GetIntersection(aCell.getRect()).IsEmpty()) continue; - bool isActiveColumn = ( aCell.getColumn() == getCurrentColumn() ); + bool isActiveColumn = (aCell.getColumn() == getCurrentColumn()); bool isSelectedColumn = false; - pRenderer->PaintColumnHeader( aCell.getColumn(), isActiveColumn, isSelectedColumn, - *m_pDataWindow, aCell.getRect(), rStyle ); + pRenderer->PaintColumnHeader(aCell.getColumn(), isActiveColumn, isSelectedColumn, rRenderContext, aCell.getRect(), rStyle); } } // the area occupied by the row header, if any Rectangle aRowHeaderArea; - if ( m_pModel->hasRowHeaders() ) + if (m_pModel->hasRowHeaders()) { aRowHeaderArea = aAllCellsWithHeaders; aRowHeaderArea.Right() = m_nRowHeaderWidthPixel - 1; - TableSize const nVisibleRows = impl_getVisibleRows( true ); + TableSize const nVisibleRows = impl_getVisibleRows(true); TableSize nActualRows = nVisibleRows; - if ( m_nTopRow + nActualRows > m_nRowCount ) + if (m_nTopRow + nActualRows > m_nRowCount) nActualRows = m_nRowCount - m_nTopRow; aRowHeaderArea.Bottom() = m_nColHeaderHeightPixel + m_nRowHeightPixel * nActualRows - 1; - pRenderer->PaintHeaderArea( *m_pDataWindow, aRowHeaderArea, false, true, rStyle ); + pRenderer->PaintHeaderArea(rRenderContext, aRowHeaderArea, false, true, rStyle); // Note that strictly, aRowHeaderArea also contains the intersection between column // and row header area. However, below we go to paint this intersection, again, // so this hopefully doesn't hurt if we already paint it here. - if ( m_pModel->hasColumnHeaders() ) + if (m_pModel->hasColumnHeaders()) { - TableCellGeometry const aIntersection( *this, Rectangle( Point( 0, 0 ), - aAllCellsWithHeaders.BottomRight() ), COL_ROW_HEADERS, ROW_COL_HEADERS ); - Rectangle const aInters( aIntersection.getRect() ); - pRenderer->PaintHeaderArea( - *m_pDataWindow, aInters, true, true, rStyle - ); + TableCellGeometry const aIntersection(*this, Rectangle(Point(0, 0), aAllCellsWithHeaders.BottomRight()), + COL_ROW_HEADERS, ROW_COL_HEADERS); + Rectangle const aInters(aIntersection.getRect()); + pRenderer->PaintHeaderArea(rRenderContext, aInters, true, true, rStyle); } } - // draw the table content row by row - TableSize colCount = getModel()->getColumnCount(); // paint all rows - Rectangle const aAllDataCellsArea( impl_getAllVisibleDataCellArea() ); - for ( TableRowGeometry aRowIterator( *this, aAllCellsWithHeaders, getTopRow() ); - aRowIterator.isValid(); - aRowIterator.moveDown() ) + Rectangle const aAllDataCellsArea(impl_getAllVisibleDataCellArea()); + for (TableRowGeometry aRowIterator(*this, aAllCellsWithHeaders, getTopRow()); aRowIterator.isValid(); aRowIterator.moveDown()) { - if ( _rUpdateRect.GetIntersection( aRowIterator.getRect() ).IsEmpty() ) + if (_rUpdateRect.GetIntersection(aRowIterator.getRect() ).IsEmpty()) continue; bool const isControlFocused = m_rAntiImpl.HasControlFocus(); - bool const isSelectedRow = isRowSelected( aRowIterator.getRow() ); + bool const isSelectedRow = isRowSelected(aRowIterator.getRow()); - Rectangle const aRect = aRowIterator.getRect().GetIntersection( aAllDataCellsArea ); + Rectangle const aRect = aRowIterator.getRect().GetIntersection(aAllDataCellsArea); // give the redenderer a chance to prepare the row - pRenderer->PrepareRow( - aRowIterator.getRow(), isControlFocused, isSelectedRow, - *m_pDataWindow, aRect, rStyle - ); + pRenderer->PrepareRow(aRowIterator.getRow(), isControlFocused, isSelectedRow, rRenderContext, aRect, rStyle); // paint the row header - if ( m_pModel->hasRowHeaders() ) + if (m_pModel->hasRowHeaders()) { - const Rectangle aCurrentRowHeader( aRowHeaderArea.GetIntersection( aRowIterator.getRect() ) ); - pRenderer->PaintRowHeader( isControlFocused, isSelectedRow, *m_pDataWindow, aCurrentRowHeader, - rStyle ); + const Rectangle aCurrentRowHeader(aRowHeaderArea.GetIntersection(aRowIterator.getRect())); + pRenderer->PaintRowHeader(isControlFocused, isSelectedRow, rRenderContext, aCurrentRowHeader, rStyle); } - if ( !colCount ) + if (!colCount) continue; // paint all cells in this row - for ( TableCellGeometry aCell( aRowIterator, m_nLeftColumn ); - aCell.isValid(); - aCell.moveRight() - ) + for (TableCellGeometry aCell(aRowIterator, m_nLeftColumn); aCell.isValid(); aCell.moveRight()) { bool isSelectedColumn = false; - pRenderer->PaintCell( aCell.getColumn(), isSelectedRow || isSelectedColumn, isControlFocused, - *m_pDataWindow, aCell.getRect(), rStyle ); + pRenderer->PaintCell(aCell.getColumn(), isSelectedRow || isSelectedColumn, isControlFocused, + rRenderContext, aCell.getRect(), rStyle); } } } diff --git a/svtools/source/table/tablecontrol_impl.hxx b/svtools/source/table/tablecontrol_impl.hxx index 5f7dac675e0f..feadf1c36335 100644 --- a/svtools/source/table/tablecontrol_impl.hxx +++ b/svtools/source/table/tablecontrol_impl.hxx @@ -34,11 +34,8 @@ class ScrollBar; class ScrollBarBox; - namespace svt { namespace table { - - struct MutableColumnMetrics : protected ColumnMetrics { MutableColumnMetrics() @@ -170,7 +167,7 @@ namespace svt { namespace table /** paints the table control content which intersects with the given rectangle */ - void doPaintContent( const Rectangle& _rUpdateRect ); + void doPaintContent(vcl::RenderContext& rRenderContext, const Rectangle& _rUpdateRect); /** moves the cursor to the cell with the given coordinates diff --git a/svtools/source/table/tabledatawindow.cxx b/svtools/source/table/tabledatawindow.cxx index fad922d5baef..8691b326a0ca 100644 --- a/svtools/source/table/tabledatawindow.cxx +++ b/svtools/source/table/tabledatawindow.cxx @@ -17,7 +17,6 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ - #include "table/tablecontrol.hxx" #include "tabledatawindow.hxx" @@ -27,16 +26,9 @@ #include <vcl/help.hxx> #include <vcl/settings.hxx> - namespace svt { namespace table { - - - using ::com::sun::star::uno::Any; - - - //= TableDataWindow - + using css::uno::Any; TableDataWindow::TableDataWindow( TableControl_Impl& _rTableControl ) :Window( &_rTableControl.getAntiImpl() ) @@ -60,9 +52,9 @@ namespace svt { namespace table Window::dispose(); } - void TableDataWindow::Paint( vcl::RenderContext& /*rRenderContext*/, const Rectangle& rUpdateRect ) + void TableDataWindow::Paint( vcl::RenderContext& rRenderContext, const Rectangle& rUpdateRect ) { - m_rTableControl.doPaintContent( rUpdateRect ); + m_rTableControl.doPaintContent(rRenderContext, rUpdateRect); } void TableDataWindow::SetBackground( const Wallpaper& rColor ) @@ -221,7 +213,7 @@ namespace svt { namespace table return nDone || Window::Notify( rNEvt ); } -} } // namespace svt::table +}} // namespace svt::table /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svtools/source/table/tabledatawindow.hxx b/svtools/source/table/tabledatawindow.hxx index 34a1a93a09b2..36e05872adee 100644 --- a/svtools/source/table/tabledatawindow.hxx +++ b/svtools/source/table/tabledatawindow.hxx @@ -26,15 +26,9 @@ namespace svt { namespace table { - - class TableControl_Impl; class TableFunctionSet; - - - //= TableDataWindow - /** the window containing the content area (including headers) of a table control */ @@ -51,11 +45,17 @@ namespace svt { namespace table virtual ~TableDataWindow(); virtual void dispose() SAL_OVERRIDE; - inline void SetSelectHdl( const Link<>& rLink ) { m_aSelectHdl = rLink; } - inline const Link<>& GetSelectHdl() const { return m_aSelectHdl; } + inline void SetSelectHdl(const Link<>& rLink) + { + m_aSelectHdl = rLink; + } + inline const Link<>& GetSelectHdl() const + { + return m_aSelectHdl; + } // Window overridables - virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE; + virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle& rRect) SAL_OVERRIDE; virtual void MouseMove( const MouseEvent& rMEvt) SAL_OVERRIDE; virtual void MouseButtonDown( const MouseEvent& rMEvt) SAL_OVERRIDE; virtual void MouseButtonUp( const MouseEvent& rMEvt) SAL_OVERRIDE; |