desktop/source/splash/splash.cxx | 19 +- include/svtools/ruler.hxx | 9 - include/vcl/status.hxx | 2 svtools/source/contnr/treelistbox.cxx | 2 svtools/source/control/ruler.cxx | 248 +++++++++++++++------------------- vcl/source/window/status.cxx | 96 ++++--------- 6 files changed, 162 insertions(+), 214 deletions(-)
New commits: commit 4d68f980a5b41b6713563cf7119dd7b9eb5a67d4 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Thu Jun 4 16:48:31 2015 +0900 tdf#91529 hopefully fixes the issue by painting immediately Change-Id: I0c97e489150cd65d1ab1dbff4ee9f1699f89ac2e (cherry picked from commit aca61aa5ffa4fab458d03e469b569c50952ed077) diff --git a/desktop/source/splash/splash.cxx b/desktop/source/splash/splash.cxx index 6794d15..63c8232 100644 --- a/desktop/source/splash/splash.cxx +++ b/desktop/source/splash/splash.cxx @@ -59,6 +59,8 @@ public: virtual void dispose() SAL_OVERRIDE; // workwindow virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) SAL_OVERRIDE; + void Redraw(); + }; class SplashScreen @@ -143,6 +145,15 @@ void SplashScreenWindow::dispose() IntroWindow::dispose(); } +void SplashScreenWindow::Redraw() +{ + Invalidate(); + // Trigger direct painting too - otherwise the splash screen won't be + // shown in some cases (when the idle timer won't be hit). + Paint(*this, Rectangle()); + Flush(); +} + SplashScreen::SplashScreen() : pWindow( new SplashScreenWindow (this) ) , _cProgressFrameColor(sal::static_int_cast< ColorData >(NOT_LOADED)) @@ -194,8 +205,7 @@ void SAL_CALL SplashScreen::start(const OUString&, sal_Int32 nRange) if ( _eBitmapMode == BM_FULLSCREEN ) pWindow->ShowFullScreenMode( true ); pWindow->Show(); - pWindow->Invalidate(); - pWindow->Flush(); + pWindow->Redraw(); } } @@ -352,8 +362,7 @@ void SplashScreen::updateStatus() return; if (!_bPaintProgress) _bPaintProgress = true; - pWindow->Invalidate(); - pWindow->Flush(); + pWindow->Redraw(); } // internal private methods @@ -364,7 +373,7 @@ IMPL_LINK( SplashScreen, AppEventListenerHdl, VclWindowEvent *, inEvent ) switch ( inEvent->GetId() ) { case VCLEVENT_WINDOW_SHOW: - pWindow->Invalidate(); + pWindow->Redraw(); break; default: break; commit 4ad0738f0203d3219d5570e08836ca801624b0a4 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Thu Jun 4 12:18:36 2015 +0900 fix status bar flickering (zoom slider fo example) Change-Id: I3fb71868a9f8f56c76353f3a2d84fdb078c8f8fb (cherry picked from commit 758916a88d6dfbabc31b8430b1cc605cb2c1e890) diff --git a/include/vcl/status.hxx b/include/vcl/status.hxx index 85a94cd..fd79dd1 100644 --- a/include/vcl/status.hxx +++ b/include/vcl/status.hxx @@ -96,7 +96,7 @@ private: using Window::ImplInit; SAL_DLLPRIVATE void ImplInit( vcl::Window* pParent, WinBits nStyle ); - SAL_DLLPRIVATE void ImplInitSettings( bool bFont, bool bForeground, bool bBackground ); + SAL_DLLPRIVATE void ImplInitSettings(); SAL_DLLPRIVATE void ImplFormat(); SAL_DLLPRIVATE bool ImplIsItemUpdate(); diff --git a/vcl/source/window/status.cxx b/vcl/source/window/status.cxx index b9669d7..211e383 100644 --- a/vcl/source/window/status.cxx +++ b/vcl/source/window/status.cxx @@ -123,7 +123,7 @@ void StatusBar::ImplInit( vcl::Window* pParent, WinBits nStyle ) // remember WinBits mpItemList = new ImplStatusItemList; - mpImplData->mpVirDev = VclPtr<VirtualDevice>::Create( *this ); + mpImplData->mpVirDev = VclPtr<VirtualDevice>::Create( *this ); mnCurItemId = 0; mbFormat = true; mbVisibleItems = true; @@ -137,8 +137,7 @@ void StatusBar::ImplInit( vcl::Window* pParent, WinBits nStyle ) mnItemY = STATUSBAR_OFFSET_Y; mnTextY = STATUSBAR_OFFSET_TEXTY; - ImplInitSettings( true, true, true ); - SetLineColor(); + ImplInitSettings(); SetOutputSizePixel( CalcWindowSizePixel() ); } @@ -175,6 +174,8 @@ void StatusBar::AdjustItemWidthsForHiDPI(bool bAdjustHiDPI) void StatusBar::ApplySettings(vcl::RenderContext& rRenderContext) { + rRenderContext.SetLineColor(); + const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings(); vcl::Font aFont = rStyleSettings.GetToolFont(); if (IsControlFont()) @@ -209,56 +210,15 @@ void StatusBar::ApplySettings(vcl::RenderContext& rRenderContext) } } -void StatusBar::ImplInitSettings(bool bFont, bool bForeground, bool bBackground) +void StatusBar::ImplInitSettings() { - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - - if (bFont) - { - vcl::Font aFont = rStyleSettings.GetToolFont(); - if (IsControlFont()) - aFont.Merge(GetControlFont()); - SetZoomedPointFont(*this, aFont); - } - - if (bForeground || bFont) - { - Color aColor; - if (IsControlForeground()) - aColor = GetControlForeground(); - else if ( GetStyle() & WB_3DLOOK ) - aColor = rStyleSettings.GetButtonTextColor(); - else - aColor = rStyleSettings.GetWindowTextColor(); - SetTextColor(aColor); - SetTextFillColor(); - - mpImplData->mpVirDev->SetFont( GetFont() ); - mpImplData->mpVirDev->SetTextColor( GetTextColor() ); - mpImplData->mpVirDev->SetTextAlign( GetTextAlign() ); - mpImplData->mpVirDev->SetTextFillColor(); - } + ApplySettings(*this); - if ( bBackground ) - { - Color aColor; - if ( IsControlBackground() ) - aColor = GetControlBackground(); - else if ( GetStyle() & WB_3DLOOK ) - aColor = rStyleSettings.GetFaceColor(); - else - aColor = rStyleSettings.GetWindowColor(); - SetBackground( aColor ); - mpImplData->mpVirDev->SetBackground( GetBackground() ); - - // NWF background - if( ! IsControlBackground() && - IsNativeControlSupported( CTRL_WINDOW_BACKGROUND, PART_BACKGROUND_WINDOW ) ) - { - ImplGetWindowImpl()->mnNativeBackground = PART_BACKGROUND_WINDOW; - EnableChildTransparentMode( true ); - } - } + mpImplData->mpVirDev->SetFont(GetFont()); + mpImplData->mpVirDev->SetTextColor(GetTextColor()); + mpImplData->mpVirDev->SetTextAlign(GetTextAlign()); + mpImplData->mpVirDev->SetTextFillColor(); + mpImplData->mpVirDev->SetBackground(GetBackground()); } void StatusBar::ImplFormat() @@ -745,7 +705,20 @@ void StatusBar::Paint(vcl::RenderContext& rRenderContext, const Rectangle&) sal_uInt16 nItemCount = sal_uInt16( mpItemList->size() ); if (mbProgressMode) + { + rRenderContext.Push(PushFlags::FILLCOLOR | PushFlags::LINECOLOR); + + const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings(); + Color aProgressColor = rStyleSettings.GetHighlightColor(); + if (aProgressColor == rStyleSettings.GetFaceColor()) + aProgressColor = rStyleSettings.GetDarkShadowColor(); + rRenderContext.SetLineColor(); + rRenderContext.SetFillColor(aProgressColor); + ImplDrawProgress(rRenderContext, true, 0, mnPercent); + + rRenderContext.Pop(); + } else { // draw text @@ -756,7 +729,7 @@ void StatusBar::Paint(vcl::RenderContext& rRenderContext, const Rectangle&) if (mbVisibleItems) { for (sal_uInt16 i = 0; i < nItemCount; i++) - ImplDrawItem(rRenderContext, false, i, true, true); + ImplDrawItem(rRenderContext, true, i, true, true); } } @@ -869,17 +842,17 @@ void StatusBar::StateChanged( StateChangedType nType ) (nType == StateChangedType::ControlFont) ) { mbFormat = true; - ImplInitSettings( true, false, false ); + ImplInitSettings(); Invalidate(); } else if ( nType == StateChangedType::ControlForeground ) { - ImplInitSettings( false, true, false ); + ImplInitSettings(); Invalidate(); } else if ( nType == StateChangedType::ControlBackground ) { - ImplInitSettings( false, false, true ); + ImplInitSettings(); Invalidate(); } } @@ -897,7 +870,7 @@ void StatusBar::DataChanged( const DataChangedEvent& rDCEvt ) ) { mbFormat = true; - ImplInitSettings( true, true, true ); + ImplInitSettings(); long nFudge = GetTextHeight() / 4; for ( size_t i = 0, n = mpItemList->size(); i < n; ++i ) { @@ -1258,7 +1231,7 @@ void StatusBar::SetItemData( sal_uInt16 nItemId, void* pNewData ) { Update(); Rectangle aRect = ImplGetItemRectPos(nPos); - Invalidate(aRect); + Invalidate(aRect, InvalidateFlags::NoErase); Flush(); } } @@ -1379,12 +1352,6 @@ void StatusBar::StartProgressMode( const OUString& rText ) ImplCalcProgressRect(); // trigger Paint, which draws text and frame - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - Color aPrgsColor = rStyleSettings.GetHighlightColor(); - if ( aPrgsColor == rStyleSettings.GetFaceColor() ) - aPrgsColor = rStyleSettings.GetDarkShadowColor(); - SetLineColor(); - SetFillColor( aPrgsColor ); if ( IsReallyVisible() ) { Invalidate(); @@ -1403,7 +1370,6 @@ void StatusBar::SetProgressValue( sal_uInt16 nNewPercent ) && (!mnPercent || (mnPercent != nNewPercent)) ) { Update(); - SetLineColor(); Invalidate(); Flush(); } @@ -1417,8 +1383,6 @@ void StatusBar::EndProgressMode() mbProgressMode = false; maPrgsTxt.clear(); - // re-trigger Paint to recreate StatusBar - SetFillColor( GetSettings().GetStyleSettings().GetFaceColor() ); if ( IsReallyVisible() ) { Invalidate(); commit 1cd89bbdedca229c950c33374efe664389ac07cd Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Wed Jun 3 20:18:31 2015 +0900 forgot to change the Invalidate to InvalidateEntry in treelistbox Change-Id: Ifa70abbecb6899d0e665039cecc2d9036ffc4b92 (cherry picked from commit 2e4380a0773acb72c5ee30e976b8af6ece71396a) diff --git a/svtools/source/contnr/treelistbox.cxx b/svtools/source/contnr/treelistbox.cxx index 13cefab..8346639 100644 --- a/svtools/source/contnr/treelistbox.cxx +++ b/svtools/source/contnr/treelistbox.cxx @@ -2675,7 +2675,7 @@ void SvTreeListBox::EditItemText(SvTreeListEntry* pEntry, SvLBoxString* pItem, c { pImp->ShowCursor( false ); SelectListEntry( pEntry, false ); - Invalidate(); + pImp->InvalidateEntry(pEntry); SelectListEntry( pEntry, true ); pImp->ShowCursor( true ); } commit 5c0866da20ebd1ab7ded67153af2b7a43edb69b6 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Wed Jun 3 17:49:41 2015 +0900 tdf#91677 fix flickering ruler Change-Id: Ia14be98fbfd46871b2ac9bd42a07951d86722a8a (cherry picked from commit f64588a9238cf0cb122c43d927d73822eca3b6ae) diff --git a/include/svtools/ruler.hxx b/include/svtools/ruler.hxx index 4724334..27b1380 100644 --- a/include/svtools/ruler.hxx +++ b/include/svtools/ruler.hxx @@ -663,9 +663,10 @@ private: SvtRulerAccessible* pAccContext; - SVT_DLLPRIVATE void ImplVDrawLine( long nX1, long nY1, long nX2, long nY2 ); - SVT_DLLPRIVATE void ImplVDrawRect( long nX1, long nY1, long nX2, long nY2 ); - SVT_DLLPRIVATE void ImplVDrawText( long nX, long nY, const OUString& rText, long nMin = LONG_MIN, long nMax = LONG_MAX ); + SVT_DLLPRIVATE void ImplVDrawLine(vcl::RenderContext& rRenderContext, long nX1, long nY1, long nX2, long nY2 ); + SVT_DLLPRIVATE void ImplVDrawRect(vcl::RenderContext& rRenderContext, long nX1, long nY1, long nX2, long nY2 ); + SVT_DLLPRIVATE void ImplVDrawText(vcl::RenderContext& rRenderContext, long nX, long nY, const OUString& rText, + long nMin = LONG_MIN, long nMax = LONG_MAX ); SVT_DLLPRIVATE void ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nMax, long nStart, long nVirTop, long nVirBottom); @@ -702,8 +703,6 @@ private: SVT_DLLPRIVATE void ImplDrag( const Point& rPos ); SVT_DLLPRIVATE void ImplEndDrag(); - DECL_DLLPRIVATE_LINK( ImplUpdateHdl, void* ); - Ruler (const Ruler &) SAL_DELETED_FUNCTION; Ruler& operator= (const Ruler &) SAL_DELETED_FUNCTION; diff --git a/svtools/source/control/ruler.cxx b/svtools/source/control/ruler.cxx index 0e68c79..69bc040 100644 --- a/svtools/source/control/ruler.cxx +++ b/svtools/source/control/ruler.cxx @@ -45,7 +45,6 @@ using namespace ::com::sun::star::accessibility; #define RULER_VAR_SIZE 8 #define RULER_UPDATE_LINES 0x01 -#define RULER_UPDATE_DRAW 0x02 #define RULER_CLIP 150 @@ -343,7 +342,7 @@ void Ruler::dispose() Window::dispose(); } -void Ruler::ImplVDrawLine( long nX1, long nY1, long nX2, long nY2 ) +void Ruler::ImplVDrawLine(vcl::RenderContext& rRenderContext, long nX1, long nY1, long nX2, long nY2) { if ( nX1 < -RULER_CLIP ) { @@ -360,12 +359,12 @@ void Ruler::ImplVDrawLine( long nX1, long nY1, long nX2, long nY2 ) } if ( mnWinStyle & WB_HORZ ) - maVirDev->DrawLine( Point( nX1, nY1 ), Point( nX2, nY2 ) ); + rRenderContext.DrawLine( Point( nX1, nY1 ), Point( nX2, nY2 ) ); else - maVirDev->DrawLine( Point( nY1, nX1 ), Point( nY2, nX2 ) ); + rRenderContext.DrawLine( Point( nY1, nX1 ), Point( nY2, nX2 ) ); } -void Ruler::ImplVDrawRect( long nX1, long nY1, long nX2, long nY2 ) +void Ruler::ImplVDrawRect(vcl::RenderContext& rRenderContext, long nX1, long nY1, long nX2, long nY2) { if ( nX1 < -RULER_CLIP ) { @@ -382,15 +381,15 @@ void Ruler::ImplVDrawRect( long nX1, long nY1, long nX2, long nY2 ) } if ( mnWinStyle & WB_HORZ ) - maVirDev->DrawRect( Rectangle( nX1, nY1, nX2, nY2 ) ); + rRenderContext.DrawRect(Rectangle(nX1, nY1, nX2, nY2)); else - maVirDev->DrawRect( Rectangle( nY1, nX1, nY2, nX2 ) ); + rRenderContext.DrawRect(Rectangle(nY1, nX1, nY2, nX2)); } -void Ruler::ImplVDrawText( long nX, long nY, const OUString& rText, long nMin, long nMax ) +void Ruler::ImplVDrawText(vcl::RenderContext& rRenderContext, long nX, long nY, const OUString& rText, long nMin, long nMax) { Rectangle aRect; - maVirDev->GetTextBoundRect( aRect, rText ); + rRenderContext.GetTextBoundRect(aRect, rText); long nShiftX = ( aRect.GetWidth() / 2 ) + aRect.Left(); long nShiftY = ( aRect.GetHeight() / 2 ) + aRect.Top(); @@ -398,9 +397,9 @@ void Ruler::ImplVDrawText( long nX, long nY, const OUString& rText, long nMin, l if ( (nX > -RULER_CLIP) && (nX < mnVirWidth + RULER_CLIP) && ( nX < nMax - nShiftX ) && ( nX > nMin + nShiftX ) ) { if ( mnWinStyle & WB_HORZ ) - maVirDev->DrawText( Point( nX - nShiftX, nY - nShiftY ), rText ); + rRenderContext.DrawText(Point(nX - nShiftX, nY - nShiftY), rText); else - maVirDev->DrawText( Point( nY - nShiftX, nX - nShiftY ), rText ); + rRenderContext.DrawText(Point(nY - nShiftX, nX - nShiftY), rText); } } @@ -463,6 +462,7 @@ void Ruler::ImplInvertLines(vcl::RenderContext& rRenderContext, bool bErase) Invert(aRect); } } + mnUpdateFlags = 0; } } @@ -486,7 +486,7 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM double nAcceptanceDelta = 0.0001; - Size aPixSize = maVirDev->LogicToPixel(Size(nTick4, nTick4), maMapMode); + Size aPixSize = rRenderContext.LogicToPixel(Size(nTick4, nTick4), maMapMode); if (mnUnitIndex == RULER_UNIT_CHAR) { @@ -518,11 +518,11 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM aFont.SetOrientation(2700); else aFont.SetOrientation(900); - maVirDev->SetFont(aFont); + rRenderContext.SetFont(aFont); nTickWidth = aPixSize.Height(); } - long nMaxWidth = maVirDev->PixelToLogic(Size(mpData->nPageWidth, 0), maMapMode).Width(); + long nMaxWidth = rRenderContext.PixelToLogic(Size(mpData->nPageWidth, 0), maMapMode).Width(); if (nMaxWidth < 0) nMaxWidth = -nMaxWidth; @@ -532,7 +532,7 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM nMaxWidth /= aImplRulerUnitTab[mnUnitIndex].nTickUnit; OUString aNumString = OUString::number(nMaxWidth); - long nTxtWidth = GetTextWidth( aNumString ); + long nTxtWidth = rRenderContext.GetTextWidth( aNumString ); const long nTextOff = 4; // Determine the number divider for ruler drawn numbers - means which numbers @@ -566,7 +566,7 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM } nTick4 = nOrgTick4 * nMulti; - aPixSize = maVirDev->LogicToPixel(Size(nTick4, nTick4), maMapMode); + aPixSize = rRenderContext.LogicToPixel(Size(nTick4, nTick4), maMapMode); if (mnWinStyle & WB_HORZ) nTickWidth = aPixSize.Width(); else @@ -576,7 +576,7 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM } else { - maVirDev->SetLineColor(rRenderContext.GetSettings().GetStyleSettings().GetShadowColor()); + rRenderContext.SetLineColor(rRenderContext.GetSettings().GetStyleSettings().GetShadowColor()); } if (!bNoTicks) @@ -593,11 +593,11 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM Size nTickGapSize; - nTickGapSize = maVirDev->LogicToPixel(Size(nTickCount, nTickCount), maMapMode); + nTickGapSize = rRenderContext.LogicToPixel(Size(nTickCount, nTickCount), maMapMode); long nTickGap1 = mnWinStyle & WB_HORZ ? nTickGapSize.Width() : nTickGapSize.Height(); - nTickGapSize = maVirDev->LogicToPixel(Size(nTick2, nTick2), maMapMode); + nTickGapSize = rRenderContext.LogicToPixel(Size(nTick2, nTick2), maMapMode); long nTickGap2 = mnWinStyle & WB_HORZ ? nTickGapSize.Width() : nTickGapSize.Height(); - nTickGapSize = maVirDev->LogicToPixel(Size(nTick3, nTick3), maMapMode); + nTickGapSize = rRenderContext.LogicToPixel(Size(nTick3, nTick3), maMapMode); long nTickGap3 = mnWinStyle & WB_HORZ ? nTickGapSize.Width() : nTickGapSize.Height(); while (((nStart - n) >= nMin) || ((nStart + n) <= nMax)) @@ -611,13 +611,13 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM if ((mpData->nMargin1Style & RULER_STYLE_INVISIBLE) || (mpData->nMargin1 != 0)) { aNumString = "0"; - ImplVDrawText(nStart, nCenter, aNumString); + ImplVDrawText(rRenderContext, nStart, nCenter, aNumString); } } } else { - aPixSize = maVirDev->LogicToPixel(Size(nTick, nTick), maMapMode); + aPixSize = rRenderContext.LogicToPixel(Size(nTick, nTick), maMapMode); if (mnWinStyle & WB_HORZ) n = aPixSize.Width(); @@ -636,21 +636,23 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM aNumString = OUString::number(nTick / aImplRulerUnitTab[mnUnitIndex].nTickUnit); long nHorizontalLocation = nStart + n; - ImplVDrawText(nHorizontalLocation, nCenter, aNumString, nMin, nMax); + ImplVDrawText(rRenderContext, nHorizontalLocation, nCenter, aNumString, nMin, nMax); if (nMin < nHorizontalLocation && nHorizontalLocation < nMax) { - ImplVDrawRect(nHorizontalLocation, nBottom, nHorizontalLocation + DPIOffset, nBottom - 1 * nScale); - ImplVDrawRect(nHorizontalLocation, nTop, nHorizontalLocation + DPIOffset, nTop + 1 * nScale); + ImplVDrawRect(rRenderContext, nHorizontalLocation, nBottom, nHorizontalLocation + DPIOffset, nBottom - 1 * nScale); + ImplVDrawRect(rRenderContext, nHorizontalLocation, nTop, nHorizontalLocation + DPIOffset, nTop + 1 * nScale); } nHorizontalLocation = nStart - n; - ImplVDrawText(nHorizontalLocation, nCenter, aNumString, nMin, nMax); + ImplVDrawText(rRenderContext, nHorizontalLocation, nCenter, aNumString, nMin, nMax); if (nMin < nHorizontalLocation && nHorizontalLocation < nMax) { - ImplVDrawRect(nHorizontalLocation, nBottom, nHorizontalLocation + DPIOffset, nBottom - 1 * nScale); - ImplVDrawRect( nHorizontalLocation, nTop, nHorizontalLocation + DPIOffset, nTop + 1 * nScale ); + ImplVDrawRect(rRenderContext, nHorizontalLocation, nBottom, + nHorizontalLocation + DPIOffset, nBottom - 1 * nScale); + ImplVDrawRect(rRenderContext, nHorizontalLocation, nTop, + nHorizontalLocation + DPIOffset, nTop + 1 * nScale); } } // Tick/Tick2 - Output (Strokes) @@ -679,10 +681,10 @@ void Ruler::ImplDrawTicks(vcl::RenderContext& rRenderContext, long nMin, long nM nT = nStart + n; if (nT < nMax) - ImplVDrawRect(nT, nT1, nT + DPIOffset, nT2); + ImplVDrawRect(rRenderContext, nT, nT1, nT + DPIOffset, nT2); nT = nStart - n; if (nT > nMin) - ImplVDrawRect(nT, nT1, nT + DPIOffset, nT2); + ImplVDrawRect(rRenderContext, nT, nT1, nT + DPIOffset, nT2); } } } @@ -713,21 +715,21 @@ void Ruler::ImplDrawBorders(vcl::RenderContext& rRenderContext, long nMin, long { if ((n2 - n1) > 3) { - maVirDev->SetLineColor(); - maVirDev->SetFillColor(rStyleSettings.GetFaceColor()); - ImplVDrawRect(n1, nVirTop, n2, nVirBottom); + rRenderContext.SetLineColor(); + rRenderContext.SetFillColor(rStyleSettings.GetFaceColor()); + ImplVDrawRect(rRenderContext, n1, nVirTop, n2, nVirBottom); - maVirDev->SetLineColor(rStyleSettings.GetLightColor()); - ImplVDrawLine(n1 + 1, nVirTop, n1 + 1, nVirBottom); - ImplVDrawLine(n1, nVirTop, n2, nVirTop); + rRenderContext.SetLineColor(rStyleSettings.GetLightColor()); + ImplVDrawLine(rRenderContext, n1 + 1, nVirTop, n1 + 1, nVirBottom); + ImplVDrawLine(rRenderContext, n1, nVirTop, n2, nVirTop); - maVirDev->SetLineColor(rStyleSettings.GetShadowColor()); - ImplVDrawLine(n1, nVirTop, n1, nVirBottom); - ImplVDrawLine(n1, nVirBottom, n2, nVirBottom); - ImplVDrawLine(n2 - 1, nVirTop, n2 - 1, nVirBottom); + rRenderContext.SetLineColor(rStyleSettings.GetShadowColor()); + ImplVDrawLine(rRenderContext, n1, nVirTop, n1, nVirBottom); + ImplVDrawLine(rRenderContext, n1, nVirBottom, n2, nVirBottom); + ImplVDrawLine(rRenderContext, n2 - 1, nVirTop, n2 - 1, nVirBottom); - maVirDev->SetLineColor(rStyleSettings.GetDarkShadowColor()); - ImplVDrawLine(n2, nVirTop, n2, nVirBottom); + rRenderContext.SetLineColor(rStyleSettings.GetDarkShadowColor()); + ImplVDrawLine(rRenderContext, n2, nVirTop, n2, nVirBottom); if (mpData->pBorders[i].nStyle & RULER_BORDER_VARIABLE) { @@ -739,18 +741,18 @@ void Ruler::ImplDrawBorders(vcl::RenderContext& rRenderContext, long nMin, long long nTemp4 = nTemp2 + RULER_VAR_SIZE - 1; long nTempY = nTemp2; - maVirDev->SetLineColor(rStyleSettings.GetLightColor()); + rRenderContext.SetLineColor(rStyleSettings.GetLightColor()); while (nTempY <= nTemp4) { - ImplVDrawLine(nTemp1, nTempY, nTemp3, nTempY); + ImplVDrawLine(rRenderContext, nTemp1, nTempY, nTemp3, nTempY); nTempY += 2; } nTempY = nTemp2 + 1; - maVirDev->SetLineColor(rStyleSettings.GetShadowColor()); + rRenderContext.SetLineColor(rStyleSettings.GetShadowColor()); while (nTempY <= nTemp4) { - ImplVDrawLine(nTemp1, nTempY, nTemp3, nTempY); + ImplVDrawLine(rRenderContext, nTemp1, nTempY, nTemp3, nTempY); nTempY += 2; } } @@ -760,31 +762,31 @@ void Ruler::ImplDrawBorders(vcl::RenderContext& rRenderContext, long nMin, long { if (n2 - n1 > RULER_VAR_SIZE + 10) { - maVirDev->SetLineColor(rStyleSettings.GetShadowColor()); - ImplVDrawLine(n1 + 4, nVirTop + 3, n1 + 4, nVirBottom - 3); - ImplVDrawLine(n2 - 5, nVirTop + 3, n2 - 5, nVirBottom - 3); - maVirDev->SetLineColor( rStyleSettings.GetLightColor()); - ImplVDrawLine(n1 + 5, nVirTop + 3, n1 + 5, nVirBottom - 3); - ImplVDrawLine(n2 - 4, nVirTop + 3, n2 - 4, nVirBottom - 3); + rRenderContext.SetLineColor(rStyleSettings.GetShadowColor()); + ImplVDrawLine(rRenderContext, n1 + 4, nVirTop + 3, n1 + 4, nVirBottom - 3); + ImplVDrawLine(rRenderContext, n2 - 5, nVirTop + 3, n2 - 5, nVirBottom - 3); + rRenderContext.SetLineColor(rStyleSettings.GetLightColor()); + ImplVDrawLine(rRenderContext, n1 + 5, nVirTop + 3, n1 + 5, nVirBottom - 3); + ImplVDrawLine(rRenderContext, n2 - 4, nVirTop + 3, n2 - 4, nVirBottom - 3); } } } else { n = n1 + ((n2 - n1) / 2); - maVirDev->SetLineColor(rStyleSettings.GetShadowColor()); + rRenderContext.SetLineColor(rStyleSettings.GetShadowColor()); if (mpData->pBorders[i].nStyle & RULER_BORDER_SNAP) - ImplVDrawLine(n, nVirTop, n, nVirBottom); + ImplVDrawLine(rRenderContext, n, nVirTop, n, nVirBottom); else if (mpData->pBorders[i].nStyle & RULER_BORDER_MARGIN) - ImplVDrawLine(n, nVirTop, n, nVirBottom); + ImplVDrawLine(rRenderContext, n, nVirTop, n, nVirBottom); else { - ImplVDrawLine(n - 1, nVirTop, n - 1, nVirBottom); - ImplVDrawLine(n + 1, nVirTop, n + 1, nVirBottom); - maVirDev->SetLineColor(); - maVirDev->SetFillColor(rStyleSettings.GetWindowColor()); - ImplVDrawRect(n, nVirTop, n, nVirBottom); + ImplVDrawLine(rRenderContext, n - 1, nVirTop, n - 1, nVirBottom); + ImplVDrawLine(rRenderContext, n + 1, nVirTop, n + 1, nVirBottom); + rRenderContext.SetLineColor(); + rRenderContext.SetFillColor(rStyleSettings.GetWindowColor()); + ImplVDrawRect(rRenderContext, n, nVirTop, n, nVirBottom); } } } @@ -798,9 +800,9 @@ void Ruler::ImplDrawIndent(vcl::RenderContext& rRenderContext, const Polygon& rP if (nStyle & RULER_STYLE_INVISIBLE) return; - maVirDev->SetLineColor(rStyleSettings.GetDarkShadowColor()); - maVirDev->SetFillColor(bIsHit ? rStyleSettings.GetDarkShadowColor() : rStyleSettings.GetWorkspaceColor()); - maVirDev->DrawPolygon(rPoly); + rRenderContext.SetLineColor(rStyleSettings.GetDarkShadowColor()); + rRenderContext.SetFillColor(bIsHit ? rStyleSettings.GetDarkShadowColor() : rStyleSettings.GetWorkspaceColor()); + rRenderContext.DrawPolygon(rPoly); } void Ruler::ImplDrawIndents(vcl::RenderContext& rRenderContext, long nMin, long nMax, long nVirTop, long nVirBottom) @@ -827,8 +829,8 @@ void Ruler::ImplDrawIndents(vcl::RenderContext& rRenderContext, long nMin, long if (nIndentStyle == RULER_INDENT_BORDER) { const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings(); - maVirDev->SetLineColor(rStyleSettings.GetShadowColor()); - ImplVDrawLine(n, nVirTop + 1, n, nVirBottom - 1); + rRenderContext.SetLineColor(rStyleSettings.GetShadowColor()); + ImplVDrawLine(rRenderContext, n, nVirTop + 1, n, nVirBottom - 1); } else if (nIndentStyle == RULER_INDENT_BOTTOM) { @@ -1020,7 +1022,7 @@ void Ruler::ImplDrawTab(vcl::RenderContext& rRenderContext, const Point& rPos, s ImplDrawRulerTab(rRenderContext, rPos, nStyle, GetStyle()); } -void Ruler::ImplDrawTabs(vcl::RenderContext& /*rRenderContext*/, long nMin, long nMax, long nVirTop, long nVirBottom) +void Ruler::ImplDrawTabs(vcl::RenderContext& rRenderContext, long nMin, long nMax, long nVirTop, long nVirBottom) { for (sal_uInt32 i = 0; i < mpData->pTabs.size(); i++) { @@ -1032,7 +1034,7 @@ void Ruler::ImplDrawTabs(vcl::RenderContext& /*rRenderContext*/, long nMin, long aPosition += +mpData->nNullVirOff; long nTopBottom = (GetStyle() & WB_RIGHT_ALIGNED) ? nVirTop : nVirBottom; if (nMin <= aPosition && aPosition <= nMax) - ImplDrawTab(*maVirDev.get(), Point( aPosition, nTopBottom ), mpData->pTabs[i].nStyle); + ImplDrawTab(rRenderContext, Point( aPosition, nTopBottom ), mpData->pTabs[i].nStyle); } } @@ -1245,8 +1247,8 @@ void Ruler::ImplFormat(vcl::RenderContext& rRenderContext) // top/bottom border maVirDev->SetLineColor(rStyleSettings.GetShadowColor()); - ImplVDrawLine(nVirLeft, nVirTop + 1, nM1, nVirTop + 1); //top left line - ImplVDrawLine(nM2, nVirTop + 1, nP2 - 1, nVirTop + 1); //top right line + ImplVDrawLine(*maVirDev.get(), nVirLeft, nVirTop + 1, nM1, nVirTop + 1); //top left line + ImplVDrawLine(*maVirDev.get(), nM2, nVirTop + 1, nP2 - 1, nVirTop + 1); //top right line nVirTop++; nVirBottom--; @@ -1255,31 +1257,31 @@ void Ruler::ImplFormat(vcl::RenderContext& rRenderContext) maVirDev->SetLineColor(); maVirDev->SetFillColor(rStyleSettings.GetDialogColor()); if (nM1 > nVirLeft) - ImplVDrawRect(nP1, nVirTop + 1, nM1, nVirBottom); //left gray rectangle + ImplVDrawRect(*maVirDev.get(), nP1, nVirTop + 1, nM1, nVirBottom); //left gray rectangle if (nM2 < nP2) - ImplVDrawRect(nM2, nVirTop + 1, nP2, nVirBottom); //right gray rectangle + ImplVDrawRect(*maVirDev.get(), nM2, nVirTop + 1, nP2, nVirBottom); //right gray rectangle if (nM2 - nM1 > 0) { maVirDev->SetFillColor(rStyleSettings.GetWindowColor()); - ImplVDrawRect(nM1 + 1, nVirTop, nM2 - 1, nVirBottom); //center rectangle + ImplVDrawRect(*maVirDev.get(), nM1 + 1, nVirTop, nM2 - 1, nVirBottom); //center rectangle } maVirDev->SetLineColor(rStyleSettings.GetShadowColor()); if (nM1 > nVirLeft) { - ImplVDrawLine(nM1, nVirTop + 1, nM1, nVirBottom); //right line of the left rectangle - ImplVDrawLine(nP1, nVirBottom, nM1, nVirBottom); //bottom line of the left rectangle + ImplVDrawLine(*maVirDev.get(), nM1, nVirTop + 1, nM1, nVirBottom); //right line of the left rectangle + ImplVDrawLine(*maVirDev.get(), nP1, nVirBottom, nM1, nVirBottom); //bottom line of the left rectangle if (nP1 >= nVirLeft) { - ImplVDrawLine(nP1, nVirTop + 1, nP1, nVirBottom); //left line of the left rectangle - ImplVDrawLine(nP1, nVirBottom, nP1 + 1, nVirBottom); //? + ImplVDrawLine(*maVirDev.get(), nP1, nVirTop + 1, nP1, nVirBottom); //left line of the left rectangle + ImplVDrawLine(*maVirDev.get(), nP1, nVirBottom, nP1 + 1, nVirBottom); //? } } if (nM2 < nP2) { - ImplVDrawLine(nM2, nVirBottom, nP2 - 1, nVirBottom); //bottom line of the right rectangle - ImplVDrawLine(nM2, nVirTop + 1, nM2, nVirBottom); //left line of the right rectangle + ImplVDrawLine(*maVirDev.get(), nM2, nVirBottom, nP2 - 1, nVirBottom); //bottom line of the right rectangle + ImplVDrawLine(*maVirDev.get(), nM2, nVirTop + 1, nM2, nVirBottom); //left line of the right rectangle if (nP2 <= nVirRight + 1) - ImplVDrawLine(nP2 - 1, nVirTop + 1, nP2 - 1, nVirBottom); //right line of the right rectangle + ImplVDrawLine(*maVirDev.get(), nP2 - 1, nVirTop + 1, nP2 - 1, nVirBottom); //right line of the right rectangle } long nMin = nVirLeft; @@ -1298,19 +1300,19 @@ void Ruler::ImplFormat(vcl::RenderContext& rRenderContext) nMax--; // Draw captions - ImplDrawTicks(rRenderContext, nMin, nMax, nStart, nVirTop, nVirBottom); + ImplDrawTicks(*maVirDev.get(), nMin, nMax, nStart, nVirTop, nVirBottom); // Draw borders if (!mpData->pBorders.empty()) - ImplDrawBorders(rRenderContext, nVirLeft, nP2, nVirTop, nVirBottom); + ImplDrawBorders(*maVirDev.get(), nVirLeft, nP2, nVirTop, nVirBottom); // Draw indents if (!mpData->pIndents.empty()) - ImplDrawIndents(rRenderContext, nVirLeft, nP2, nVirTop - 1, nVirBottom + 1); + ImplDrawIndents(*maVirDev.get(), nVirLeft, nP2, nVirTop - 1, nVirBottom + 1); // Tabs if (!mpData->pTabs.empty()) - ImplDrawTabs(rRenderContext, nVirLeft, nP2, nVirTop-1, nVirBottom + 1); + ImplDrawTabs(*maVirDev.get(), nVirLeft, nP2, nVirTop-1, nVirBottom + 1); mbFormat = false; } @@ -1467,7 +1469,7 @@ void Ruler::ImplUpdate( bool bMustCalc ) { // clear lines in this place so they aren't considered at recalculation if (!mbFormat) - Invalidate(); + Invalidate(InvalidateFlags::NoErase); // set flags if (bMustCalc) @@ -1481,9 +1483,7 @@ void Ruler::ImplUpdate( bool bMustCalc ) // otherwise trigger update if (IsReallyVisible() && IsUpdateMode()) { - mnUpdateFlags |= RULER_UPDATE_DRAW; - if (!mnUpdateEvtId) - mnUpdateEvtId = Application::PostUserEvent(LINK( this, Ruler, ImplUpdateHdl), NULL, true); + Invalidate(InvalidateFlags::NoErase); } } @@ -1876,10 +1876,10 @@ bool Ruler::ImplStartDrag( RulerSelection* pHitTest, sal_uInt16 nModifier ) if (StartDrag()) { // if the handler allows dragging, initialize dragging - Invalidate(); mbDrag = true; mnStartDragPos = mnDragPos; StartTracking(); + Invalidate(InvalidateFlags::NoErase); return true; } else @@ -1946,7 +1946,7 @@ void Ruler::ImplDrag( const Point& rPos ) Drag(); // and redraw - Invalidate(); + Invalidate(InvalidateFlags::NoErase); // reset the data as before cancel *mpDragData = aTempData; @@ -1966,8 +1966,8 @@ void Ruler::ImplDrag( const Point& rPos ) Drag(); // redraw - if ( mbFormat ) - Invalidate(); + if (mbFormat) + Invalidate(InvalidateFlags::NoErase); } } @@ -1996,26 +1996,7 @@ void Ruler::ImplEndDrag() mnStartDragPos = 0; // redraw - Invalidate(); -} - -IMPL_LINK_NOARG(Ruler, ImplUpdateHdl) -{ - mnUpdateEvtId = 0; - - // what should be updated - if (mnUpdateFlags & RULER_UPDATE_DRAW) - { - mnUpdateFlags = 0; - Invalidate(); - } - else if (mnUpdateFlags & RULER_UPDATE_LINES) - { - mnUpdateFlags = 0; - Invalidate(); - } - - return 0; + Invalidate(InvalidateFlags::NoErase); } void Ruler::MouseButtonDown( const MouseEvent& rMEvt ) @@ -2029,8 +2010,7 @@ void Ruler::MouseButtonDown( const MouseEvent& rMEvt ) // update ruler if ( mbFormat ) { - Invalidate(); - mnUpdateFlags &= ~RULER_UPDATE_DRAW; + Invalidate(InvalidateFlags::NoErase); } if ( maExtraRect.IsInside( aMousePos ) ) @@ -2090,6 +2070,8 @@ void Ruler::MouseMove( const MouseEvent& rMEvt ) { PointerStyle ePtrStyle = PointerStyle::Arrow; + mxPreviousHitTest.swap(mxCurrentHitTest); + mxCurrentHitTest.reset(new RulerSelection); maHoverSelection.eType = RULER_TYPE_DONTKNOW; @@ -2128,19 +2110,17 @@ void Ruler::MouseMove( const MouseEvent& rMEvt ) } } - if(mxPreviousHitTest.get() != NULL && mxPreviousHitTest->eType != mxCurrentHitTest->eType) + if (mxPreviousHitTest.get() != NULL && mxPreviousHitTest->eType != mxCurrentHitTest->eType) { mbFormat = true; } SetPointer( Pointer(ePtrStyle) ); - if ( mbFormat ) + if (mbFormat) { - Invalidate(); - mnUpdateFlags &= ~RULER_UPDATE_DRAW; + Invalidate(InvalidateFlags::NoErase); } - mxPreviousHitTest.swap(mxCurrentHitTest); } void Ruler::Tracking( const TrackingEvent& rTEvt ) @@ -2189,16 +2169,15 @@ void Ruler::Resize() nNewHeight = 0; } + mbFormat = true; + // clear lines bool bVisible = IsReallyVisible(); if ( bVisible && !mpData->pLines.empty() ) { - Invalidate(); mnUpdateFlags |= RULER_UPDATE_LINES; - if ( !mnUpdateEvtId ) - mnUpdateEvtId = Application::PostUserEvent( LINK( this, Ruler, ImplUpdateHdl ), NULL, true ); + Invalidate(InvalidateFlags::NoErase); } - mbFormat = true; // recalculate some values if the height/width changes // extra field should always be updated @@ -2220,7 +2199,7 @@ void Ruler::Resize() if ( bVisible ) { if ( nNewHeight ) - Invalidate(); + Invalidate(InvalidateFlags::NoErase); else if ( mpData->bAutoPageWidth ) { // only at AutoPageWidth muss we redraw @@ -2247,7 +2226,7 @@ void Ruler::Resize() aRect.Right() = RULER_OFF + mnVirHeight; } - Invalidate( aRect ); + Invalidate(aRect, InvalidateFlags::NoErase); } } @@ -2339,14 +2318,13 @@ void Ruler::Activate() // update positionlies - draw is delayed mnUpdateFlags |= RULER_UPDATE_LINES; - if ( !mnUpdateEvtId ) - mnUpdateEvtId = Application::PostUserEvent( LINK( this, Ruler, ImplUpdateHdl ), NULL, true ); + Invalidate(InvalidateFlags::NoErase); } void Ruler::Deactivate() { // clear positionlines - Invalidate(); + Invalidate(InvalidateFlags::NoErase); mbActive = false; } @@ -2366,8 +2344,7 @@ bool Ruler::StartDocDrag( const MouseEvent& rMEvt, RulerType eDragType ) // update ruler if ( mbFormat ) { - Invalidate(); - mnUpdateFlags &= ~RULER_UPDATE_DRAW; + Invalidate(InvalidateFlags::NoErase); } if ( nMouseClicks == 1 ) @@ -2432,8 +2409,7 @@ RulerType Ruler::GetType( const Point& rPos, sal_uInt16* pAryPos ) // update ruler if ( IsReallyVisible() && mbFormat ) { - Invalidate(); - mnUpdateFlags &= ~RULER_UPDATE_DRAW; + Invalidate(InvalidateFlags::NoErase); } (void)ImplHitTest(rPos, &aHitTest); @@ -2483,7 +2459,7 @@ void Ruler::SetBorderPos( long nOff ) mnBorderOff = nOff; if ( IsReallyVisible() && IsUpdateMode() ) - Invalidate(); + Invalidate(InvalidateFlags::NoErase); } } } @@ -2558,7 +2534,7 @@ void Ruler::SetExtraType( RulerExtra eNewExtraType, sal_uInt16 nStyle ) meExtraType = eNewExtraType; mnExtraStyle = nStyle; if (IsReallyVisible() && IsUpdateMode()) - Invalidate(); + Invalidate(InvalidateFlags::NoErase); } } @@ -2644,7 +2620,7 @@ void Ruler::SetLines( sal_uInt32 aLineArraySize, const RulerLine* pLineArray ) // Delete old lines if ( bMustUpdate ) - Invalidate(); + Invalidate(InvalidateFlags::NoErase); // New data set if ( !aLineArraySize || !pLineArray ) @@ -2665,7 +2641,7 @@ void Ruler::SetLines( sal_uInt32 aLineArraySize, const RulerLine* pLineArray ) mpData->pLines.begin() ); if ( bMustUpdate ) - Invalidate(); + Invalidate(InvalidateFlags::NoErase); } } @@ -2857,7 +2833,7 @@ RulerUnitData Ruler::GetCurrentRulerUnit() const void Ruler::DrawTicks() { mbFormat = true; - Invalidate(); + Invalidate(InvalidateFlags::NoErase); } uno::Reference< XAccessible > Ruler::CreateAccessible()
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits