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

tdf#92982 vcl rendercontext: fix missing background repaint of Edit

Change-Id: Ic45f65d10835eb39b6709e7adeed1392905ea631
üst 21531da5
...@@ -1034,6 +1034,27 @@ void Edit::ImplClearBackground(vcl::RenderContext& rRenderContext, long nXStart, ...@@ -1034,6 +1034,27 @@ void Edit::ImplClearBackground(vcl::RenderContext& rRenderContext, long nXStart,
if( !(ImplUseNativeBorder(rRenderContext, GetStyle()) || IsPaintTransparent())) if( !(ImplUseNativeBorder(rRenderContext, GetStyle()) || IsPaintTransparent()))
rRenderContext.Erase(aRect); rRenderContext.Erase(aRect);
else if (SupportsDoubleBuffering() && mbIsSubEdit)
{
// 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.
long nLeft = mnXOffset + ImplGetExtraXOffset();
long nTop = ImplGetTextYPosition();
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();
}
} }
void Edit::ImplPaintBorder(vcl::RenderContext& rRenderContext, long nXStart, long nXEnd) void Edit::ImplPaintBorder(vcl::RenderContext& rRenderContext, long nXStart, long nXEnd)
......
...@@ -190,18 +190,6 @@ void PaintHelper::StartBufferedPaint() ...@@ -190,18 +190,6 @@ void PaintHelper::StartBufferedPaint()
ImplFrameData* pFrameData = m_pWindow->mpWindowImpl->mpFrameData; ImplFrameData* pFrameData = m_pWindow->mpWindowImpl->mpFrameData;
assert(!pFrameData->mbInBufferedPaint); assert(!pFrameData->mbInBufferedPaint);
// Instead of creating a new VirtualDevice, just erase the area we'll be
// painting over, as VirtualDevice::ImplInitVirDev() would do.
// The painted area is m_aPaintRect, or in case it's empty, then the whole window.
pFrameData->mpBuffer->SetBackground(Wallpaper(Color(COL_WHITE)));
{
PaintBufferGuard g(pFrameData, m_pWindow);
if (m_aPaintRect.IsEmpty())
pFrameData->mpBuffer->Erase(Rectangle(Point(0, 0), m_pWindow->GetOutputSize()));
else
pFrameData->mpBuffer->Erase(m_aPaintRect);
}
pFrameData->mbInBufferedPaint = true; pFrameData->mbInBufferedPaint = true;
m_bStartedBufferedPaint = true; m_bStartedBufferedPaint = true;
} }
......
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