convert FixedText to use RenderContext when painting

Change-Id: If4c3265f76987d9f59388d3c12441ccb2b03a308
diff --git a/vcl/source/control/fixed.cxx b/vcl/source/control/fixed.cxx
index 7b42fee..58c6fb4 100644
--- a/vcl/source/control/fixed.cxx
+++ b/vcl/source/control/fixed.cxx
@@ -188,16 +188,15 @@ sal_uInt16 FixedText::ImplGetTextStyle( WinBits nWinStyle )
    return nTextStyle;
}

void FixedText::ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
                          const Point& rPos, const Size& rSize,
                          bool bFillLayout
                          ) const
void FixedText::ImplDraw(OutputDevice* pDev, sal_uLong nDrawFlags,
                         const Point& rPos, const Size& rSize,
                         bool bFillLayout) const
{
    const StyleSettings&    rStyleSettings = GetSettings().GetStyleSettings();
    WinBits                 nWinStyle = GetStyle();
    OUString           aText( GetText() );
    sal_uInt16              nTextStyle = FixedText::ImplGetTextStyle( nWinStyle );
    Point                   aPos = rPos;
    const StyleSettings& rStyleSettings = pDev->GetSettings().GetStyleSettings();
    WinBits nWinStyle = GetStyle();
    OUString aText(GetText());
    sal_uInt16 nTextStyle = FixedText::ImplGetTextStyle( nWinStyle );
    Point aPos = rPos;

    if ( nWinStyle & WB_EXTRAOFFSET )
        aPos.X() += 2;
@@ -228,10 +227,9 @@ void FixedText::ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
        (mpControlData->mpLayoutData->m_aDisplayText).clear();

    Rectangle aRect( Rectangle( aPos, rSize ) );
    DrawControlText( *pDev, aRect, aText, nTextStyle,
    DrawControlText(*pDev, aRect, aText, nTextStyle,
        bFillLayout ? &mpControlData->mpLayoutData->m_aUnicodeBoundRects : NULL,
        bFillLayout ? &mpControlData->mpLayoutData->m_aDisplayText : NULL
    );
        bFillLayout ? &mpControlData->mpLayoutData->m_aDisplayText : NULL);
}

void FixedText::Paint( vcl::RenderContext& rRenderContext, const Rectangle& )
@@ -543,75 +541,75 @@ void FixedLine::ImplInitSettings( bool bFont,
    }
}

void FixedLine::ImplDraw(vcl::RenderContext& /*rRenderContext*/, bool bLayout)
void FixedLine::ImplDraw(vcl::RenderContext& rRenderContext, bool bLayout)
{
    Size                    aOutSize = GetOutputSizePixel();
    OUString                aText = GetText();
    WinBits                 nWinStyle = GetStyle();
    MetricVector*           pVector = bLayout ? &mpControlData->mpLayoutData->m_aUnicodeBoundRects : NULL;
    OUString*               pDisplayText = bLayout ? &mpControlData->mpLayoutData->m_aDisplayText : NULL;
    Size aOutSize = rRenderContext.GetOutputSizePixel();
    OUString aText = GetText();
    WinBits nWinStyle = GetStyle();
    MetricVector* pVector = bLayout ? &mpControlData->mpLayoutData->m_aUnicodeBoundRects : NULL;
    OUString* pDisplayText = bLayout ? &mpControlData->mpLayoutData->m_aDisplayText : NULL;

    DecorationView aDecoView( this );
    if ( aText.isEmpty() )
    DecorationView aDecoView(&rRenderContext);
    if (aText.isEmpty())
    {
        if( !pVector )
        if (!pVector)
        {
            if ( nWinStyle & WB_VERT )
            if (nWinStyle & WB_VERT)
            {
                long nX = (aOutSize.Width()-1)/2;
                aDecoView.DrawSeparator( Point( nX, 0 ), Point( nX, aOutSize.Height()-1 ) );
                long nX = (aOutSize.Width() - 1) / 2;
                aDecoView.DrawSeparator(Point(nX, 0), Point(nX, aOutSize.Height() - 1));
            }
            else
            {
                long nY = (aOutSize.Height()-1)/2;
                aDecoView.DrawSeparator( Point( 0, nY ), Point( aOutSize.Width()-1, nY ), false );
                long nY = (aOutSize.Height() - 1) / 2;
                aDecoView.DrawSeparator(Point(0, nY), Point(aOutSize.Width() - 1, nY), false);
            }
        }
    }
    else if( (nWinStyle & WB_VERT) )
    else if (nWinStyle & WB_VERT)
    {
        long nWidth = GetTextWidth( aText );
        Push( PushFlags::FONT );
        vcl::Font aFont( GetFont() );
        aFont.SetOrientation( 900 );
        SetFont( aFont );
        Point aStartPt( aOutSize.Width()/2, aOutSize.Height()-1 );
        if( (nWinStyle & WB_VCENTER) )
            aStartPt.Y() -= (aOutSize.Height() - nWidth)/2;
        Point aTextPt( aStartPt );
        aTextPt.X() -= GetTextHeight()/2;
        DrawText( aTextPt, aText, 0, aText.getLength(), pVector, pDisplayText );
        Pop();
        if( aOutSize.Height() - aStartPt.Y() > FIXEDLINE_TEXT_BORDER )
            aDecoView.DrawSeparator( Point( aStartPt.X(), aOutSize.Height()-1 ),
                                     Point( aStartPt.X(), aStartPt.Y() + FIXEDLINE_TEXT_BORDER ) );
        if( aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER > 0 )
            aDecoView.DrawSeparator( Point( aStartPt.X(), aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER ),
                                     Point( aStartPt.X(), 0 ) );
        long nWidth = rRenderContext.GetTextWidth(aText);
        rRenderContext.Push(PushFlags::FONT);
        vcl::Font aFont(rRenderContext.GetFont());
        aFont.SetOrientation(00);
        SetFont(aFont);
        Point aStartPt(aOutSize.Width() / 2, aOutSize.Height() - 1);
        if (nWinStyle & WB_VCENTER)
            aStartPt.Y() -= (aOutSize.Height() - nWidth) / 2;
        Point aTextPt(aStartPt);
        aTextPt.X() -= GetTextHeight() / 2;
        rRenderContext.DrawText(aTextPt, aText, 0, aText.getLength(), pVector, pDisplayText);
        rRenderContext.Pop();
        if (aOutSize.Height() - aStartPt.Y() > FIXEDLINE_TEXT_BORDER)
            aDecoView.DrawSeparator(Point(aStartPt.X(), aOutSize.Height() - 1),
                                    Point(aStartPt.X(), aStartPt.Y() + FIXEDLINE_TEXT_BORDER));
        if (aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER > 0)
            aDecoView.DrawSeparator(Point(aStartPt.X(), aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER),
                                    Point(aStartPt.X(), 0));
    }
    else
    {
        sal_uInt16      nStyle = TEXT_DRAW_MNEMONIC | TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER | TEXT_DRAW_ENDELLIPSIS;
        Rectangle   aRect( 0, 0, aOutSize.Width(), aOutSize.Height() );
        const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
        if( (nWinStyle & WB_CENTER) )
        sal_uInt16 nStyle = TEXT_DRAW_MNEMONIC | TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER | TEXT_DRAW_ENDELLIPSIS;
        Rectangle aRect(0, 0, aOutSize.Width(), aOutSize.Height());
        const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
        if (nWinStyle & WB_CENTER)
            nStyle |= TEXT_DRAW_CENTER;

        if ( !IsEnabled() )
        if (!IsEnabled())
            nStyle |= TEXT_DRAW_DISABLE;
        if ( GetStyle() & WB_NOLABEL )
        if (GetStyle() & WB_NOLABEL)
            nStyle &= ~TEXT_DRAW_MNEMONIC;
        if ( rStyleSettings.GetOptions() & STYLE_OPTION_MONO )
        if (rStyleSettings.GetOptions() & STYLE_OPTION_MONO)
            nStyle |= TEXT_DRAW_MONO;

        DrawControlText( *this, aRect, aText, nStyle, pVector, pDisplayText );
        DrawControlText(*this, aRect, aText, nStyle, pVector, pDisplayText);

        if( !pVector )
        if (!pVector)
        {
            long nTop = aRect.Top() + ((aRect.GetHeight()-1)/2);
            aDecoView.DrawSeparator( Point( aRect.Right()+FIXEDLINE_TEXT_BORDER, nTop ), Point( aOutSize.Width()-1, nTop ), false );
            if( aRect.Left() > FIXEDLINE_TEXT_BORDER )
                aDecoView.DrawSeparator( Point( 0, nTop ), Point( aRect.Left()-FIXEDLINE_TEXT_BORDER, nTop ), false );
            long nTop = aRect.Top() + ((aRect.GetHeight() - 1) / 2);
            aDecoView.DrawSeparator(Point(aRect.Right() + FIXEDLINE_TEXT_BORDER, nTop), Point(aOutSize.Width() - 1, nTop), false);
            if (aRect.Left() > FIXEDLINE_TEXT_BORDER)
                aDecoView.DrawSeparator(Point(0, nTop), Point(aRect.Left() - FIXEDLINE_TEXT_BORDER, nTop), false);
        }
    }
}