From 2d75edbc9275e3a8c3fe734fee18f1c5dd9ed101 Mon Sep 17 00:00:00 2001 From: Pk11 Date: Sat, 28 Aug 2021 20:54:18 -0500 Subject: [PATCH] WIP: Add keyboard --- keyboard.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ keyboard.hpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ structs.hpp | 5 ++++ 3 files changed, 134 insertions(+) create mode 100644 keyboard.cpp create mode 100644 keyboard.hpp diff --git a/keyboard.cpp b/keyboard.cpp new file mode 100644 index 0000000..7faff5a --- /dev/null +++ b/keyboard.cpp @@ -0,0 +1,63 @@ +/* + * This file is part of Universal-Core + * Copyright (C) 2021 Universal-Team + * + * 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 3 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, see . + * + * Additional Terms 7.b and 7.c of GPLv3 apply to this file: + * * Requiring preservation of specified reasonable legal notices or + * author attributions in that material or in the Appropriate Legal + * Notices displayed by works containing it. + * * Prohibiting misrepresentation of the origin of that material, + * or requiring that modified versions of such material be marked in + * reasonable ways as different from the original version. + */ + +#include "keyboard.hpp" +#include "screenCommon.hpp" + +std::string UCKeyboard::GetString(uint MaxSize, const std::string &Hint) const { + C3D_FrameEnd(0); // Needed, so the system will not freeze. + + SwkbdState state; + swkbdInit(&state, SWKBD_TYPE_NORMAL, 2, MaxSize); + char temp[MaxSize + 1] = { 0 }; + swkbdSetHintText(&state, Hint.c_str()); + swkbdSetValidation(&state, SWKBD_NOTBLANK_NOTEMPTY, SWKBD_FILTER_PROFANITY, 0); + + SwkbdButton ret = swkbdInputText(&state, temp, sizeof(temp)); + temp[MaxSize] = '\0'; + + return (ret == SWKBD_BUTTON_CONFIRM ? temp : ""); +} + + +uint UCKeyboard::GetInt(uint Max, const std::string &Text) const { + C3D_FrameEnd(0); // Needed, so the system will not freeze. + + uint Digits = 0; + while(Max / (int)pow(10, Digits)) Digits++; + + + SwkbdState state; + swkbdInit(&state, SWKBD_TYPE_NORMAL, 2, Digits); + char temp[Digits + 1] = { 0 }; + swkbdSetHintText(&state, Text.c_str()); + swkbdSetValidation(&state, SWKBD_NOTBLANK_NOTEMPTY, SWKBD_FILTER_PROFANITY, 0); + + SwkbdButton ret = swkbdInputText(&state, temp, sizeof(temp)); + temp[Digits] = '\0'; + + return (ret == SWKBD_BUTTON_CONFIRM ? (int)std::min(std::stoi(temp), (int)Max) : 0); +} diff --git a/keyboard.hpp b/keyboard.hpp new file mode 100644 index 0000000..cd11224 --- /dev/null +++ b/keyboard.hpp @@ -0,0 +1,66 @@ +/* + * This file is part of Universal-Core + * Copyright (C) 2021 Universal-Team + * + * 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 3 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, see . + * + * Additional Terms 7.b and 7.c of GPLv3 apply to this file: + * * Requiring preservation of specified reasonable legal notices or + * author attributions in that material or in the Appropriate Legal + * Notices displayed by works containing it. + * * Prohibiting misrepresentation of the origin of that material, + * or requiring that modified versions of such material be marked in + * reasonable ways as different from the original version. + */ + +#ifndef _UNIVERSAL_CORE_KEYBOARD_HPP +#define _UNIVERSAL_CORE_KEYBOARD_HPP + +#include + +class UCKeyboard { +public: + /** + * @brief UCKeyboard user input class. + * @param KeyboardJSON The path to the layout JSON. + * @param BgColor The background color. + * @param BgColor The bar color. + * @param BgColor The outline color. + * @param KeyColor The key color. + * @param KeyColorPressed The pressed key color. + * @param KeyColorActive The active key color. + * @param TextColor The text color. + * @param HintColor The hint text color. + */ + UCKeyboard(const std::string &KeyboardJSON, uint8_t BgColor, uint8_t BarColor, uint8_t OutlineColor, uint8_t KeyColor, uint8_t KeyColorPressed, uint8_t KeyColorActive, uint8_t TextColor, uint8_t HintColor) { }; + + ~UCKeyboard(void) { }; + + + /** + * @brief Gets a string from user input. + * @param maxSize The maximum size *in bytes*, set to 0 for no limit. + * @param Hint The hint text. + */ + std::string GetString(uint MaxSize, const std::string &Hint) const; + + /** + * @brief Gets an int from user input. + * @param maxSize The maximum size of the number, set to 0 for no limit. + * @param Hint The hint text. + */ + uint GetInt(uint Max, const std::string &Hint) const; +}; + +#endif \ No newline at end of file diff --git a/structs.hpp b/structs.hpp index 36d4790..2ff5d87 100644 --- a/structs.hpp +++ b/structs.hpp @@ -28,6 +28,7 @@ #define _UNIVERSAL_CORE_STRUCTS_HPP #include +#include <3ds/services/hid.h> class Structs { public: @@ -36,6 +37,10 @@ public: int y; int w; int h; + + bool Touched(const touchPosition &T) const { + return (T.px >= this->x && T.px <= (this->x + this->w)) && (T.py >= this->y && T.py <= (this->y + this->h)); + }; }; struct Key {