DS: Get the virtual keyboard working with the mirrored subscreen

This commit is contained in:
Cameron Cawley 2021-08-26 16:23:10 +01:00
parent 224d626e65
commit 8c01baaaff
3 changed files with 24 additions and 4 deletions

View File

@ -185,7 +185,9 @@ void OSystem_DS::initGraphics() {
_overlay.create(256, 192, true, 2, false, 0, false);
_keyboard = new DS::Keyboard(_eventManager->getEventDispatcher());
#ifndef DISABLE_TEXT_CONSOLE
_keyboard->init(0, 34, 1, false);
#endif
}
void OSystem_DS::setMainScreen(int32 x, int32 y, int32 sx, int32 sy) {
@ -211,9 +213,23 @@ void OSystem_DS::setFeatureState(Feature f, bool enable) {
} else if (f == kFeatureVirtualKeyboard) {
if (enable) {
setSwapLCDs(true);
#ifdef DISABLE_TEXT_CONSOLE
if (_subScreenActive) {
_subScreenActive = false;
_subScreen.hide();
_subScreen.reset();
_keyboard->init(0, 34, 1, false);
}
#endif
_keyboard->show();
} else {
_keyboard->hide();
#ifdef DISABLE_TEXT_CONSOLE
_subScreen.reset();
_subScreen.show();
_subScreenActive = true;
_paletteDirty = true;
#endif
setSwapLCDs(false);
}
}
@ -323,7 +339,8 @@ void OSystem_DS::initSize(uint width, uint height, const Graphics::PixelFormat *
if (_framebuffer.getRequiredVRAM(width, height, isRGB, false) > 0x20000) {
_subScreen.init(&_framebuffer);
} else {
_subScreen.reset();
if (_subScreenActive)
_subScreen.reset();
_subScreen.init(&_framebuffer, 3, true, 0, false);
}
#endif
@ -399,14 +416,16 @@ void OSystem_DS::updateScreen() {
if (_paletteDirty) {
dmaCopyHalfWords(3, _palette, BG_PALETTE, 256 * 2);
#ifdef DISABLE_TEXT_CONSOLE
dmaCopyHalfWords(3, _palette, BG_PALETTE_SUB, 256 * 2);
if (_subScreenActive)
dmaCopyHalfWords(3, _palette, BG_PALETTE_SUB, 256 * 2);
#endif
_paletteDirty = false;
}
_framebuffer.update();
#ifdef DISABLE_TEXT_CONSOLE
_subScreen.update();
if (_subScreenActive)
_subScreen.update();
#endif
}
}

View File

@ -50,7 +50,7 @@ OSystem_DS::OSystem_DS()
_paletteDirty(false), _cursorDirty(false),
_pfCLUT8(Graphics::PixelFormat::createFormatCLUT8()),
_pfABGR1555(Graphics::PixelFormat(2, 5, 5, 5, 1, 0, 5, 10, 15)),
_callbackTimer(10), _currentTimeMillis(0)
_callbackTimer(10), _currentTimeMillis(0), _subScreenActive(true)
{
_instance = this;

View File

@ -44,6 +44,7 @@ protected:
#ifdef DISABLE_TEXT_CONSOLE
DS::Background _subScreen;
#endif
bool _subScreenActive;
Graphics::Surface _cursor;
int _graphicsMode, _stretchMode;
bool _paletteDirty, _cursorDirty;