void RestoreCharsetBg()
{
_nextLeft = _string[0].Position.X;
_nextTop = _string[0].Position.Y + ScreenTop;
if (_charset.HasMask)
{
_charset.HasMask = false;
_charset.Str.Left = -1;
_charset.Left = -1;
// Restore background on the whole text area. This code is based on
// restoreBackground(), but was changed to only restore those parts which are
// currently covered by the charset mask.
var vs = _charset.TextScreen;
if (vs.Height == 0)
return;
MarkRectAsDirty(vs, 0, vs.Width, 0, vs.Height, Gdi.UsageBitRestored);
if (vs.HasTwoBuffers && _currentRoom != 0 && IsLightOn())
{
if (vs != MainVirtScreen)
{
// Restore from back buffer
var screenBufNav = new PixelNavigator(vs.Surfaces[0]);
screenBufNav.OffsetX(vs.XStart);
var backNav = new PixelNavigator(vs.Surfaces[1]);
backNav.OffsetX(vs.XStart);
Gdi.Blit(screenBufNav, backNav, vs.Width, vs.Height);
}
}
else
{
// Clear area
var screenBuf = vs.Surfaces[0].Pixels;
Array.Clear(screenBuf, 0, screenBuf.Length);
}
if (vs.HasTwoBuffers)
{
// Clean out the charset mask
ClearTextSurface();
}
}
}
}