Change swkbd terminology and small updates to wut samples

This commit is contained in:
Fangal-Airbag 2025-11-21 11:13:37 -05:00
parent 2016e429c1
commit e47f3dd436
3 changed files with 65 additions and 14 deletions

View File

@ -98,10 +98,10 @@ enum class State
enum class InputFormType
{
//! Input form seen when adding an NNID on Friends List or creating a folder on the System Menu. (Individual square design with up to 40 characters)
InputForm0 = 0,
//! The default input layout that is usually used (Page design)
Default = 1,
//! Spaced boxes design with up to 40 characters
Boxes = 0,
//! The page design
Page = 1,
};
enum class KeyboardLayout
@ -247,7 +247,7 @@ WUT_CHECK_SIZE(KeyboardArg, 0xC0);
struct InputFormArg
{
//! The type of input form
InputFormType type = InputFormType::Default;
InputFormType type = InputFormType::Page;
int32_t unk_0x04 = -1;
//! Initial string to open the keyboard with
const char16_t *initialText = nullptr;
@ -258,8 +258,8 @@ struct InputFormArg
//! Which password inputting preset to use
nn::swkbd::PasswordMode passwordMode = nn::swkbd::PasswordMode::Clear;
uint32_t unk_0x18 = 0;
//! Whether or not to draw a cursor. Exclusive to the inputform0 input form type.
bool drawInput0Cursor = false;
//! Whether or not to draw a cursor. Exclusive to the boxes input form type.
bool drawCursorForBoxes = true;
//! Whether or not to highlight the initial string. Exclusive to the Default input form type.
bool higlightInitialText = false;
//! Whether or not to show a copy and a paste button.
@ -273,7 +273,7 @@ WUT_CHECK_OFFSET(InputFormArg, 0x0C, hintText);
WUT_CHECK_OFFSET(InputFormArg, 0x10, maxTextLength);
WUT_CHECK_OFFSET(InputFormArg, 0x14, passwordMode);
WUT_CHECK_OFFSET(InputFormArg, 0x18, unk_0x18);
WUT_CHECK_OFFSET(InputFormArg, 0x1C, drawInput0Cursor);
WUT_CHECK_OFFSET(InputFormArg, 0x1C, drawCursorForBoxes);
WUT_CHECK_OFFSET(InputFormArg, 0x1D, higlightInitialText);
WUT_CHECK_OFFSET(InputFormArg, 0x1E, showCopyPasteButtons);
WUT_CHECK_SIZE(InputFormArg, 0x20);

View File

@ -1,6 +1,9 @@
#include <coreinit/filesystem.h>
#include <coreinit/memdefaultheap.h>
#include <gx2/surface.h>
#include <nn/erreula.h>
#include <sndcore2/core.h>
#include <sysapp/launch.h>
#include <vpad/input.h>
#include <whb/gfx.h>
@ -15,7 +18,7 @@ main(int argc, char **argv)
WHBProcInit();
WHBGfxInit();
FSInit();
VPADInit();
AXInit();
// Create FSClient for erreula
FSClient *fsClient = (FSClient *)MEMAllocFromDefaultHeap(sizeof(FSClient));
@ -33,6 +36,9 @@ main(int argc, char **argv)
return -1;
}
// Play the sound effect that plays when erreula appears on screen
nn::erreula::PlayAppearSE(true);
// Show the error viewer
nn::erreula::AppearArg appearArg;
appearArg.errorArg.errorType = nn::erreula::ErrorType::Message2Button;
@ -44,6 +50,10 @@ main(int argc, char **argv)
appearArg.errorArg.errorTitle = u"Title";
nn::erreula::AppearErrorViewer(appearArg);
// Get WHBGfx's colour buffers for proper erreula rendering
GX2ColorBuffer *cbTV = WHBGfxGetTVColourBuffer();
GX2ColorBuffer *cbDRC = WHBGfxGetDRCColourBuffer();
WHBLogPrintf("Begin rendering...");
while (WHBProcIsRunning()) {
// Read vpad for erreula::Calc
@ -62,19 +72,39 @@ main(int argc, char **argv)
if (nn::erreula::IsDecideSelectButtonError()) {
nn::erreula::DisappearErrorViewer();
break;
SYSLaunchMenu();
}
WHBGfxBeginRender();
WHBGfxBeginRenderTV();
WHBGfxClearColor(0.0f, 0.0f, 1.0f, 1.0f);
// Set our colour buffer's surface format to SRGB for correct rendering of erreula
GX2SurfaceFormat fTV = cbTV->surface.format;
cbTV->surface.format = GX2_SURFACE_FORMAT_SRGB_R8_G8_B8_A8;
GX2InitColorBufferRegs(cbTV);
GX2SetColorBuffer(cbTV, GX2_RENDER_TARGET_0);
nn::erreula::DrawTV();
// Set our colour buffer's surface format back to what it was before.
cbTV->surface.format = fTV;
GX2InitColorBufferRegs(cbTV);
GX2SetColorBuffer(cbTV, GX2_RENDER_TARGET_0);
WHBGfxFinishRenderTV();
WHBGfxBeginRenderDRC();
WHBGfxClearColor(1.0f, 0.0f, 1.0f, 1.0f);
GX2SurfaceFormat fDRC = cbDRC->surface.format;
cbDRC->surface.format = GX2_SURFACE_FORMAT_SRGB_R8_G8_B8_A8;
GX2InitColorBufferRegs(cbDRC);
GX2SetColorBuffer(cbDRC, GX2_RENDER_TARGET_0);
nn::erreula::DrawDRC();
cbDRC->surface.format = fDRC;
GX2InitColorBufferRegs(cbDRC);
GX2SetColorBuffer(cbDRC, GX2_RENDER_TARGET_0);
WHBGfxFinishRenderDRC();
WHBGfxFinishRender();

View File

@ -1,5 +1,6 @@
#include <coreinit/filesystem.h>
#include <coreinit/memdefaultheap.h>
#include <gx2/surface.h>
#include <nn/swkbd.h>
#include <sndcore2/core.h>
#include <sysapp/launch.h>
@ -17,7 +18,6 @@ main(int argc, char **argv)
WHBProcInit();
WHBGfxInit();
FSInit();
VPADInit();
AXInit();
// Create FSClient for swkbd
@ -35,9 +35,6 @@ main(int argc, char **argv)
return -1;
}
// Enable sound
nn::swkbd::MuteAllSound(false);
// Show the keyboard
nn::swkbd::AppearArg appearArg;
appearArg.keyboardArg.configArg.languageType = nn::swkbd::LanguageType::English;
@ -48,6 +45,10 @@ main(int argc, char **argv)
return -1;
}
// Get WHBGfx's colour buffers for proper swkbd rendering
GX2ColorBuffer *cbTV = WHBGfxGetTVColourBuffer();
GX2ColorBuffer *cbDRC = WHBGfxGetDRCColourBuffer();
WHBLogPrintf("Begin rendering...");
while (WHBProcIsRunning()) {
// Read vpad for swkbd::Calc
@ -82,12 +83,32 @@ main(int argc, char **argv)
WHBGfxBeginRenderTV();
WHBGfxClearColor(0.0f, 0.0f, 1.0f, 1.0f);
// Set our colour buffer's surface format to SRGB for correct rendering of swkbd
GX2SurfaceFormat fTV = cbTV->surface.format;
cbTV->surface.format = GX2_SURFACE_FORMAT_SRGB_R8_G8_B8_A8;
GX2InitColorBufferRegs(cbTV);
GX2SetColorBuffer(cbTV, GX2_RENDER_TARGET_0);
nn::swkbd::DrawTV();
// Set our colour buffer's surface format back to what it was before.
cbTV->surface.format = fTV;
GX2InitColorBufferRegs(cbTV);
GX2SetColorBuffer(cbTV, GX2_RENDER_TARGET_0);
WHBGfxFinishRenderTV();
WHBGfxBeginRenderDRC();
WHBGfxClearColor(1.0f, 0.0f, 1.0f, 1.0f);
GX2SurfaceFormat fDRC = cbDRC->surface.format;
cbDRC->surface.format = GX2_SURFACE_FORMAT_SRGB_R8_G8_B8_A8;
GX2InitColorBufferRegs(cbDRC);
GX2SetColorBuffer(cbDRC, GX2_RENDER_TARGET_0);
nn::swkbd::DrawDRC();
cbDRC->surface.format = fDRC;
GX2InitColorBufferRegs(cbDRC);
GX2SetColorBuffer(cbDRC, GX2_RENDER_TARGET_0);
WHBGfxFinishRenderDRC();
WHBGfxFinishRender();