include/vcl/edit.hxx | 4 include/vcl/menu.hxx | 6 vcl/source/control/edit.cxx | 256 +++++++++++++++---------------- vcl/source/window/menu.cxx | 205 ++++++++++-------------- vcl/source/window/menubarwindow.cxx | 155 +++++++++--------- vcl/source/window/menubarwindow.hxx | 2 vcl/source/window/menufloatingwindow.cxx | 143 ++++++++--------- vcl/source/window/menufloatingwindow.hxx | 4 8 files changed, 372 insertions(+), 403 deletions(-)
New commits: commit 0aec75d301b2d3d260efef2ff18b249383097dbc Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Wed May 6 07:57:01 2015 +0900 Tackle Menu with RenderContext refactoring, Invalidate Change-Id: Ib2812723141c5dfe39b30c95f12d1aeca9c367bd diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx index 32dfd5a..2227b91 100644 --- a/include/vcl/menu.hxx +++ b/include/vcl/menu.hxx @@ -165,7 +165,7 @@ protected: SAL_DLLPRIVATE sal_uInt16 ImplGetFirstVisible() const; SAL_DLLPRIVATE sal_uInt16 ImplGetPrevVisible( sal_uInt16 nPos ) const; SAL_DLLPRIVATE sal_uInt16 ImplGetNextVisible( sal_uInt16 nPos ) const; - SAL_DLLPRIVATE void ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nOffY = 0, MenuItemData* pThisDataOnly = 0, bool bHighlighted = false, bool bLayout = false, bool bRollover = false ) const; + SAL_DLLPRIVATE void ImplPaint(vcl::RenderContext& rRenderContext, sal_uInt16 nBorder, long nOffY = 0, MenuItemData* pThisDataOnly = 0, bool bHighlighted = false, bool bLayout = false, bool bRollover = false ) const; SAL_DLLPRIVATE void ImplSelect(); SAL_DLLPRIVATE void ImplCallHighlight( sal_uInt16 nHighlightItem ); SAL_DLLPRIVATE void ImplCallEventListeners( sal_uLong nEvent, sal_uInt16 nPos ); @@ -178,11 +178,11 @@ protected: // returns native check and option menu symbol height in rCheckHeight and rRadioHeight // return value is maximum width and height of checkboxes and radiobuttons - SAL_DLLPRIVATE Size ImplGetNativeCheckAndRadioSize( const vcl::Window*, long& rCheckHeight, long& rRadioHeight ) const; + SAL_DLLPRIVATE Size ImplGetNativeCheckAndRadioSize(vcl::RenderContext& rRenderContext, long& rCheckHeight, long& rRadioHeight) const; // returns native submenu arrow size and spacing from right border // return value is whether it's supported natively - SAL_DLLPRIVATE bool ImplGetNativeSubmenuArrowSize( vcl::Window* pWin, Size& rArrowSize, long& rArrowSpacing ) const; + SAL_DLLPRIVATE bool ImplGetNativeSubmenuArrowSize(vcl::RenderContext& rRenderContext, Size& rArrowSize, long& rArrowSpacing ) const; SAL_DLLPRIVATE void ImplAddDel( ImplMenuDelData &rDel ); SAL_DLLPRIVATE void ImplRemoveDel( ImplMenuDelData &rDel ); diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index e972321..a230cdc 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -1393,7 +1393,7 @@ void Menu::SetAccessible( const ::com::sun::star::uno::Reference< ::com::sun::st mxAccessible = rxAccessible; } -Size Menu::ImplGetNativeCheckAndRadioSize( const vcl::Window* pWin, long& rCheckHeight, long& rRadioHeight ) const +Size Menu::ImplGetNativeCheckAndRadioSize(vcl::RenderContext& rRenderContext, long& rCheckHeight, long& rRadioHeight) const { long nCheckWidth = 0, nRadioWidth = 0; rCheckHeight = rRadioHeight = 0; @@ -1405,32 +1405,21 @@ Size Menu::ImplGetNativeCheckAndRadioSize( const vcl::Window* pWin, long& rCheck Rectangle aNativeContent; Point tmp( 0, 0 ); Rectangle aCtrlRegion( Rectangle( tmp, Size( 100, 15 ) ) ); - if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, PART_MENU_ITEM_CHECK_MARK ) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_MENU_ITEM_CHECK_MARK) ) { - if( pWin->GetNativeControlRegion( ControlType(CTRL_MENU_POPUP), - ControlPart(PART_MENU_ITEM_CHECK_MARK), - aCtrlRegion, - ControlState(ControlState::ENABLED), - aVal, - OUString(), - aNativeBounds, - aNativeContent ) - ) + if (rRenderContext.GetNativeControlRegion(ControlType(CTRL_MENU_POPUP), ControlPart(PART_MENU_ITEM_CHECK_MARK), + aCtrlRegion, ControlState(ControlState::ENABLED), aVal, OUString(), + aNativeBounds, aNativeContent)) { rCheckHeight = aNativeBounds.GetHeight(); nCheckWidth = aNativeContent.GetWidth(); } } - if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, PART_MENU_ITEM_RADIO_MARK ) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_MENU_ITEM_RADIO_MARK)) { - if( pWin->GetNativeControlRegion( ControlType(CTRL_MENU_POPUP), - ControlPart(PART_MENU_ITEM_RADIO_MARK), - aCtrlRegion, - ControlState(ControlState::ENABLED), - aVal, - OUString(), - aNativeBounds, - aNativeContent ) + if (rRenderContext.GetNativeControlRegion(ControlType(CTRL_MENU_POPUP), ControlPart(PART_MENU_ITEM_RADIO_MARK), + aCtrlRegion, ControlState(ControlState::ENABLED), aVal, OUString(), + aNativeBounds, aNativeContent) ) { rRadioHeight = aNativeBounds.GetHeight(); @@ -1441,34 +1430,24 @@ Size Menu::ImplGetNativeCheckAndRadioSize( const vcl::Window* pWin, long& rCheck return Size(std::max(nCheckWidth, nRadioWidth), std::max(rCheckHeight, rRadioHeight)); } -bool Menu::ImplGetNativeSubmenuArrowSize( vcl::Window* pWin, Size& rArrowSize, long& rArrowSpacing ) const +bool Menu::ImplGetNativeSubmenuArrowSize(vcl::RenderContext& rRenderContext, Size& rArrowSize, long& rArrowSpacing) const { ImplControlValue aVal; Rectangle aNativeBounds; Rectangle aNativeContent; - Point tmp( 0, 0 ); - Rectangle aCtrlRegion( Rectangle( tmp, Size( 100, 15 ) ) ); - if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, - PART_MENU_SUBMENU_ARROW ) ) + Rectangle aCtrlRegion(Rectangle(Point(), Size(100, 15))); + if (rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_MENU_SUBMENU_ARROW)) + { + if (rRenderContext.GetNativeControlRegion(ControlType(CTRL_MENU_POPUP), ControlPart(PART_MENU_SUBMENU_ARROW), + aCtrlRegion, ControlState(ControlState::ENABLED), + aVal, OUString(), aNativeBounds, aNativeContent)) { - if( pWin->GetNativeControlRegion( ControlType(CTRL_MENU_POPUP), - ControlPart(PART_MENU_SUBMENU_ARROW), - aCtrlRegion, - ControlState(ControlState::ENABLED), - aVal, - OUString(), - aNativeBounds, - aNativeContent ) - ) - { - Size aSize( Size ( aNativeContent.GetWidth(), - aNativeContent.GetHeight() ) ); - rArrowSize = aSize; - rArrowSpacing = aNativeBounds.GetWidth() - aNativeContent.GetWidth(); - - return true; - } + Size aSize(aNativeContent.GetWidth(), aNativeContent.GetHeight()); + rArrowSize = aSize; + rArrowSpacing = aNativeBounds.GetWidth() - aNativeContent.GetWidth(); + return true; } + } return false; } @@ -1512,7 +1491,7 @@ Size Menu::ImplCalcSize( const vcl::Window* pWin ) long nMinMenuItemHeight = nFontHeight; long nCheckHeight = 0, nRadioHeight = 0; - Size aMaxSize = ImplGetNativeCheckAndRadioSize(pWin, nCheckHeight, nRadioHeight); + Size aMaxSize = ImplGetNativeCheckAndRadioSize(const_cast<vcl::Window&>(*pWin), nCheckHeight, nRadioHeight); // FIXME if( aMaxSize.Height() > nMinMenuItemHeight ) nMinMenuItemHeight = aMaxSize.Height(); @@ -1712,7 +1691,7 @@ Size Menu::ImplCalcSize( const vcl::Window* pWin ) return aSz; } -static void ImplPaintCheckBackground( vcl::Window* i_pWindow, const Rectangle& i_rRect, bool i_bHighlight ) +static void ImplPaintCheckBackground(vcl::Window* i_pWindow, const Rectangle& i_rRect, bool i_bHighlight ) // FIXME { bool bNativeOk = false; if( i_pWindow->IsNativeControlSupported( CTRL_TOOLBAR, PART_BUTTON ) ) @@ -1736,11 +1715,11 @@ static void ImplPaintCheckBackground( vcl::Window* i_pWindow, const Rectangle& i } } -static OUString getShortenedString( const OUString& i_rLong, vcl::Window* i_pWin, long i_nMaxWidth ) +static OUString getShortenedString(const OUString& i_rLong, vcl::RenderContext& rRenderContext, long i_nMaxWidth) { sal_Int32 nPos = -1; - OUString aNonMnem( OutputDevice::GetNonMnemonicString( i_rLong, nPos ) ); - aNonMnem = i_pWin->GetEllipsisString( aNonMnem, i_nMaxWidth, TEXT_DRAW_CENTERELLIPSIS ); + OUString aNonMnem(OutputDevice::GetNonMnemonicString(i_rLong, nPos)); + aNonMnem = rRenderContext.GetEllipsisString( aNonMnem, i_nMaxWidth, TEXT_DRAW_CENTERELLIPSIS ); // re-insert mnemonic if( nPos != -1 ) { @@ -1756,17 +1735,17 @@ static OUString getShortenedString( const OUString& i_rLong, vcl::Window* i_pWin return aNonMnem; } -void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuItemData* pThisItemOnly, bool bHighlighted, bool bLayout, bool bRollover ) const +void Menu::ImplPaint(vcl::RenderContext& rRenderContext, sal_uInt16 nBorder, long nStartY, MenuItemData* pThisItemOnly, bool bHighlighted, bool bLayout, bool bRollover ) const { // for symbols: nFontHeight x nFontHeight - long nFontHeight = pWin->GetTextHeight(); - long nExtra = nFontHeight/4; + long nFontHeight = rRenderContext.GetTextHeight(); + long nExtra = nFontHeight / 4; long nCheckHeight = 0, nRadioHeight = 0; - ImplGetNativeCheckAndRadioSize( pWin, nCheckHeight, nRadioHeight ); + ImplGetNativeCheckAndRadioSize(rRenderContext, nCheckHeight, nRadioHeight); - DecorationView aDecoView( pWin ); - const StyleSettings& rSettings = pWin->GetSettings().GetStyleSettings(); + DecorationView aDecoView(&rRenderContext); + const StyleSettings& rSettings = rRenderContext.GetSettings().GetStyleSettings(); Point aTopLeft, aTmpPos; @@ -1781,7 +1760,7 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI aTopLeft.Y() += ImplGetSVData()->maNWFData.mnMenuFormatBorderY; } - Size aOutSz = pWin->GetOutputSizePixel(); + Size aOutSz = rRenderContext.GetOutputSizePixel(); size_t nCount = pItemList->size(); if( bLayout ) mpLayoutData->m_aVisibleItemBoundRects.clear(); @@ -1794,9 +1773,9 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI if ( pThisItemOnly ) { if (IsMenuBar()&& bRollover ) - pWin->SetTextColor( rSettings.GetMenuBarRolloverTextColor() ); + rRenderContext.SetTextColor( rSettings.GetMenuBarRolloverTextColor() ); else if ( bHighlighted ) - pWin->SetTextColor( rSettings.GetMenuHighlightTextColor() ); + rRenderContext.SetTextColor( rSettings.GetMenuHighlightTextColor() ); } Point aPos( aTopLeft ); @@ -1827,8 +1806,7 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI if (!bLayout && !IsMenuBar() && (pData->eType == MenuItemType::SEPARATOR)) { bool bNativeOk = false; - if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, - PART_MENU_SEPARATOR ) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_MENU_SEPARATOR)) { ControlState nState = ControlState::NONE; if ( pData->bEnabled ) @@ -1839,22 +1817,19 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI aSz.Width() = aOutSz.Width() - 2*nOuterSpaceX; Rectangle aItemRect( aPos, aSz ); MenupopupValue aVal( nTextPos-GUTTERBORDER, aItemRect ); - bNativeOk = pWin->DrawNativeControl( CTRL_MENU_POPUP, PART_MENU_SEPARATOR, - aItemRect, - nState, - aVal, - OUString() ); + bNativeOk = rRenderContext.DrawNativeControl(CTRL_MENU_POPUP, PART_MENU_SEPARATOR, + aItemRect, nState, aVal, OUString()); } - if( ! bNativeOk ) + if (!bNativeOk) { aTmpPos.Y() = aPos.Y() + ((pData->aSz.Height()-2)/2); aTmpPos.X() = aPos.X() + 2 + nOuterSpaceX; - pWin->SetLineColor( rSettings.GetShadowColor() ); - pWin->DrawLine( aTmpPos, Point( aOutSz.Width() - 3 - 2*nOuterSpaceX, aTmpPos.Y() ) ); + rRenderContext.SetLineColor( rSettings.GetShadowColor() ); + rRenderContext.DrawLine( aTmpPos, Point( aOutSz.Width() - 3 - 2*nOuterSpaceX, aTmpPos.Y() ) ); aTmpPos.Y()++; - pWin->SetLineColor( rSettings.GetLightColor() ); - pWin->DrawLine( aTmpPos, Point( aOutSz.Width() - 3 - 2*nOuterSpaceX, aTmpPos.Y() ) ); - pWin->SetLineColor(); + rRenderContext.SetLineColor( rSettings.GetLightColor() ); + rRenderContext.DrawLine( aTmpPos, Point( aOutSz.Width() - 3 - 2*nOuterSpaceX, aTmpPos.Y() ) ); + rRenderContext.SetLineColor(); } } @@ -1873,12 +1848,12 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI // however do not do this if native checks will be painted since // the selection color too often does not fit the theme's check and/or radio - if( ! ( ( pData->eType == MenuItemType::IMAGE ) || ( pData->eType == MenuItemType::STRINGIMAGE ) ) ) + if (!((pData->eType == MenuItemType::IMAGE) || (pData->eType == MenuItemType::STRINGIMAGE))) { - if ( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, + if (rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, (pData->nBits & MenuItemBits::RADIOCHECK) ? PART_MENU_ITEM_CHECK_MARK - : PART_MENU_ITEM_RADIO_MARK ) ) + : PART_MENU_ITEM_RADIO_MARK)) { ControlPart nPart = ((pData->nBits & MenuItemBits::RADIOCHECK) ? PART_MENU_ITEM_RADIO_MARK @@ -1904,15 +1879,12 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI aSz.Width() = aOutSz.Width() - 2*nOuterSpaceX; Rectangle aItemRect( aPos, aSz ); MenupopupValue aVal( nTextPos-GUTTERBORDER, aItemRect ); - pWin->DrawNativeControl( CTRL_MENU_POPUP, nPart, - aCheckRect, - nState, - aVal, - OUString() ); + rRenderContext.DrawNativeControl(CTRL_MENU_POPUP, nPart, aCheckRect, + nState, aVal, OUString()); } else if ( pData->bChecked ) // by default do nothing for unchecked items { - ImplPaintCheckBackground( pWin, aOuterCheckRect, pThisItemOnly && bHighlighted ); + ImplPaintCheckBackground(pWindow, aOuterCheckRect, pThisItemOnly && bHighlighted); SymbolType eSymbol; Size aSymbolSize; @@ -1929,7 +1901,7 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI aTmpPos.X() = aOuterCheckRect.Left() + (aOuterCheckRect.GetWidth() - aSymbolSize.Width())/2; aTmpPos.Y() = aOuterCheckRect.Top() + (aOuterCheckRect.GetHeight() - aSymbolSize.Height())/2; Rectangle aRect( aTmpPos, aSymbolSize ); - aDecoView.DrawSymbol( aRect, eSymbol, pWin->GetTextColor(), nSymbolStyle ); + aDecoView.DrawSymbol( aRect, eSymbol, rRenderContext.GetTextColor(), nSymbolStyle ); } } } @@ -1939,11 +1911,11 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI { // Don't render an image for a check thing if( pData->bChecked ) - ImplPaintCheckBackground( pWin, aOuterCheckRect, pThisItemOnly && bHighlighted ); + ImplPaintCheckBackground(pWindow, aOuterCheckRect, pThisItemOnly && bHighlighted); Image aImage = pData->aImage; - sal_Int32 nScaleFactor = pWindow->GetDPIScaleFactor(); + sal_Int32 nScaleFactor = rRenderContext.GetDPIScaleFactor(); if (nScaleFactor != 1) { BitmapEx aBitmap = aImage.GetBitmapEx(); @@ -1953,7 +1925,7 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI aTmpPos = aOuterCheckRect.TopLeft(); aTmpPos.X() += (aOuterCheckRect.GetWidth() - aImage.GetSizePixel().Width()) / 2; aTmpPos.Y() += (aOuterCheckRect.GetHeight() - aImage.GetSizePixel().Height()) / 2; - pWin->DrawImage(aTmpPos, aImage, nImageStyle); + rRenderContext.DrawImage(aTmpPos, aImage, nImageStyle); } // Text: @@ -1978,57 +1950,55 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI // TEXT_DRAW_DISABLE), temporarily set a background which // hopefully matches the NWF background since it is read // from the system style settings - bool bSetTmpBackground = !pWin->IsBackground() && pWin->IsNativeControlSupported( CTRL_MENU_POPUP, PART_ENTIRE_CONTROL ); - if( bSetTmpBackground ) + bool bSetTmpBackground = !rRenderContext.IsBackground() && rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_ENTIRE_CONTROL); + if (bSetTmpBackground) { Color aBg = IsMenuBar()? - pWin->GetSettings().GetStyleSettings().GetMenuBarColor() : - pWin->GetSettings().GetStyleSettings().GetMenuColor(); - pWin->SetBackground( Wallpaper( aBg ) ); + rRenderContext.GetSettings().GetStyleSettings().GetMenuBarColor() : + rRenderContext.GetSettings().GetStyleSettings().GetMenuColor(); + rRenderContext.SetBackground( Wallpaper( aBg ) ); } // how much space is there for the text ? long nMaxItemTextWidth = aOutSz.Width() - aTmpPos.X() - nExtra - nOuterSpaceX; if (!IsMenuBar() && pData->aAccelKey.GetCode() && !ImplAccelDisabled()) { OUString aAccText = pData->aAccelKey.GetName(); - nMaxItemTextWidth -= pWin->GetTextWidth( aAccText ) + 3*nExtra; + nMaxItemTextWidth -= rRenderContext.GetTextWidth(aAccText) + 3 * nExtra; } if (!IsMenuBar() && pData->pSubMenu) { nMaxItemTextWidth -= nFontHeight - nExtra; } - OUString aItemText( getShortenedString( pData->aText, pWin, nMaxItemTextWidth ) ); - pWin->DrawCtrlText( aTmpPos, aItemText, 0, aItemText.getLength(), nStyle, pVector, pDisplayText ); - if( bSetTmpBackground ) - pWin->SetBackground(); + OUString aItemText(getShortenedString(pData->aText, rRenderContext, nMaxItemTextWidth)); + rRenderContext.DrawCtrlText(aTmpPos, aItemText, 0, aItemText.getLength(), nStyle, pVector, pDisplayText); + if (bSetTmpBackground) + rRenderContext.SetBackground(); } // Accel if (!bLayout && !IsMenuBar() && pData->aAccelKey.GetCode() && !ImplAccelDisabled()) { OUString aAccText = pData->aAccelKey.GetName(); - aTmpPos.X() = aOutSz.Width() - pWin->GetTextWidth( aAccText ); + aTmpPos.X() = aOutSz.Width() - rRenderContext.GetTextWidth(aAccText); aTmpPos.X() -= 4*nExtra; aTmpPos.X() -= nOuterSpaceX; aTmpPos.Y() = aPos.Y(); aTmpPos.Y() += nTextOffsetY; - pWin->DrawCtrlText( aTmpPos, aAccText, 0, aAccText.getLength(), nTextStyle ); + rRenderContext.DrawCtrlText(aTmpPos, aAccText, 0, aAccText.getLength(), nTextStyle); } // SubMenu? if (!bLayout && !IsMenuBar() && pData->pSubMenu) { bool bNativeOk = false; - if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, - PART_MENU_SUBMENU_ARROW ) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_MENU_SUBMENU_ARROW)) { ControlState nState = ControlState::NONE; Size aTmpSz( 0, 0 ); long aSpacing = 0; - if( !ImplGetNativeSubmenuArrowSize( pWin, - aTmpSz, aSpacing ) ) + if (!ImplGetNativeSubmenuArrowSize(rRenderContext, aTmpSz, aSpacing)) { aTmpSz = Size( nFontHeight, nFontHeight ); aSpacing = nOuterSpaceX; @@ -2045,14 +2015,10 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI Rectangle aItemRect( aTmpPos, aTmpSz ); MenupopupValue aVal( nTextPos-GUTTERBORDER, aItemRect ); - bNativeOk = pWin->DrawNativeControl( CTRL_MENU_POPUP, - PART_MENU_SUBMENU_ARROW, - aItemRect, - nState, - aVal, - OUString() ); + bNativeOk = rRenderContext.DrawNativeControl(CTRL_MENU_POPUP, PART_MENU_SUBMENU_ARROW, + aItemRect, nState, aVal, OUString()); } - if( ! bNativeOk ) + if (!bNativeOk) { aTmpPos.X() = aOutSz.Width() - nFontHeight + nExtra - nOuterSpaceX; aTmpPos.Y() = aPos.Y(); @@ -2060,15 +2026,15 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI aTmpPos.Y() += ( pData->aSz.Height() / 2 ) - ( nFontHeight/4 ); if ( pData->nBits & MenuItemBits::POPUPSELECT ) { - pWin->SetTextColor( rSettings.GetMenuTextColor() ); + rRenderContext.SetTextColor( rSettings.GetMenuTextColor() ); Point aTmpPos2( aPos ); aTmpPos2.X() = aOutSz.Width() - nFontHeight - nFontHeight/4; aDecoView.DrawFrame( Rectangle( aTmpPos2, Size( nFontHeight+nFontHeight/4, pData->aSz.Height() ) ), FRAME_DRAW_GROUP ); } aDecoView.DrawSymbol( - Rectangle( aTmpPos, Size( nFontHeight/2, nFontHeight/2 ) ), - SymbolType::SPIN_RIGHT, pWin->GetTextColor(), nSymbolStyle ); + Rectangle(aTmpPos, Size(nFontHeight / 2, nFontHeight / 2)), + SymbolType::SPIN_RIGHT, rRenderContext.GetTextColor(), nSymbolStyle); } } @@ -2077,9 +2043,9 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI // This restores the normal menu or menu bar text // color for when it is no longer highlighted. if (IsMenuBar()) - pWin->SetTextColor( rSettings.GetMenuBarTextColor() ); + rRenderContext.SetTextColor(rSettings.GetMenuBarTextColor()); else - pWin->SetTextColor( rSettings.GetMenuTextColor() ); + rRenderContext.SetTextColor(rSettings.GetMenuTextColor()); } } if( bLayout ) @@ -2106,21 +2072,21 @@ void Menu::ImplPaint( vcl::Window* pWin, sal_uInt16 nBorder, long nStartY, MenuI Size aLogoSz = pLogo->aBitmap.GetSizePixel(); Rectangle aRect( Point( 0, 0 ), Point( aLogoSz.Width()-1, aOutSz.Height() ) ); - if ( pWin->GetColorCount() >= 256 ) + if (rRenderContext.GetColorCount() >= 256) { Gradient aGrad( GradientStyle_LINEAR, pLogo->aStartColor, pLogo->aEndColor ); aGrad.SetAngle( 1800 ); aGrad.SetBorder( 15 ); - pWin->DrawGradient( aRect, aGrad ); + rRenderContext.DrawGradient(aRect, aGrad); } else { - pWin->SetFillColor( pLogo->aStartColor ); - pWin->DrawRect( aRect ); + rRenderContext.SetFillColor(pLogo->aStartColor); + rRenderContext.DrawRect(aRect); } Point aLogoPos( 0, aOutSz.Height() - aLogoSz.Height() ); - pLogo->aBitmap.Draw( pWin, aLogoPos ); + pLogo->aBitmap.Draw(&rRenderContext, aLogoPos); } } @@ -2260,14 +2226,15 @@ void Menu::ImplFillLayoutData() const if( pWindow && pWindow->IsReallyVisible() ) { mpLayoutData = new MenuLayoutData(); - if (IsMenuBar()) + pWindow->Invalidate(); + if (IsMenuBar()) // FIXME { - ImplPaint( pWindow, 0, 0, 0, false, true ); + //ImplPaint(pWindow, 0, 0, 0, false, true); } else { - MenuFloatingWindow* pFloat = static_cast<MenuFloatingWindow*>(pWindow.get()); - ImplPaint( pWindow, pFloat->nScrollerHeight, pFloat->ImplGetStartY(), 0, false, true ); + //MenuFloatingWindow* pFloat = static_cast<MenuFloatingWindow*>(pWindow.get()); // FIXME + //ImplPaint(pWindow, pFloat->nScrollerHeight, pFloat->ImplGetStartY(), 0, false, true); } } } diff --git a/vcl/source/window/menubarwindow.cxx b/vcl/source/window/menubarwindow.cxx index ef83cac..ac9f6c8 100644 --- a/vcl/source/window/menubarwindow.cxx +++ b/vcl/source/window/menubarwindow.cxx @@ -409,7 +409,7 @@ void MenuBarWindow::MouseMove( const MouseEvent& rMEvt ) if ( rMEvt.IsLeaveWindow() ) { if ( nRolloveredItem != ITEMPOS_INVALID && nRolloveredItem != nHighlightedItem ) - HighlightItem( nRolloveredItem, false ); + Invalidate(); nRolloveredItem = ITEMPOS_INVALID; return; @@ -421,10 +421,10 @@ void MenuBarWindow::MouseMove( const MouseEvent& rMEvt ) if ( nRolloveredItem != nEntry ) { if ( nRolloveredItem != ITEMPOS_INVALID ) - HighlightItem( nRolloveredItem, false ); + Invalidate(); nRolloveredItem = nEntry; - HighlightItem( nRolloveredItem, true ); + Invalidate(); } return; } @@ -508,7 +508,7 @@ void MenuBarWindow::ChangeHighlightItem( sal_uInt16 n, bool bSelectEntry, bool b if ( nHighlightedItem != ITEMPOS_INVALID ) { if ( nHighlightedItem != nRolloveredItem ) - HighlightItem( nHighlightedItem, false ); + Invalidate(); pMenu->ImplCallEventListeners( VCLEVENT_MENU_DEHIGHLIGHT, nHighlightedItem ); } @@ -516,9 +516,9 @@ void MenuBarWindow::ChangeHighlightItem( sal_uInt16 n, bool bSelectEntry, bool b nHighlightedItem = (sal_uInt16)n; DBG_ASSERT( ( nHighlightedItem == ITEMPOS_INVALID ) || pMenu->ImplIsVisible( nHighlightedItem ), "ChangeHighlightItem: Not visible!" ); if ( nHighlightedItem != ITEMPOS_INVALID ) - HighlightItem( nHighlightedItem, true ); + Invalidate(); else if ( nRolloveredItem != ITEMPOS_INVALID ) - HighlightItem( nRolloveredItem, true ); + Invalidate(); pMenu->ImplCallHighlight(nHighlightedItem); if( mbAutoPopup ) @@ -564,113 +564,111 @@ static int ImplGetTopDockingAreaHeight( vcl::Window *pWindow ) return 0; } -static void ImplAddNWFSeparator( vcl::Window *pThis, const MenubarValue& rMenubarValue ) +static void ImplAddNWFSeparator(vcl::RenderContext& rRenderContext, const MenubarValue& rMenubarValue ) { // add a separator if // - we have an adjacent docking area // - and if toolbars would draw them as well (mbDockingAreaSeparateTB must not be set, see dockingarea.cxx) - if( rMenubarValue.maTopDockingAreaHeight && !ImplGetSVData()->maNWFData.mbDockingAreaSeparateTB && !ImplGetSVData()->maNWFData.mbDockingAreaAvoidTBFrames ) + if (rMenubarValue.maTopDockingAreaHeight + && !ImplGetSVData()->maNWFData.mbDockingAreaSeparateTB + && !ImplGetSVData()->maNWFData.mbDockingAreaAvoidTBFrames) { // note: the menubar only provides the upper (dark) half of it, the rest (bright part) is drawn by the docking area - pThis->SetLineColor( pThis->GetSettings().GetStyleSettings().GetSeparatorColor() ); + rRenderContext.SetLineColor(rRenderContext.GetSettings().GetStyleSettings().GetSeparatorColor()); Point aPt; - Rectangle aRect( aPt, pThis->GetOutputSizePixel() ); - pThis->DrawLine( aRect.BottomLeft(), aRect.BottomRight() ); + Rectangle aRect(aPt, rRenderContext.GetOutputSizePixel()); + rRenderContext.DrawLine(aRect.BottomLeft(), aRect.BottomRight()); } } -void MenuBarWindow::HighlightItem( sal_uInt16 nPos, bool bHighlight ) +void MenuBarWindow::HighlightItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos, bool bHighlight) { - if( ! pMenu ) + if (!pMenu) return; long nX = 0; size_t nCount = pMenu->pItemList->size(); - for ( size_t n = 0; n < nCount; n++ ) + for (size_t n = 0; n < nCount; n++) { - MenuItemData* pData = pMenu->pItemList->GetDataFromPos( n ); - if ( n == nPos ) + MenuItemData* pData = pMenu->pItemList->GetDataFromPos(n); + if (n == nPos) { - if ( pData->eType != MenuItemType::SEPARATOR ) + if (pData->eType != MenuItemType::SEPARATOR) { // #107747# give menuitems the height of the menubar - Rectangle aRect = Rectangle( Point( nX, 1 ), Size( pData->aSz.Width(), GetOutputSizePixel().Height()-2 ) ); - Push( PushFlags::CLIPREGION ); - IntersectClipRegion( aRect ); + Rectangle aRect = Rectangle(Point(nX, 1), Size(pData->aSz.Width(), GetOutputSizePixel().Height() - 2)); + rRenderContext.Push(PushFlags::CLIPREGION); + IntersectClipRegion(aRect); bool bRollover = bHighlight && nPos != nHighlightedItem; - if ( bHighlight ) + if (bHighlight) { - if( IsNativeControlSupported( CTRL_MENUBAR, PART_MENU_ITEM ) && - IsNativeControlSupported( CTRL_MENUBAR, PART_ENTIRE_CONTROL ) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENUBAR, PART_MENU_ITEM) && + rRenderContext.IsNativeControlSupported(CTRL_MENUBAR, PART_ENTIRE_CONTROL)) { // draw background (transparency) MenubarValue aControlValue; - aControlValue.maTopDockingAreaHeight = ImplGetTopDockingAreaHeight( this ); + aControlValue.maTopDockingAreaHeight = ImplGetTopDockingAreaHeight(this); - if ( !Application::GetSettings().GetStyleSettings().GetPersonaHeader().IsEmpty() ) - Erase(); + if (!Application::GetSettings().GetStyleSettings().GetPersonaHeader().IsEmpty()) + rRenderContext.Erase(); else { - Point tmp(0,0); - Rectangle aBgRegion( tmp, GetOutputSizePixel() ); - DrawNativeControl( CTRL_MENUBAR, PART_ENTIRE_CONTROL, - aBgRegion, - ControlState::ENABLED, - aControlValue, - OUString() ); + Rectangle aBgRegion(Point(), GetOutputSizePixel()); + rRenderContext.DrawNativeControl(CTRL_MENUBAR, PART_ENTIRE_CONTROL, aBgRegion, + ControlState::ENABLED, aControlValue, OUString() ); } - ImplAddNWFSeparator( this, aControlValue ); + ImplAddNWFSeparator(rRenderContext, aControlValue); // draw selected item ControlState nState = ControlState::ENABLED; - if ( bRollover ) + if (bRollover) nState |= ControlState::ROLLOVER; else nState |= ControlState::SELECTED; - DrawNativeControl( CTRL_MENUBAR, PART_MENU_ITEM, - aRect, - nState, - aControlValue, - OUString() ); + rRenderContext.DrawNativeControl(CTRL_MENUBAR, PART_MENU_ITEM, aRect, + nState, aControlValue, OUString()); } else { - if ( bRollover ) - SetFillColor( GetSettings().GetStyleSettings().GetMenuBarRolloverColor() ); + if (bRollover) + rRenderContext.SetFillColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuBarRolloverColor()); else - SetFillColor( GetSettings().GetStyleSettings().GetMenuHighlightColor() ); - SetLineColor(); - DrawRect( aRect ); + rRenderContext.SetFillColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuHighlightColor()); + rRenderContext.SetLineColor(); + rRenderContext.DrawRect(aRect); } } else { - if( IsNativeControlSupported( CTRL_MENUBAR, PART_ENTIRE_CONTROL) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENUBAR, PART_ENTIRE_CONTROL)) { MenubarValue aMenubarValue; - aMenubarValue.maTopDockingAreaHeight = ImplGetTopDockingAreaHeight( this ); + aMenubarValue.maTopDockingAreaHeight = ImplGetTopDockingAreaHeight(this); - if ( !Application::GetSettings().GetStyleSettings().GetPersonaHeader().IsEmpty() ) - Erase( aRect ); + if (!Application::GetSettings().GetStyleSettings().GetPersonaHeader().IsEmpty()) + { + rRenderContext.Erase(aRect); + } else { // use full window size to get proper gradient // but clip accordingly Point aPt; - Rectangle aCtrlRect( aPt, GetOutputSizePixel() ); - - DrawNativeControl( CTRL_MENUBAR, PART_ENTIRE_CONTROL, aCtrlRect, ControlState::ENABLED, aMenubarValue, OUString() ); + Rectangle aCtrlRect(aPt, rRenderContext.GetOutputSizePixel()); + rRenderContext.DrawNativeControl(CTRL_MENUBAR, PART_ENTIRE_CONTROL, aCtrlRect, ControlState::ENABLED, aMenubarValue, OUString()); } - ImplAddNWFSeparator( this, aMenubarValue ); + ImplAddNWFSeparator(rRenderContext, aMenubarValue); } else - Erase( aRect ); + { + rRenderContext.Erase(aRect); + } } - Pop(); - pMenu->ImplPaint( this, 0, 0, pData, bHighlight, false, bRollover ); + rRenderContext.Pop(); + pMenu->ImplPaint(rRenderContext, 0, 0, pData, bHighlight, false, bRollover); } return; } @@ -871,52 +869,53 @@ bool MenuBarWindow::HandleKeyEvent( const KeyEvent& rKEvent, bool bFromMenu ) return bDone; } -void MenuBarWindow::Paint( vcl::RenderContext& /*rRenderContext*/, const Rectangle& ) +void MenuBarWindow::Paint(vcl::RenderContext& rRenderContext, const Rectangle&) { - if( ! pMenu ) + if (!pMenu) return; // no VCL paint if native menus - if( pMenu->ImplGetSalMenu() && pMenu->ImplGetSalMenu()->VisibleMenuBar() ) + if (pMenu->ImplGetSalMenu() && pMenu->ImplGetSalMenu()->VisibleMenuBar()) { ImplGetFrame()->DrawMenuBar(); return; } - if( IsNativeControlSupported( CTRL_MENUBAR, PART_ENTIRE_CONTROL) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENUBAR, PART_ENTIRE_CONTROL)) { MenubarValue aMenubarValue; aMenubarValue.maTopDockingAreaHeight = ImplGetTopDockingAreaHeight( this ); - if ( !Application::GetSettings().GetStyleSettings().GetPersonaHeader().IsEmpty() ) - Erase(); + if (!Application::GetSettings().GetStyleSettings().GetPersonaHeader().IsEmpty()) + { + rRenderContext.Erase(); + } else { Point aPt; - Rectangle aCtrlRegion( aPt, GetOutputSizePixel() ); - - DrawNativeControl( CTRL_MENUBAR, PART_ENTIRE_CONTROL, aCtrlRegion, ControlState::ENABLED, aMenubarValue, OUString() ); + Rectangle aCtrlRegion(aPt, rRenderContext.GetOutputSizePixel()); + rRenderContext.DrawNativeControl(CTRL_MENUBAR, PART_ENTIRE_CONTROL, aCtrlRegion, + ControlState::ENABLED, aMenubarValue, OUString()); } - ImplAddNWFSeparator( this, aMenubarValue ); + ImplAddNWFSeparator(rRenderContext, aMenubarValue); } - SetFillColor( GetSettings().GetStyleSettings().GetMenuColor() ); - pMenu->ImplPaint( this, 0 ); - if ( nHighlightedItem != ITEMPOS_INVALID ) - HighlightItem( nHighlightedItem, true ); + rRenderContext.SetFillColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuColor()); + pMenu->ImplPaint(rRenderContext, 0); + if (nHighlightedItem != ITEMPOS_INVALID) + HighlightItem(rRenderContext, nHighlightedItem, true); // in high contrast mode draw a separating line on the lower edge - if( ! IsNativeControlSupported( CTRL_MENUBAR, PART_ENTIRE_CONTROL) && - GetSettings().GetStyleSettings().GetHighContrastMode() ) + if (!rRenderContext.IsNativeControlSupported(CTRL_MENUBAR, PART_ENTIRE_CONTROL) && + rRenderContext.GetSettings().GetStyleSettings().GetHighContrastMode()) { - Push( PushFlags::LINECOLOR | PushFlags::MAPMODE ); - SetLineColor( Color( COL_WHITE ) ); - SetMapMode( MapMode( MAP_PIXEL ) ); + rRenderContext.Push(PushFlags::LINECOLOR | PushFlags::MAPMODE); + rRenderContext.SetLineColor(Color(COL_WHITE)); + rRenderContext.SetMapMode(MapMode(MAP_PIXEL)); Size aSize = GetSizePixel(); - DrawLine( Point( 0, aSize.Height()-1 ), Point( aSize.Width()-1, aSize.Height()-1 ) ); - Pop(); + rRenderContext.DrawLine(Point(0, aSize.Height() - 1), Point(aSize.Width() - 1, aSize.Height() - 1)); + rRenderContext.Pop(); } - } void MenuBarWindow::Resize() diff --git a/vcl/source/window/menubarwindow.hxx b/vcl/source/window/menubarwindow.hxx index 348d167..c917d12 100644 --- a/vcl/source/window/menubarwindow.hxx +++ b/vcl/source/window/menubarwindow.hxx @@ -87,7 +87,7 @@ private: std::map< sal_uInt16, AddButtonEntry > m_aAddButtons; - void HighlightItem( sal_uInt16 nPos, bool bHighlight ); + void HighlightItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos, bool bHighlight); virtual void ChangeHighlightItem(sal_uInt16 n, bool bSelectPopupEntry, bool bAllowRestoreFocus = true, bool bDefaultToDocument = true) SAL_OVERRIDE; sal_uInt16 ImplFindEntry( const Point& rMousePos ) const; diff --git a/vcl/source/window/menufloatingwindow.cxx b/vcl/source/window/menufloatingwindow.cxx index a48152e..d3f7a2b 100644 --- a/vcl/source/window/menufloatingwindow.cxx +++ b/vcl/source/window/menufloatingwindow.cxx @@ -61,7 +61,7 @@ MenuFloatingWindow::MenuFloatingWindow( Menu* pMen, vcl::Window* pParent, WinBit void MenuFloatingWindow::doShutdown() { - if( pMenu ) + if (pMenu) { // #105373# notify toolkit that highlight was removed // otherwise the entry will not be read when the menu is opened again @@ -77,11 +77,11 @@ void MenuFloatingWindow::doShutdown() if( pData && ( pData->pSubMenu == pMenu ) ) break; } - if( i < nCount ) + if (i < nCount) { MenuFloatingWindow* pPWin = static_cast<MenuFloatingWindow*>(pMenu->pStartedFrom->ImplGetWindow()); - if( pPWin ) - pPWin->HighlightItem( i, false ); + if (pPWin) + pPWin->Invalidate(); } } @@ -162,7 +162,7 @@ void MenuFloatingWindow::InitMenuClipRegion() void MenuFloatingWindow::ImplHighlightItem( const MouseEvent& rMEvt, bool bMBDown ) { - if( ! pMenu ) + if (!pMenu) return; long nY = nScrollerHeight + ImplGetSVData()->maNWFData.mnMenuFormatBorderY; @@ -562,7 +562,7 @@ void MenuFloatingWindow::ImplScroll( bool bUp ) if( ! pMenu ) return; - HighlightItem( nHighlightedItem, false ); + Invalidate(); pMenu->ImplKillLayoutData(); @@ -612,7 +612,7 @@ void MenuFloatingWindow::ImplScroll( bool bUp ) Scroll( 0, -nScrollEntryHeight, ImplCalcClipRegion( false ).GetBoundRect(), SCROLL_CLIP ); } - HighlightItem( nHighlightedItem, true ); + Invalidate(); } void MenuFloatingWindow::ImplScroll( const Point& rMousePos ) @@ -667,7 +667,7 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime if ( nHighlightedItem != ITEMPOS_INVALID ) { - HighlightItem( nHighlightedItem, false ); + Invalidate(); pMenu->ImplCallEventListeners( VCLEVENT_MENU_DEHIGHLIGHT, nHighlightedItem ); } @@ -690,12 +690,12 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime MenuFloatingWindow* pPWin = static_cast<MenuFloatingWindow*>(pMenu->pStartedFrom->ImplGetWindow()); if( pPWin && pPWin->nHighlightedItem != i ) { - pPWin->HighlightItem( i, true ); + pPWin->Invalidate(); pPWin->nHighlightedItem = i; } } } - HighlightItem( nHighlightedItem, true ); + Invalidate(); pMenu->ImplCallHighlight( nHighlightedItem ); } else @@ -714,26 +714,26 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime } } -void MenuFloatingWindow::HighlightItem( sal_uInt16 nPos, bool bHighlight ) +void MenuFloatingWindow::HighlightItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos, bool bHighlight) { - if( ! pMenu ) + if (!pMenu) return; - Size aSz = GetOutputSizePixel(); - long nStartY = ImplGetStartY(); - long nY = nScrollerHeight + nStartY + ImplGetSVData()->maNWFData.mnMenuFormatBorderY; - long nX = 0; + Size aSz = GetOutputSizePixel(); + long nStartY = ImplGetStartY(); + long nY = nScrollerHeight + nStartY + ImplGetSVData()->maNWFData.mnMenuFormatBorderY; + long nX = 0; - if ( pMenu->pLogo ) + if (pMenu->pLogo) nX = pMenu->pLogo->aBitmap.GetSizePixel().Width(); int nOuterSpaceX = ImplGetSVData()->maNWFData.mnMenuFormatBorderX; size_t nCount = pMenu->pItemList->size(); - for ( size_t n = 0; n < nCount; n++ ) + for (size_t n = 0; n < nCount; n++) { - MenuItemData* pData = pMenu->pItemList->GetDataFromPos( n ); - if ( n == nPos ) + MenuItemData* pData = pMenu->pItemList->GetDataFromPos(n); + if (n == nPos) { DBG_ASSERT( pMenu->ImplIsVisible( n ), "Highlight: Item not visible!" ); if ( pData->eType != MenuItemType::SEPARATOR ) @@ -742,64 +742,65 @@ void MenuFloatingWindow::HighlightItem( sal_uInt16 nPos, bool bHighlight ) Color oldLineColor; bool bDrawItemRect = true; - Rectangle aItemRect( Point( nX+nOuterSpaceX, nY ), Size( aSz.Width()-2*nOuterSpaceX, pData->aSz.Height() ) ); - if ( pData->nBits & MenuItemBits::POPUPSELECT ) + Rectangle aItemRect(Point(nX + nOuterSpaceX, nY), Size(aSz.Width() - 2 * nOuterSpaceX, pData->aSz.Height())); + if (pData->nBits & MenuItemBits::POPUPSELECT) { - long nFontHeight = GetTextHeight(); - aItemRect.Right() -= nFontHeight + nFontHeight/4; + long nFontHeight = rRenderContext.GetTextHeight(); + aItemRect.Right() -= nFontHeight + nFontHeight / 4; } - if( IsNativeControlSupported( CTRL_MENU_POPUP, PART_ENTIRE_CONTROL ) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_ENTIRE_CONTROL)) { - Size aPxSize( GetOutputSizePixel() ); - Push( PushFlags::CLIPREGION ); - IntersectClipRegion( Rectangle( Point( nX, nY ), Size( aSz.Width(), pData->aSz.Height() ) ) ); - Rectangle aCtrlRect( Point( nX, 0 ), Size( aPxSize.Width()-nX, aPxSize.Height() ) ); - MenupopupValue aVal( pMenu->nTextPos-GUTTERBORDER, aItemRect ); - DrawNativeControl( CTRL_MENU_POPUP, PART_ENTIRE_CONTROL, - aCtrlRect, - ControlState::ENABLED, - aVal, - OUString() ); - if( bHighlight && - IsNativeControlSupported( CTRL_MENU_POPUP, PART_MENU_ITEM ) ) + Size aPxSize(rRenderContext.GetOutputSizePixel()); + rRenderContext.Push(PushFlags::CLIPREGION); + rRenderContext.IntersectClipRegion(Rectangle(Point(nX, nY), Size(aSz.Width(), pData->aSz.Height()))); + Rectangle aCtrlRect(Point(nX, 0), Size(aPxSize.Width() - nX, aPxSize.Height())); + MenupopupValue aVal(pMenu->nTextPos - GUTTERBORDER, aItemRect); + rRenderContext.DrawNativeControl(CTRL_MENU_POPUP, PART_ENTIRE_CONTROL, aCtrlRect, + ControlState::ENABLED, aVal, OUString()); + if (bHighlight && + rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_MENU_ITEM)) { bDrawItemRect = false; - if( !DrawNativeControl( CTRL_MENU_POPUP, PART_MENU_ITEM, + if (!rRenderContext.DrawNativeControl(CTRL_MENU_POPUP, PART_MENU_ITEM, aItemRect, ControlState::SELECTED | ( pData->bEnabled? ControlState::ENABLED: ControlState::NONE ), - aVal, - OUString() ) ) + aVal, OUString())) { bDrawItemRect = bHighlight; } } else + { bDrawItemRect = bHighlight; - Pop(); + } + rRenderContext.Pop(); } - if( bDrawItemRect ) + if (bDrawItemRect) { - if ( bHighlight ) + if (bHighlight) { - if( pData->bEnabled ) - SetFillColor( GetSettings().GetStyleSettings().GetMenuHighlightColor() ); + if (pData->bEnabled) + { + rRenderContext.SetFillColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuHighlightColor()); + } else { - SetFillColor(); - oldLineColor = GetLineColor(); - SetLineColor( GetSettings().GetStyleSettings().GetMenuHighlightColor() ); + rRenderContext.SetFillColor(); + oldLineColor = rRenderContext.GetLineColor(); + rRenderContext.SetLineColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuHighlightColor()); bRestoreLineColor = true; } } else - SetFillColor( GetSettings().GetStyleSettings().GetMenuColor() ); - - DrawRect( aItemRect ); + { + rRenderContext.SetFillColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuColor()); + } + rRenderContext.DrawRect(aItemRect); } - pMenu->ImplPaint( this, nScrollerHeight, nStartY, pData, bHighlight ); - if( bRestoreLineColor ) - SetLineColor( oldLineColor ); + pMenu->ImplPaint(rRenderContext, nScrollerHeight, nStartY, pData, bHighlight); + if (bRestoreLineColor) + rRenderContext.SetLineColor(oldLineColor); } return; } @@ -1086,34 +1087,32 @@ void MenuFloatingWindow::KeyInput( const KeyEvent& rKEvent ) } } -void MenuFloatingWindow::Paint( vcl::RenderContext& /*rRenderContext*/, const Rectangle& ) +void MenuFloatingWindow::Paint( vcl::RenderContext& rRenderContext, const Rectangle& ) { - if( ! pMenu ) + if (!pMenu) return; - if( IsNativeControlSupported( CTRL_MENU_POPUP, PART_ENTIRE_CONTROL ) ) + if (rRenderContext.IsNativeControlSupported(CTRL_MENU_POPUP, PART_ENTIRE_CONTROL)) { - SetClipRegion(); + rRenderContext.SetClipRegion(); long nX = pMenu->pLogo ? pMenu->pLogo->aBitmap.GetSizePixel().Width() : 0; - Size aPxSize( GetOutputSizePixel() ); + Size aPxSize(rRenderContext.GetOutputSizePixel()); aPxSize.Width() -= nX; - ImplControlValue aVal( pMenu->nTextPos-GUTTERBORDER ); - DrawNativeControl( CTRL_MENU_POPUP, PART_ENTIRE_CONTROL, - Rectangle( Point( nX, 0 ), aPxSize ), - ControlState::ENABLED, - aVal, - OUString() ); + ImplControlValue aVal(pMenu->nTextPos - GUTTERBORDER); + DrawNativeControl(CTRL_MENU_POPUP, PART_ENTIRE_CONTROL, + Rectangle(Point(nX, 0), aPxSize), + ControlState::ENABLED, aVal, OUString()); InitMenuClipRegion(); } - if ( IsScrollMenu() ) + if (IsScrollMenu()) { - ImplDrawScroller( true ); - ImplDrawScroller( false ); + ImplDrawScroller(true); + ImplDrawScroller(false); } - SetFillColor( GetSettings().GetStyleSettings().GetMenuColor() ); - pMenu->ImplPaint( this, nScrollerHeight, ImplGetStartY() ); - if ( nHighlightedItem != ITEMPOS_INVALID ) - HighlightItem( nHighlightedItem, true ); + rRenderContext.SetFillColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuColor()); + pMenu->ImplPaint(rRenderContext, nScrollerHeight, ImplGetStartY()); + if (nHighlightedItem != ITEMPOS_INVALID) + HighlightItem(rRenderContext, nHighlightedItem, true); } void MenuFloatingWindow::ImplDrawScroller( bool bUp ) diff --git a/vcl/source/window/menufloatingwindow.hxx b/vcl/source/window/menufloatingwindow.hxx index 021247a..efc38467 100644 --- a/vcl/source/window/menufloatingwindow.hxx +++ b/vcl/source/window/menufloatingwindow.hxx @@ -90,7 +90,7 @@ public: virtual void MouseButtonUp( const MouseEvent& rMEvt ) SAL_OVERRIDE; virtual void KeyInput( const KeyEvent& rKEvent ) SAL_OVERRIDE; virtual void Command( const CommandEvent& rCEvt ) SAL_OVERRIDE; - virtual void Paint( vcl::RenderContext& /*rRenderContext*/, const Rectangle& rRect ) SAL_OVERRIDE; + virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle& rRect) SAL_OVERRIDE; virtual void RequestHelp( const HelpEvent& rHEvt ) SAL_OVERRIDE; virtual void Resize() SAL_OVERRIDE; @@ -109,7 +109,7 @@ public: PopupMenu* GetActivePopup() const { return pActivePopup; } void KillActivePopup( PopupMenu* pThisOnly = NULL ); - void HighlightItem( sal_uInt16 nPos, bool bHighlight ); + void HighlightItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos, bool bHighlight); void ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTimer ); sal_uInt16 GetHighlightedItem() const { return nHighlightedItem; } commit ac6c725167797c15f1dd5b7de4bf63ddeae0ada7 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Wed May 6 07:48:16 2015 +0900 Refactor "Edit" to use RenderContext when painting Change-Id: I41f3fa14ee06339685b608d1081466d4622999da diff --git a/include/vcl/edit.hxx b/include/vcl/edit.hxx index dde925f..fdcbad1 100644 --- a/include/vcl/edit.hxx +++ b/include/vcl/edit.hxx @@ -111,8 +111,8 @@ private: SAL_DLLPRIVATE void ImplSetText( const OUString& rStr, const Selection* pNewSelection = 0 ); SAL_DLLPRIVATE void ImplInsertText( const OUString& rStr, const Selection* pNewSelection = 0, bool bIsUserInput = false ); SAL_DLLPRIVATE OUString ImplGetValidString( const OUString& rString ) const; - SAL_DLLPRIVATE void ImplClearBackground( long nXStart, long nXEnd ); - SAL_DLLPRIVATE void ImplPaintBorder( long nXStart, long nXEnd ); + SAL_DLLPRIVATE void ImplClearBackground(vcl::RenderContext& rRenderContext, long nXStart, long nXEnd); + SAL_DLLPRIVATE void ImplPaintBorder(vcl::RenderContext& rRenderContext, long nXStart, long nXEnd); SAL_DLLPRIVATE void ImplShowCursor( bool bOnlyIfVisible = true ); SAL_DLLPRIVATE void ImplAlign(); SAL_DLLPRIVATE void ImplAlignAndPaint(); diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index ece4f56..90a88fb 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -487,220 +487,223 @@ long Edit::ImplGetTextYPosition() const return ( GetOutputSizePixel().Height() - GetTextHeight() ) / 2; } -void Edit::ImplRepaint(vcl::RenderContext& /*rRenderContext*/, bool bLayout) +void Edit::ImplRepaint(vcl::RenderContext& rRenderContext, bool bLayout) { - if ( !IsReallyVisible() ) + if (!IsReallyVisible()) return; OUString aText = ImplGetText(); sal_Int32 nLen = aText.getLength(); - long nDXBuffer[256]; + long nDXBuffer[256]; boost::scoped_array<long> pDXBuffer; - long* pDX = nDXBuffer; + long* pDX = nDXBuffer; - if( !aText.isEmpty() ) + if (!aText.isEmpty()) { - if( (size_t) (2*aText.getLength()) > SAL_N_ELEMENTS(nDXBuffer) ) + if ((size_t) (2 * aText.getLength()) > SAL_N_ELEMENTS(nDXBuffer)) { - pDXBuffer.reset(new long[2*(aText.getLength()+1)]); + pDXBuffer.reset(new long[2 * (aText.getLength() + 1)]); pDX = pDXBuffer.get(); } - GetCaretPositions( aText, pDX, 0, nLen ); + GetCaretPositions(aText, pDX, 0, nLen); } - long nTH = GetTextHeight(); - Point aPos( mnXOffset, ImplGetTextYPosition() ); + long nTH = GetTextHeight(); + Point aPos(mnXOffset, ImplGetTextYPosition()); - if( bLayout ) + if (bLayout) { aPos.X() = mnXOffset + ImplGetExtraOffset(); MetricVector* pVector = &mpControlData->mpLayoutData->m_aUnicodeBoundRects; OUString* pDisplayText = &mpControlData->mpLayoutData->m_aDisplayText; - DrawText( aPos, aText, 0, nLen, pVector, pDisplayText ); - + rRenderContext.DrawText(aPos, aText, 0, nLen, pVector, pDisplayText); return; } vcl::Cursor* pCursor = GetCursor(); bool bVisCursor = pCursor && pCursor->IsVisible(); - if ( pCursor ) + if (pCursor) pCursor->Hide(); - ImplClearBackground( 0, GetOutputSizePixel().Width() ); + ImplClearBackground(rRenderContext, 0, GetOutputSizePixel().Width()); bool bPaintPlaceholderText = aText.isEmpty() && !maPlaceholderText.isEmpty(); - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - if ( IsEnabled() ) - ImplInitSettings( false, true, false ); - if ( !IsEnabled() || bPaintPlaceholderText ) - SetTextColor( rStyleSettings.GetDisableColor() ); + const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings(); + if (IsEnabled()) + ImplInitSettings(false, true, false); + if (!IsEnabled() || bPaintPlaceholderText) + rRenderContext.SetTextColor(rStyleSettings.GetDisableColor()); // Set background color of the normal text - if( (GetStyle() & WB_FORCECTRLBACKGROUND) != 0 && IsControlBackground() ) + if ((GetStyle() & WB_FORCECTRLBACKGROUND) != 0 && IsControlBackground()) { // check if we need to set ControlBackground even in NWF case - Push( PushFlags::FILLCOLOR | PushFlags::LINECOLOR ); - SetLineColor(); - SetFillColor( GetControlBackground() ); - DrawRect( Rectangle( aPos, Size( GetOutputSizePixel().Width() - 2*mnXOffset, GetOutputSizePixel().Height() ) ) ); - Pop(); + rRenderContext.Push(PushFlags::FILLCOLOR | PushFlags::LINECOLOR); + rRenderContext.SetLineColor(); + rRenderContext.SetFillColor(GetControlBackground()); + rRenderContext.DrawRect(Rectangle(aPos, Size(GetOutputSizePixel().Width() - 2 * mnXOffset, GetOutputSizePixel().Height()))); + rRenderContext.Pop(); - SetTextFillColor( GetControlBackground() ); + SetTextFillColor(GetControlBackground()); } - else if( IsPaintTransparent() || ImplUseNativeBorder( GetStyle() ) ) - SetTextFillColor(); + else if (IsPaintTransparent() || ImplUseNativeBorder(GetStyle())) + rRenderContext.SetTextFillColor(); else - SetTextFillColor( IsControlBackground() ? GetControlBackground() : rStyleSettings.GetFieldColor() ); + rRenderContext.SetTextFillColor(IsControlBackground() ? GetControlBackground() : rStyleSettings.GetFieldColor()); - ImplPaintBorder( 0, GetOutputSizePixel().Width() ); + ImplPaintBorder(rRenderContext, 0, GetOutputSizePixel().Width()); - bool bDrawSelection = maSelection.Len() && ( HasFocus() || ( GetStyle() & WB_NOHIDESELECTION ) || mbActivePopup ); + bool bDrawSelection = maSelection.Len() && (HasFocus() || (GetStyle() & WB_NOHIDESELECTION) || mbActivePopup); aPos.X() = mnXOffset + ImplGetExtraOffset(); - if ( bPaintPlaceholderText ) + if (bPaintPlaceholderText) { - DrawText( aPos, maPlaceholderText ); + rRenderContext.DrawText(aPos, maPlaceholderText); } - else if ( !bDrawSelection && !mpIMEInfos ) + else if (!bDrawSelection && !mpIMEInfos) { - DrawText( aPos, aText, 0, nLen ); + rRenderContext.DrawText(aPos, aText, 0, nLen); } else { // save graphics state - Push(); + rRenderContext.Push(); // first calculate higlighted and non highlighted clip regions vcl::Region aHiglightClipRegion; vcl::Region aNormalClipRegion; - Selection aTmpSel( maSelection ); + Selection aTmpSel(maSelection); aTmpSel.Justify(); // selection is highlighted int i; - for( i = 0; i < aText.getLength(); i++ ) + for(i = 0; i < aText.getLength(); i++) { - Rectangle aRect( aPos, Size( 10, nTH ) ); - aRect.Left() = pDX[2*i] + mnXOffset + ImplGetExtraOffset(); - aRect.Right() = pDX[2*i+1] + mnXOffset + ImplGetExtraOffset(); + Rectangle aRect(aPos, Size(10, nTH)); + aRect.Left() = pDX[2 * i] + mnXOffset + ImplGetExtraOffset(); + aRect.Right() = pDX[2 * i + 1] + mnXOffset + ImplGetExtraOffset(); aRect.Justify(); bool bHighlight = false; - if( i >= aTmpSel.Min() && i < aTmpSel.Max() ) + if (i >= aTmpSel.Min() && i < aTmpSel.Max()) bHighlight = true; - if( mpIMEInfos && mpIMEInfos->pAttribs && - i >= mpIMEInfos->nPos && i < (mpIMEInfos->nPos+mpIMEInfos->nLen ) && - ( mpIMEInfos->pAttribs[i-mpIMEInfos->nPos] & EXTTEXTINPUT_ATTR_HIGHLIGHT) ) + if (mpIMEInfos && mpIMEInfos->pAttribs && + i >= mpIMEInfos->nPos && i < (mpIMEInfos->nPos+mpIMEInfos->nLen) && + (mpIMEInfos->pAttribs[i - mpIMEInfos->nPos] & EXTTEXTINPUT_ATTR_HIGHLIGHT)) + { bHighlight = true; + } - if( bHighlight ) - aHiglightClipRegion.Union( aRect ); + if (bHighlight) + aHiglightClipRegion.Union(aRect); else - aNormalClipRegion.Union( aRect ); + aNormalClipRegion.Union(aRect); } // draw normal text - Color aNormalTextColor = GetTextColor(); - SetClipRegion( aNormalClipRegion ); + Color aNormalTextColor = rRenderContext.GetTextColor(); + SetClipRegion(aNormalClipRegion); - if( IsPaintTransparent() ) - SetTextFillColor(); + if (IsPaintTransparent()) + rRenderContext.SetTextFillColor(); else { // Set background color when part of the text is selected - if ( ImplUseNativeBorder( GetStyle() ) ) + if (ImplUseNativeBorder(GetStyle())) { if( (GetStyle() & WB_FORCECTRLBACKGROUND) != 0 && IsControlBackground() ) - SetTextFillColor( GetControlBackground() ); + rRenderContext.SetTextFillColor(GetControlBackground()); else - SetTextFillColor(); + rRenderContext.SetTextFillColor(); } else - SetTextFillColor( IsControlBackground() ? GetControlBackground() : rStyleSettings.GetFieldColor() ); + { + rRenderContext.SetTextFillColor(IsControlBackground() ? GetControlBackground() : rStyleSettings.GetFieldColor()); + } } - DrawText( aPos, aText, 0, nLen ); + rRenderContext.DrawText(aPos, aText, 0, nLen); // draw highlighted text - SetClipRegion( aHiglightClipRegion ); - SetTextColor( rStyleSettings.GetHighlightTextColor() ); - SetTextFillColor( rStyleSettings.GetHighlightColor() ); - DrawText( aPos, aText, 0, nLen ); + rRenderContext.SetClipRegion(aHiglightClipRegion); + rRenderContext.SetTextColor(rStyleSettings.GetHighlightTextColor()); + rRenderContext.SetTextFillColor(rStyleSettings.GetHighlightColor()); + rRenderContext.DrawText(aPos, aText, 0, nLen); // if IME info exists loop over portions and output different font attributes - if( mpIMEInfos && mpIMEInfos->pAttribs ) + if (mpIMEInfos && mpIMEInfos->pAttribs) { - for( int n = 0; n < 2; n++ ) + for(int n = 0; n < 2; n++) { vcl::Region aRegion; - if( n == 0 ) + if (n == 0) { - SetTextColor( aNormalTextColor ); - if( IsPaintTransparent() ) - SetTextFillColor(); + rRenderContext.SetTextColor(aNormalTextColor); + if (IsPaintTransparent()) + rRenderContext.SetTextFillColor(); else - SetTextFillColor( IsControlBackground() ? GetControlBackground() : rStyleSettings.GetFieldColor() ); + rRenderContext.SetTextFillColor(IsControlBackground() ? GetControlBackground() : rStyleSettings.GetFieldColor()); aRegion = aNormalClipRegion; } else { - SetTextColor( rStyleSettings.GetHighlightTextColor() ); - SetTextFillColor( rStyleSettings.GetHighlightColor() ); + rRenderContext.SetTextColor(rStyleSettings.GetHighlightTextColor()); + rRenderContext.SetTextFillColor(rStyleSettings.GetHighlightColor()); aRegion = aHiglightClipRegion; } - for( i = 0; i < mpIMEInfos->nLen; ) + for(i = 0; i < mpIMEInfos->nLen; ) { sal_uInt16 nAttr = mpIMEInfos->pAttribs[i]; vcl::Region aClip; int nIndex = i; - while( nIndex < mpIMEInfos->nLen && mpIMEInfos->pAttribs[nIndex] == nAttr) // #112631# check nIndex before using it + while (nIndex < mpIMEInfos->nLen && mpIMEInfos->pAttribs[nIndex] == nAttr) // #112631# check nIndex before using it { Rectangle aRect( aPos, Size( 10, nTH ) ); - aRect.Left() = pDX[2*(nIndex+mpIMEInfos->nPos)] + mnXOffset + ImplGetExtraOffset(); - aRect.Right() = pDX[2*(nIndex+mpIMEInfos->nPos)+1] + mnXOffset + ImplGetExtraOffset(); + aRect.Left() = pDX[2 * (nIndex + mpIMEInfos->nPos)] + mnXOffset + ImplGetExtraOffset(); + aRect.Right() = pDX[2 * (nIndex + mpIMEInfos->nPos) + 1] + mnXOffset + ImplGetExtraOffset(); aRect.Justify(); - aClip.Union( aRect ); + aClip.Union(aRect); nIndex++; } i = nIndex; aClip.Intersect(aRegion); - if( !aClip.IsEmpty() && nAttr ) + if (!aClip.IsEmpty() && nAttr) { - vcl::Font aFont = GetFont(); - if ( nAttr & EXTTEXTINPUT_ATTR_UNDERLINE ) - aFont.SetUnderline( UNDERLINE_SINGLE ); - else if ( nAttr & EXTTEXTINPUT_ATTR_BOLDUNDERLINE ) - aFont.SetUnderline( UNDERLINE_BOLD ); - else if ( nAttr & EXTTEXTINPUT_ATTR_DOTTEDUNDERLINE ) - aFont.SetUnderline( UNDERLINE_DOTTED ); - else if ( nAttr & EXTTEXTINPUT_ATTR_DASHDOTUNDERLINE ) - aFont.SetUnderline( UNDERLINE_DASHDOT ); - else if ( nAttr & EXTTEXTINPUT_ATTR_GRAYWAVELINE ) + vcl::Font aFont = rRenderContext.GetFont(); + if (nAttr & EXTTEXTINPUT_ATTR_UNDERLINE) + aFont.SetUnderline(UNDERLINE_SINGLE); + else if (nAttr & EXTTEXTINPUT_ATTR_BOLDUNDERLINE) + aFont.SetUnderline( UNDERLINE_BOLD); + else if (nAttr & EXTTEXTINPUT_ATTR_DOTTEDUNDERLINE) + aFont.SetUnderline( UNDERLINE_DOTTED); + else if (nAttr & EXTTEXTINPUT_ATTR_DASHDOTUNDERLINE) + aFont.SetUnderline( UNDERLINE_DASHDOT); + else if (nAttr & EXTTEXTINPUT_ATTR_GRAYWAVELINE) { - aFont.SetUnderline( UNDERLINE_WAVE ); - SetTextLineColor( Color( COL_LIGHTGRAY ) ); + aFont.SetUnderline(UNDERLINE_WAVE); + rRenderContext.SetTextLineColor(Color(COL_LIGHTGRAY)); } - SetFont( aFont ); + rRenderContext.SetFont(aFont); - if ( nAttr & EXTTEXTINPUT_ATTR_REDTEXT ) - SetTextColor( Color( COL_RED ) ); - else if ( nAttr & EXTTEXTINPUT_ATTR_HALFTONETEXT ) - SetTextColor( Color( COL_LIGHTGRAY ) ); + if (nAttr & EXTTEXTINPUT_ATTR_REDTEXT) + rRenderContext.SetTextColor(Color(COL_RED)); + else if (nAttr & EXTTEXTINPUT_ATTR_HALFTONETEXT) + rRenderContext.SetTextColor(Color(COL_LIGHTGRAY)); - SetClipRegion( aClip ); - DrawText( aPos, aText, 0, nLen ); + rRenderContext.SetClipRegion(aClip); + rRenderContext.DrawText(aPos, aText, 0, nLen); } } } } // restore graphics state - Pop(); + rRenderContext.Pop(); } - if ( bVisCursor && ( !mpIMEInfos || mpIMEInfos->bCursor ) ) + if (bVisCursor && (!mpIMEInfos || mpIMEInfos->bCursor)) pCursor->Show(); } @@ -1006,79 +1009,80 @@ int Edit::ImplGetNativeControlType() const return nCtrl; } -void Edit::ImplClearBackground( long nXStart, long nXEnd ) +void Edit::ImplClearBackground(vcl::RenderContext& rRenderContext, long nXStart, long nXEnd ) { /* * note: at this point the cursor must be switched off already */ Point aTmpPoint; - Rectangle aRect( aTmpPoint, GetOutputSizePixel() ); + Rectangle aRect(aTmpPoint, GetOutputSizePixel()); aRect.Left() = nXStart; aRect.Right() = nXEnd; - if( !(ImplUseNativeBorder( GetStyle() ) || IsPaintTransparent()) ) - Erase( aRect ); + if( !(ImplUseNativeBorder(GetStyle() ) || IsPaintTransparent())) + rRenderContext.Erase(aRect); } -void Edit::ImplPaintBorder( long nXStart, long nXEnd ) +void Edit::ImplPaintBorder(vcl::RenderContext& rRenderContext, long nXStart, long nXEnd) { Point aTmpPoint; - Rectangle aRect( aTmpPoint, GetOutputSizePixel() ); + Rectangle aRect(aTmpPoint, GetOutputSizePixel()); aRect.Left() = nXStart; aRect.Right() = nXEnd; - if( ImplUseNativeBorder( GetStyle() ) || IsPaintTransparent() ) + if (ImplUseNativeBorder(GetStyle()) || IsPaintTransparent()) { // draw the inner part by painting the whole control using its border window - vcl::Window *pBorder = GetWindow( WINDOW_BORDER ); - if( pBorder == this ) + vcl::Window* pBorder = GetWindow(WINDOW_BORDER); + if (pBorder == this) { // we have no border, use parent - vcl::Window *pControl = mbIsSubEdit ? GetParent() : this; - pBorder = pControl->GetWindow( WINDOW_BORDER ); - if( pBorder == this ) + vcl::Window* pControl = mbIsSubEdit ? GetParent() : this; + pBorder = pControl->GetWindow(WINDOW_BORDER); + if (pBorder == this) pBorder = GetParent(); } - if( pBorder ) + if (pBorder) { // set proper clipping region to not overdraw the whole control vcl::Region aClipRgn = GetPaintRegion(); - if( !aClipRgn.IsNull() ) + if (!aClipRgn.IsNull()) { // transform clipping region to border window's coordinate system - if( IsRTLEnabled() != pBorder->IsRTLEnabled() && AllSettings::GetLayoutRTL() ) + if (IsRTLEnabled() != pBorder->IsRTLEnabled() && AllSettings::GetLayoutRTL()) { // need to mirror in case border is not RTL but edit is (or vice versa) // mirror - Rectangle aBounds( aClipRgn.GetBoundRect() ); - int xNew = GetOutputSizePixel().Width() - aBounds.GetWidth() - aBounds.Left(); - aClipRgn.Move( xNew - aBounds.Left(), 0 ); + Rectangle aBounds(aClipRgn.GetBoundRect()); + int xNew = rRenderContext.GetOutputSizePixel().Width() - aBounds.GetWidth() - aBounds.Left(); + aClipRgn.Move(xNew - aBounds.Left(), 0); // move offset of border window Point aBorderOffs; - aBorderOffs = pBorder->ScreenToOutputPixel( OutputToScreenPixel( aBorderOffs ) ); - aClipRgn.Move( aBorderOffs.X(), aBorderOffs.Y() ); + aBorderOffs = pBorder->ScreenToOutputPixel(OutputToScreenPixel(aBorderOffs)); + aClipRgn.Move(aBorderOffs.X(), aBorderOffs.Y()); } else { // normal case Point aBorderOffs; - aBorderOffs = pBorder->ScreenToOutputPixel( OutputToScreenPixel( aBorderOffs ) ); - aClipRgn.Move( aBorderOffs.X(), aBorderOffs.Y() ); + aBorderOffs = pBorder->ScreenToOutputPixel(OutputToScreenPixel(aBorderOffs)); + aClipRgn.Move(aBorderOffs.X(), aBorderOffs.Y()); } - vcl::Region oldRgn( pBorder->GetClipRegion() ); - pBorder->SetClipRegion( aClipRgn ); + vcl::Region oldRgn(pBorder->GetClipRegion()); + pBorder->SetClipRegion(aClipRgn); - pBorder->Paint(*pBorder, Rectangle()); + pBorder->Paint(*pBorder, Rectangle()); // FIXME - pBorder->SetClipRegion( oldRgn ); + pBorder->SetClipRegion(oldRgn); } else - pBorder->Paint(*pBorder, Rectangle()); - + { + pBorder->Paint(*pBorder, Rectangle()); // FIXME + } } } }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits