summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2015-05-07 12:11:49 +0900
committerJan Holesovsky <kendy@collabora.com>2015-05-07 09:57:50 +0200
commit4c329456e1b70cfccfee905222d40f32ebcf562c (patch)
tree4ef149b3860439f3d91850b090c08315ca50eb0e
parent29b1e6718f6ebdb45d2a8c6a89a86bc0a6bbb3ae (diff)
refactor ProgressBar to use RenderContext
Change-Id: Idf33332a207736f70809820853dee5ce1e0a3cb1
-rw-r--r--include/vcl/status.hxx10
-rw-r--r--vcl/source/control/prgsbar.cxx32
-rw-r--r--vcl/source/window/status.cxx118
3 files changed, 79 insertions, 81 deletions
diff --git a/include/vcl/status.hxx b/include/vcl/status.hxx
index 3520b0ec8b22..270ef4eac89f 100644
--- a/include/vcl/status.hxx
+++ b/include/vcl/status.hxx
@@ -31,12 +31,10 @@ typedef ::std::vector< ImplStatusItem* > ImplStatusItemList;
// - Progress-Ausgabe -
-
-void VCL_DLLPUBLIC DrawProgress( vcl::Window* pWindow, const Point& rPos,
- long nOffset, long nPrgsWidth, long nPrgsHeight,
- sal_uInt16 nPercent1, sal_uInt16 nPercent2, sal_uInt16 nPercentCount,
- const Rectangle& rFramePosSize
- );
+void VCL_DLLPUBLIC DrawProgress(vcl::Window* pWindow, vcl::RenderContext& rRenderContext, const Point& rPos,
+ long nOffset, long nPrgsWidth, long nPrgsHeight,
+ sal_uInt16 nPercent1, sal_uInt16 nPercent2, sal_uInt16 nPercentCount,
+ const Rectangle& rFramePosSize);
// - StatusBarItemBits -
diff --git a/vcl/source/control/prgsbar.cxx b/vcl/source/control/prgsbar.cxx
index b4807544250d..b9e8cb932a12 100644
--- a/vcl/source/control/prgsbar.cxx
+++ b/vcl/source/control/prgsbar.cxx
@@ -117,33 +117,37 @@ void ProgressBar::ImplInitSettings( bool bFont,
}
}
-void ProgressBar::ImplDrawProgress(vcl::RenderContext& /*rRenderContext*/, sal_uInt16 nOldPerc, sal_uInt16 nNewPerc)
+void ProgressBar::ImplDrawProgress(vcl::RenderContext& rRenderContext, sal_uInt16 nOldPerc, sal_uInt16 nNewPerc)
{
- if ( mbCalcNew )
+ if (mbCalcNew)
{
mbCalcNew = false;
- Size aSize = GetOutputSizePixel();
- mnPrgsHeight = aSize.Height()-(PROGRESSBAR_WIN_OFFSET*2);
- mnPrgsWidth = (mnPrgsHeight*2)/3;
+ Size aSize = rRenderContext.GetOutputSizePixel();
+ mnPrgsHeight = aSize.Height() - (PROGRESSBAR_WIN_OFFSET * 2);
+ mnPrgsWidth = (mnPrgsHeight * 2) / 3;
maPos.Y() = PROGRESSBAR_WIN_OFFSET;
- long nMaxWidth = (aSize.Width()-(PROGRESSBAR_WIN_OFFSET*2)+PROGRESSBAR_OFFSET);
+ long nMaxWidth = (aSize.Width() - (PROGRESSBAR_WIN_OFFSET * 2) + PROGRESSBAR_OFFSET);
sal_uInt16 nMaxCount = (sal_uInt16)(nMaxWidth / (mnPrgsWidth+PROGRESSBAR_OFFSET));
- if ( nMaxCount <= 1 )
+ if (nMaxCount <= 1)
+ {
nMaxCount = 1;
+ }
else
{
- while ( ((10000/(10000/nMaxCount))*(mnPrgsWidth+PROGRESSBAR_OFFSET)) > nMaxWidth )
+ while (((10000 / (10000 / nMaxCount)) * (mnPrgsWidth + PROGRESSBAR_OFFSET)) > nMaxWidth)
+ {
nMaxCount--;
+ }
}
- mnPercentCount = 10000/nMaxCount;
- nMaxWidth = ((10000/(10000/nMaxCount))*(mnPrgsWidth+PROGRESSBAR_OFFSET))-PROGRESSBAR_OFFSET;
- maPos.X() = (aSize.Width()-nMaxWidth)/2;
+ mnPercentCount = 10000 / nMaxCount;
+ nMaxWidth = ((10000 / (10000 / nMaxCount)) * (mnPrgsWidth + PROGRESSBAR_OFFSET)) - PROGRESSBAR_OFFSET;
+ maPos.X() = (aSize.Width() - nMaxWidth) / 2;
}
- ::DrawProgress( this, maPos, PROGRESSBAR_OFFSET, mnPrgsWidth, mnPrgsHeight,
- nOldPerc*100, nNewPerc*100, mnPercentCount,
- Rectangle( Point(), GetSizePixel() ) );
+ ::DrawProgress(this, rRenderContext, maPos, PROGRESSBAR_OFFSET, mnPrgsWidth, mnPrgsHeight,
+ nOldPerc * 100, nNewPerc * 100, mnPercentCount,
+ Rectangle(Point(), GetSizePixel()));
}
void ProgressBar::Paint(vcl::RenderContext& rRenderContext, const Rectangle& /*rRect*/)
diff --git a/vcl/source/window/status.cxx b/vcl/source/window/status.cxx
index 7b7efafe310b..61456149b07b 100644
--- a/vcl/source/window/status.cxx
+++ b/vcl/source/window/status.cxx
@@ -468,147 +468,143 @@ void StatusBar::ImplDrawItem(vcl::RenderContext& /*rRenderContext*/, bool bOffSc
CallEventListeners( VCLEVENT_STATUSBAR_DRAWITEM, reinterpret_cast<void*>(pItem->mnId) );
}
-void DrawProgress( vcl::Window* pWindow, const Point& rPos,
- long nOffset, long nPrgsWidth, long nPrgsHeight,
- sal_uInt16 nPercent1, sal_uInt16 nPercent2, sal_uInt16 nPercentCount,
- const Rectangle& rFramePosSize
- )
+void DrawProgress(vcl::Window* pWindow, vcl::RenderContext& rRenderContext, const Point& rPos,
+ long nOffset, long nPrgsWidth, long nPrgsHeight,
+ sal_uInt16 nPercent1, sal_uInt16 nPercent2, sal_uInt16 nPercentCount,
+ const Rectangle& rFramePosSize)
{
- if( pWindow->IsNativeControlSupported( CTRL_PROGRESS, PART_ENTIRE_CONTROL ) )
+ if (rRenderContext.IsNativeControlSupported(CTRL_PROGRESS, PART_ENTIRE_CONTROL))
{
bool bNeedErase = ImplGetSVData()->maNWFData.mbProgressNeedsErase;
long nFullWidth = (nPrgsWidth + nOffset) * (10000 / nPercentCount);
long nPerc = (nPercent2 > 10000) ? 10000 : nPercent2;
- ImplControlValue aValue( nFullWidth * (long)nPerc / 10000 );
- Rectangle aDrawRect( rPos, Size( nFullWidth, nPrgsHeight ) );
- Rectangle aControlRegion( aDrawRect );
- if( bNeedErase )
+ ImplControlValue aValue(nFullWidth * long(nPerc) / 10000);
+ Rectangle aDrawRect(rPos, Size(nFullWidth, nPrgsHeight));
+ Rectangle aControlRegion(aDrawRect);
+
+ if(bNeedErase)
{
vcl::Window* pEraseWindow = pWindow;
- while( pEraseWindow->IsPaintTransparent() &&
- ! pEraseWindow->ImplGetWindowImpl()->mbFrame )
+ while (pEraseWindow->IsPaintTransparent() && !pEraseWindow->ImplGetWindowImpl()->mbFrame)
{
pEraseWindow = pEraseWindow->ImplGetWindowImpl()->mpParent;
}
- if( pEraseWindow == pWindow )
+
+ if (pEraseWindow == pWindow)
+ {
// restore background of pWindow
- pEraseWindow->Erase( rFramePosSize );
+ rRenderContext.Erase(rFramePosSize);
+ }
else
{
// restore transparent background
- Point aTL( pWindow->OutputToAbsoluteScreenPixel( rFramePosSize.TopLeft() ) );
- aTL = pEraseWindow->AbsoluteScreenToOutputPixel( aTL );
- Rectangle aRect( aTL, rFramePosSize.GetSize() );
- pEraseWindow->Invalidate( aRect, INVALIDATE_NOCHILDREN |
- INVALIDATE_NOCLIPCHILDREN |
- INVALIDATE_TRANSPARENT );
+ Point aTL(pWindow->OutputToAbsoluteScreenPixel(rFramePosSize.TopLeft()));
+ aTL = pEraseWindow->AbsoluteScreenToOutputPixel(aTL);
+ Rectangle aRect(aTL, rFramePosSize.GetSize());
+ pEraseWindow->Invalidate(aRect, INVALIDATE_NOCHILDREN |
+ INVALIDATE_NOCLIPCHILDREN |
+ INVALIDATE_TRANSPARENT);
pEraseWindow->Update();
}
- pWindow->Push( PushFlags::CLIPREGION );
- pWindow->IntersectClipRegion( rFramePosSize );
+ rRenderContext.Push(PushFlags::CLIPREGION);
+ rRenderContext.IntersectClipRegion(rFramePosSize);
}
- bool bNativeOK = pWindow->DrawNativeControl( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion,
- ControlState::ENABLED, aValue, OUString() );
- if( bNeedErase )
- pWindow->Pop();
- if( bNativeOK )
- {
- pWindow->Flush();
+
+ bool bNativeOK = rRenderContext.DrawNativeControl(CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion,
+ ControlState::ENABLED, aValue, OUString());
+ if (bNeedErase)
+ rRenderContext.Pop();
+ if (bNativeOK)
return;
- }
}
// precompute values
sal_uInt16 nPerc1 = nPercent1 / nPercentCount;
sal_uInt16 nPerc2 = nPercent2 / nPercentCount;
- if ( nPerc1 > nPerc2 )
+ if (nPerc1 > nPerc2)
{
// support progress that can also decrease
// compute rectangle
- long nDX = nPrgsWidth + nOffset;
- long nLeft = rPos.X()+((nPerc1-1)*nDX);
- Rectangle aRect( nLeft, rPos.Y(), nLeft+nPrgsWidth, rPos.Y()+nPrgsHeight );
+ long nDX = nPrgsWidth + nOffset;
+ long nLeft = rPos.X() + ((nPerc1 - 1) * nDX);
+ Rectangle aRect(nLeft, rPos.Y(), nLeft + nPrgsWidth, rPos.Y() + nPrgsHeight);
do
{
- pWindow->Erase( aRect );
+ rRenderContext.Erase(aRect);
aRect.Left() -= nDX;
aRect.Right() -= nDX;
nPerc1--;
}
- while ( nPerc1 > nPerc2 );
-
- pWindow->Flush();
+ while (nPerc1 > nPerc2);
}
- else if ( nPerc1 < nPerc2 )
+ else if (nPerc1 < nPerc2)
{
// draw Percent rectangle
// if Percent2 greater than 100%, adapt values
- if ( nPercent2 > 10000 )
+ if (nPercent2 > 10000)
{
nPerc2 = 10000 / nPercentCount;
- if ( nPerc1 >= nPerc2 )
- nPerc1 = nPerc2-1;
+ if (nPerc1 >= nPerc2)
+ nPerc1 = nPerc2 - 1;
}
// compute rectangle
- long nDX = nPrgsWidth + nOffset;
- long nLeft = rPos.X()+(nPerc1*nDX);
- Rectangle aRect( nLeft, rPos.Y(), nLeft+nPrgsWidth, rPos.Y()+nPrgsHeight );
+ long nDX = nPrgsWidth + nOffset;
+ long nLeft = rPos.X() + (nPerc1 * nDX);
+ Rectangle aRect(nLeft, rPos.Y(), nLeft + nPrgsWidth, rPos.Y() + nPrgsHeight);
do
{
- pWindow->DrawRect( aRect );
+ rRenderContext.DrawRect(aRect);
aRect.Left() += nDX;
aRect.Right() += nDX;
nPerc1++;
}
- while ( nPerc1 < nPerc2 );
+ while (nPerc1 < nPerc2);
// if greater than 100%, set rectangle to blink
- if ( nPercent2 > 10000 )
+ if (nPercent2 > 10000)
{
// define on/off status
- if ( ((nPercent2 / nPercentCount) & 0x01) == (nPercentCount & 0x01) )
+ if (((nPercent2 / nPercentCount) & 0x01) == (nPercentCount & 0x01))
{
aRect.Left() -= nDX;
aRect.Right() -= nDX;
- pWindow->Erase( aRect );
+ rRenderContext.Erase(aRect);
}
}
-
- pWindow->Flush();
}
}
void StatusBar::ImplDrawProgress(vcl::RenderContext& rRenderContext, bool bPaint,
sal_uInt16 nPercent1, sal_uInt16 nPercent2)
{
- bool bNative = IsNativeControlSupported( CTRL_PROGRESS, PART_ENTIRE_CONTROL );
+ bool bNative = rRenderContext.IsNativeControlSupported(CTRL_PROGRESS, PART_ENTIRE_CONTROL);
// bPaint: draw text also, else only update progress
if (bPaint)
{
- DrawText( maPrgsTxtPos, maPrgsTxt );
- if( ! bNative )
+ rRenderContext.DrawText(maPrgsTxtPos, maPrgsTxt);
+ if (!bNative)
{
DecorationView aDecoView(&rRenderContext);
- aDecoView.DrawFrame( maPrgsFrameRect, FRAME_DRAW_IN );
+ aDecoView.DrawFrame(maPrgsFrameRect, FRAME_DRAW_IN);
}
}
- Point aPos( maPrgsFrameRect.Left()+STATUSBAR_PRGS_OFFSET,
- maPrgsFrameRect.Top()+STATUSBAR_PRGS_OFFSET );
+ Point aPos(maPrgsFrameRect.Left() + STATUSBAR_PRGS_OFFSET,
+ maPrgsFrameRect.Top() + STATUSBAR_PRGS_OFFSET);
long nPrgsHeight = mnPrgsSize;
- if( bNative )
+ if (bNative)
{
aPos = maPrgsFrameRect.TopLeft();
nPrgsHeight = maPrgsFrameRect.GetHeight();
}
- DrawProgress( this, aPos, mnPrgsSize / 2, mnPrgsSize, nPrgsHeight,
- nPercent1 * 100, nPercent2 * 100, mnPercentCount, maPrgsFrameRect );
+ DrawProgress(this, rRenderContext, aPos, mnPrgsSize / 2, mnPrgsSize, nPrgsHeight,
+ nPercent1 * 100, nPercent2 * 100, mnPercentCount, maPrgsFrameRect);
}
void StatusBar::ImplCalcProgressRect()