Kaydet (Commit) 4532ea42 authored tarafından Miklos Vajna's avatar Miklos Vajna

tdf#92982 vcl rendercontext: simplify Edit::ImplClearBackground() logic

This fixes the vertical rendering artifacts visible on the bug
screenshot with the oxygen-gtk Gtk theme, and also is a lot simpler than
what we did here before.

Change-Id: I21a167452f14ae52bd0d899b3ed467ce40540dec
Reviewed-on: https://gerrit.libreoffice.org/17631Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
Tested-by: 's avatarJenkins <ci@libreoffice.org>
üst e12dc8fe
...@@ -113,13 +113,13 @@ private: ...@@ -113,13 +113,13 @@ private:
SAL_DLLPRIVATE void ImplInitEditData(); SAL_DLLPRIVATE void ImplInitEditData();
SAL_DLLPRIVATE void ImplModified(); SAL_DLLPRIVATE void ImplModified();
SAL_DLLPRIVATE OUString ImplGetText() const; SAL_DLLPRIVATE OUString ImplGetText() const;
SAL_DLLPRIVATE void ImplRepaint(vcl::RenderContext& rRenderContext, bool bLayout = false); SAL_DLLPRIVATE void ImplRepaint(vcl::RenderContext& rRenderContext, const Rectangle& rRectangle, bool bLayout = false);
SAL_DLLPRIVATE void ImplInvalidateOrRepaint(); SAL_DLLPRIVATE void ImplInvalidateOrRepaint();
SAL_DLLPRIVATE void ImplDelete( const Selection& rSelection, sal_uInt8 nDirection, sal_uInt8 nMode ); SAL_DLLPRIVATE void ImplDelete( const Selection& rSelection, sal_uInt8 nDirection, sal_uInt8 nMode );
SAL_DLLPRIVATE void ImplSetText( const OUString& rStr, const Selection* pNewSelection = 0 ); 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 void ImplInsertText( const OUString& rStr, const Selection* pNewSelection = 0, bool bIsUserInput = false );
SAL_DLLPRIVATE OUString ImplGetValidString( const OUString& rString ) const; SAL_DLLPRIVATE OUString ImplGetValidString( const OUString& rString ) const;
SAL_DLLPRIVATE void ImplClearBackground(vcl::RenderContext& rRenderContext, long nXStart, long nXEnd); SAL_DLLPRIVATE void ImplClearBackground(vcl::RenderContext& rRenderContext, const Rectangle& rRectangle, long nXStart, long nXEnd);
SAL_DLLPRIVATE void ImplPaintBorder(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 ImplShowCursor( bool bOnlyIfVisible = true );
SAL_DLLPRIVATE void ImplAlign(); SAL_DLLPRIVATE void ImplAlign();
......
...@@ -501,7 +501,7 @@ long Edit::ImplGetTextYPosition() const ...@@ -501,7 +501,7 @@ long Edit::ImplGetTextYPosition() const
return ( GetOutputSizePixel().Height() - GetTextHeight() ) / 2; return ( GetOutputSizePixel().Height() - GetTextHeight() ) / 2;
} }
void Edit::ImplRepaint(vcl::RenderContext& rRenderContext, bool bLayout) void Edit::ImplRepaint(vcl::RenderContext& rRenderContext, const Rectangle& rRectangle, bool bLayout)
{ {
if (!IsReallyVisible()) if (!IsReallyVisible())
return; return;
...@@ -543,7 +543,7 @@ void Edit::ImplRepaint(vcl::RenderContext& rRenderContext, bool bLayout) ...@@ -543,7 +543,7 @@ void Edit::ImplRepaint(vcl::RenderContext& rRenderContext, bool bLayout)
if (pCursor) if (pCursor)
pCursor->Hide(); pCursor->Hide();
ImplClearBackground(rRenderContext, 0, GetOutputSizePixel().Width()); ImplClearBackground(rRenderContext, rRectangle, 0, GetOutputSizePixel().Width());
bool bPaintPlaceholderText = aText.isEmpty() && !maPlaceholderText.isEmpty(); bool bPaintPlaceholderText = aText.isEmpty() && !maPlaceholderText.isEmpty();
...@@ -1022,7 +1022,7 @@ int Edit::ImplGetNativeControlType() const ...@@ -1022,7 +1022,7 @@ int Edit::ImplGetNativeControlType() const
return nCtrl; return nCtrl;
} }
void Edit::ImplClearBackground(vcl::RenderContext& rRenderContext, long nXStart, long nXEnd ) void Edit::ImplClearBackground(vcl::RenderContext& rRenderContext, const Rectangle& rRectangle, long nXStart, long nXEnd )
{ {
/* /*
* note: at this point the cursor must be switched off already * note: at this point the cursor must be switched off already
...@@ -1038,22 +1038,8 @@ void Edit::ImplClearBackground(vcl::RenderContext& rRenderContext, long nXStart, ...@@ -1038,22 +1038,8 @@ void Edit::ImplClearBackground(vcl::RenderContext& rRenderContext, long nXStart,
{ {
// ImplPaintBorder() is a NOP, we have a native border, and this is a sub-edit of a control. // ImplPaintBorder() is a NOP, we have a native border, and this is a sub-edit of a control.
// That means we have to draw the parent native widget to paint the edit area to clear our background. // That means we have to draw the parent native widget to paint the edit area to clear our background.
long nLeft = mnXOffset + ImplGetExtraXOffset(); PaintBufferGuard g(ImplGetWindowImpl()->mpFrameData, GetParent());
long nTop = ImplGetTextYPosition(); GetParent()->Paint(rRenderContext, rRectangle);
long nRight = GetOutputWidthPixel();
long nHeight = GetTextHeight();
Rectangle aEditArea(nLeft, nTop, nRight, nTop + nHeight);
ControlType aCtrlType = ImplGetNativeControlType();
ControlPart aCtrlPart = PART_ENTIRE_CONTROL;
Rectangle aCtrlRegion(0, 0, GetParent()->GetOutputWidthPixel(), GetParent()->GetOutputHeightPixel());
ControlState nState = ControlState::ENABLED;
ImplControlValue aControlValue;
rRenderContext.Push(PushFlags::CLIPREGION);
rRenderContext.SetClipRegion(vcl::Region(aEditArea));
rRenderContext.DrawNativeControl(aCtrlType, aCtrlPart, aCtrlRegion, nState, aControlValue, OUString());
rRenderContext.Pop();
} }
} }
...@@ -1806,10 +1792,10 @@ void Edit::FillLayoutData() const ...@@ -1806,10 +1792,10 @@ void Edit::FillLayoutData() const
const_cast<Edit*>(this)->Invalidate(); const_cast<Edit*>(this)->Invalidate();
} }
void Edit::Paint(vcl::RenderContext& rRenderContext, const Rectangle&) void Edit::Paint(vcl::RenderContext& rRenderContext, const Rectangle& rRectangle)
{ {
if (!mpSubEdit) if (!mpSubEdit)
ImplRepaint(rRenderContext); ImplRepaint(rRenderContext, rRectangle);
} }
void Edit::Resize() void Edit::Resize()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment