diff options
Diffstat (limited to 'backends/platform/ds/arm9/source/touchkeyboard.cpp')
-rw-r--r-- | backends/platform/ds/arm9/source/touchkeyboard.cpp | 315 |
1 files changed, 1 insertions, 314 deletions
diff --git a/backends/platform/ds/arm9/source/touchkeyboard.cpp b/backends/platform/ds/arm9/source/touchkeyboard.cpp index d3e8a61077..ee14bafced 100644 --- a/backends/platform/ds/arm9/source/touchkeyboard.cpp +++ b/backends/platform/ds/arm9/source/touchkeyboard.cpp @@ -16,320 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ -#include <NDS.h> -#include "touchkeyboard.h" -#include "keyboard_raw.h" -#include "keyboard_pal_raw.h" -#include "dsmain.h" -#include "osystem_ds.h" - -namespace DS { - -struct key_data { - char keyNum; - char x, y; - int character; - bool pressed; -}; - -#define DS_NUM_KEYS 60 -#define DS_SHIFT 0 -#define DS_BACKSPACE 8 -#define DS_RETURN 13 -#define DS_CAPSLOCK 1 - - -key_data keys[DS_NUM_KEYS] = { - // Key number x y character - - // Numbers - {28, 3, 0, '1'}, - {29, 5, 0, '2'}, - {30, 7, 0, '3'}, - {31, 9, 0, '4'}, - {32, 11, 0, '5'}, - {33, 13, 0, '6'}, - {34, 15, 0, '7'}, - {35, 17, 0, '8'}, - {36, 19, 0, '9'}, - {27, 21, 0, '0'}, - {45, 23, 0, SDLK_MINUS}, - {50, 25, 0, SDLK_EQUALS}, - {52, 27, 0, SDLK_BACKSPACE}, - - // Top row - {'Q'-'A' + 1, 4, 2, 'Q'}, - {'W'-'A' + 1, 6, 2, 'W'}, - {'E'-'A' + 1, 8, 2, 'E'}, - {'R'-'A' + 1, 10, 2, 'R'}, - {'T'-'A' + 1, 12, 2, 'T'}, - {'Y'-'A' + 1, 14, 2, 'Y'}, - {'U'-'A' + 1, 16, 2, 'U'}, - {'I'-'A' + 1, 18, 2, 'I'}, - {'O'-'A' + 1, 20, 2, 'O'}, - {'P'-'A' + 1, 22, 2, 'P'}, - {43, 24, 2, SDLK_LEFTBRACKET}, - {44, 26, 2, SDLK_RIGHTBRACKET}, - - // Middle row - {55, 3, 4, DS_CAPSLOCK}, - {'A'-'A' + 1, 5, 4, 'A'}, - {'S'-'A' + 1, 7, 4, 'S'}, - {'D'-'A' + 1, 9, 4, 'D'}, - {'F'-'A' + 1, 11, 4, 'F'}, - {'G'-'A' + 1, 13, 4, 'G'}, - {'H'-'A' + 1, 15, 4, 'H'}, - {'J'-'A' + 1, 17, 4, 'J'}, - {'K'-'A' + 1, 19, 4, 'K'}, - {'L'-'A' + 1, 21, 4, 'L'}, - {42, 23, 4, SDLK_SEMICOLON}, - {41, 25, 4, SDLK_QUOTE}, - {46, 27, 4, SDLK_RETURN}, - - // Bottom row - {51, 4, 6, DS_SHIFT}, - {'Z'-'A' + 1, 6, 6, 'Z'}, - {'X'-'A' + 1, 8, 6, 'X'}, - {'C'-'A' + 1, 10, 6, 'C'}, - {'V'-'A' + 1, 12, 6, 'V'}, - {'B'-'A' + 1, 14, 6, 'B'}, - {'N'-'A' + 1, 16, 6, 'N'}, - {'M'-'A' + 1, 18, 6, 'M'}, - {38, 20, 6, SDLK_COMMA}, - {39, 22, 6, SDLK_PERIOD}, - {40, 24, 6, SDLK_SLASH}, - - // Space bar - {47, 9, 8, SDLK_SPACE}, - {48, 11, 8, SDLK_SPACE}, - {48, 13, 8, SDLK_SPACE}, - {48, 15, 8, SDLK_SPACE}, - {48, 17, 8, SDLK_SPACE}, - {49, 19, 8, SDLK_SPACE}, - - // Cursor arrows - {52, 27, 8, SDLK_LEFT}, - {54, 29, 8, SDLK_DOWN}, - {53, 31, 8, SDLK_RIGHT}, - {51, 29, 6, SDLK_UP}, - - // Close button - {56, 30, 0, SDLK_UNKNOWN}, - -}; - -int keyboardX; -int keyboardY; - -int mapBase; -int tileBase; - -bool shiftState; -bool capsLockState; - -bool closed; - -void restoreVRAM(int tileBase, int mapBase, u16* saveSpace) { - for (int r = 0; r < 32 * 32; r++) { - ((u16 *) SCREEN_BASE_BLOCK_SUB(mapBase))[r] = *saveSpace++; - } - - for (int r = 0; r < 4096; r++) { - ((u16 *) CHAR_BASE_BLOCK_SUB(tileBase))[r] = *saveSpace++; - } -} - -void drawKeyboard(int tileBase, int mapBase, u16* saveSpace) { - - - for (int r = 0; r < 32 * 32; r++) { -// *saveSpace++ = ((u16 *) SCREEN_BASE_BLOCK_SUB(mapBase))[r]; - ((u16 *) SCREEN_BASE_BLOCK_SUB(mapBase))[r] = 127; - } - - for (int r = 0; r < 4096; r++) { -// *saveSpace++ = ((u16 *) CHAR_BASE_BLOCK_SUB(tileBase))[r]; - ((u16 *) CHAR_BASE_BLOCK_SUB(tileBase))[r] = ((u16 *) (keyboard_raw))[r]; - } - - for (int r = 0; r < 16; r++) { - BG_PALETTE_SUB[r] = ((u16 *) (keyboard_pal_raw))[r]; - } - - for (int r = 0; r < 16; r++) { - int col = ((u16 *) (keyboard_pal_raw))[r]; - - int red = col & 0x001F; - int green = (col & 0x03E0) >> 5; - int blue = (col & 0x7C00) >> 10; - - red = (red * 8) / 16; - green = (green * 8) / 16; - blue = (blue * 8) / 16; - - BG_PALETTE_SUB[16 + r] = red | (green << 5) | (blue << 10); - } - - keyboardX = -2; - keyboardY = 2; - - mapBase = mapBase; - tileBase = tileBase; - - shiftState = false; - capsLockState = false; - - int x = keyboardX; - int y = keyboardY; - - u16* base = ((u16 *) SCREEN_BASE_BLOCK_SUB(mapBase)); - - for (int r = 0; r < DS_NUM_KEYS; r++) { - base[(y + keys[r].y) * 32 + x + keys[r].x] = keys[r].keyNum * 2; - base[(y + keys[r].y) * 32 + x + keys[r].x + 1] = keys[r].keyNum * 2 + 1; - - base[(y + keys[r].y + 1) * 32 + x + keys[r].x] = 128 + keys[r].keyNum * 2; - base[(y + keys[r].y + 1) * 32 + x + keys[r].x + 1] = 128 + keys[r].keyNum * 2 + 1; - - keys[r].pressed = false; - } - - closed = false; -} - -bool getKeyboardClosed() { - return closed; -} - -void setKeyHighlight(int key, bool highlight) { - u16* base = ((u16 *) SCREEN_BASE_BLOCK_SUB(DS::mapBase)); - - if (highlight) { - base[(keyboardY + keys[key].y) * 32 + keyboardX + keys[key].x] |= 0x1000; - base[(keyboardY + keys[key].y) * 32 + keyboardX + keys[key].x + 1] |= 0x1000; - base[(keyboardY + keys[key].y + 1) * 32 + keyboardX + keys[key].x] |= 0x1000; - base[(keyboardY + keys[key].y + 1) * 32 + keyboardX + keys[key].x + 1] |= 0x1000; - } else { - base[(keyboardY + keys[key].y) * 32 + keyboardX + keys[key].x] &= ~0x1000; - base[(keyboardY + keys[key].y) * 32 + keyboardX + keys[key].x + 1] &= ~0x1000; - base[(keyboardY + keys[key].y + 1) * 32 + keyboardX + keys[key].x] &= ~0x1000; - base[(keyboardY + keys[key].y + 1) * 32 + keyboardX + keys[key].x + 1] &= ~0x1000; - } -} - -void addKeyboardEvents() { - if (DS::getPenDown()) { - int x = IPC->touchXpx; - int y = IPC->touchYpx; - - int tx = (x >> 3) - keyboardX; - int ty = (y >> 3) - keyboardY; - -// consolePrintf("x=%d y=%d\n", tx, ty); - - for (int r = 0; r < DS_NUM_KEYS; r++) { - if (( (tx >= keys[r].x) && (tx <= keys[r].x + 1)) && - (ty >= keys[r].y) && (ty <= keys[r].y + 1)) { - OSystem_DS* system = OSystem_DS::instance(); - OSystem::Event event; - -// consolePrintf("Key: %d\n", r); - if ((keys[r].character == SDLK_UNKNOWN)) { - // Close button - DS::closed = true; - } else if ((keys[r].character >= '0') && (keys[r].character <= '9')) { - event.kbd.ascii = keys[r].character; - event.kbd.keycode = 0; - - } else if ((keys[r].character >= 'A') && (keys[r].character <= 'Z')) { - - if ((!DS::shiftState) && (!DS::capsLockState)) { - event.kbd.ascii = keys[r].character + 32; // Make key lowercase. - } else { - event.kbd.ascii = keys[r].character; - } - - event.kbd.keycode = event.kbd.ascii; - } else { - event.kbd.ascii = keys[r].character; - event.kbd.keycode = keys[r].character; - } - - - - //event.kbd.keycode = keys[r].character; - //event.kbd.ascii = keys[r].character; - event.type = OSystem::EVENT_KEYDOWN; - event.kbd.flags = 0; - system->addEvent(event); - - event.type = OSystem::EVENT_KEYUP; - system->addEvent(event); - - switch (keys[r].character) { - case DS_SHIFT: { - DS::shiftState = !DS::shiftState; - DS::setKeyHighlight(r, DS::shiftState); - break; - } - - case DS_CAPSLOCK: { - DS::capsLockState = !DS::capsLockState; - DS::setKeyHighlight(r, DS::capsLockState); - break; - } - - default: { - DS::setKeyHighlight(r, true); - keys[r].pressed = true; - - if (DS::shiftState) { - DS::shiftState = false; - for (int t = 0; t < DS_NUM_KEYS; t++) { - if (keys[t].character == DS_SHIFT) { - DS::setKeyHighlight(t, false); - } - } - } - break; - } - } - - } - } - } - - if (DS::getPenReleased()) { - for (int r = 0; r < DS_NUM_KEYS; r++) { - if (keys[r].pressed) { - DS::setKeyHighlight(r, false); - keys[r].pressed = false; - } - } - } -} - -} - -/* ScummVMDS - Scumm Interpreter DS Port - * Copyright (C) 2002-2004 The ScummVM project and Neil Millstone - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ -#include <NDS.h> +#include <nds.h> #include "touchkeyboard.h" #include "keyboard_raw.h" #include "keyboard_pal_raw.h" |