| Module | Joyau::OSK |
| In: |
Drawable.cpp
|
There is a built-in keyboard in your firmware, which can be used by your program easily through this class. Notice Joyau.gets is a simpliefied version of this module, which can handle more advanced settings.
You can, by using its constants, specify what has to be input. you can indicated the used language:
As well as the caracters to input:
You can also set the default text and the description, and give a block telling what to draw under the keyboard (if nothing were drawn, there’d be graphical glitches).
| DEFAULT | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_DEFAULT) |
| JAPANESE | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_JAPANESE) |
| ENGLISH | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_ENGLISH) |
| FRENCH | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_SPANISH) |
| SPANISH | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_SPANISH) |
| GERMAN | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_GERMAN) |
| ITALIAN | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_ITALIAN) |
| PORTUGESE | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_PORTUGESE) |
| RUSSIAN | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_RUSSIAN) |
| KOREAN | = | INT2FIX(PSP_UTILITY_OSK_LANGUAGE_KOREAN) |
| ALL | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_ALL) |
| LATIN_DIGIT | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_LATIN_DIGIT) |
| LATIN_SYMBOL | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_LATIN_SYMBOL) |
| LATIN_LOWERCASE | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_LATIN_LOWERCASE) |
| LATIN_UPPERCASE | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_LATIN_UPPERCASE) |
| JAPANESE_DIGIT | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_JAPANESE_DIGIT) |
| JAPANESE_SYMBOL | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_JAPANESE_SYMBOL) |
| JAPANESE_LOWERCASE | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_JAPANESE_LOWERCASE) |
| JAPANESE_UPPERCASE | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_JAPANESE_UPPERCASE) |
| JAPANESE_HIRAGANA | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_JAPANESE_HIRAGANA) |
| JAPANASE_HALF_KATAKANA | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_JAPANESE_HALF_KATAKANA) |
| JAPANESE_KATAKANA | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_JAPANESE_KATAKANA) |
| RUSSIAN_LOWERCASE | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_JAPANESE_LOWERCASE) |
| RUSSIAN_UPPERCASE | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_RUSSIAN_UPPERCASE) |
| IT_KOREAN | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_KOREAN) |
| URL | = | INT2FIX(PSP_UTILITY_OSK_INPUTTYPE_URL) |
Shows the OSK (Sony’s default keyboard), and returns the input text. Example:
Joyau::OSK.run(Joyau::OSK::ALL, Joyau::OSK::DEFAULT,
"Anonymous", "Enter your nickame", 16) do
Joyau.clearScreen # this is suffisant to avoid glitches,
# Although you might copy the old screen buffer,
# and draw it here.
/*
call-seq: run(input_type, language, text, desc, output_size) { ... }
Shows the OSK (Sony's default keyboard), and returns the input text.
Example:
Joyau::OSK.run(Joyau::OSK::ALL, Joyau::OSK::DEFAULT,
"Anonymous", "Enter your nickame", 16) do
Joyau.clearScreen # this is suffisant to avoid glitches,
# Although you might copy the old screen buffer,
# and draw it here.
*/
VALUE Osk_run(VALUE self, VALUE type, VALUE lang, VALUE rb_input,
VALUE rb_desc, VALUE output_size)
{
rb_input = rb_obj_as_string(rb_input);
rb_desc = rb_obj_as_string(rb_desc);
SceUtilityOskData data;
SceUtilityOskParams params;
char *char_input = StringValuePtr(rb_input);
int char_size = strlen(char_input);
unsigned short *input = new unsigned short[char_size + 1];
for (int i = 0; i < char_size + 1; ++i)
input[i] = char_input[i];
char *char_desc = StringValuePtr(rb_desc);
char_size = strlen(char_desc);
unsigned short *desc = new unsigned short[char_size + 1];
for (int i = 0; i < char_size + 1; ++i)
desc[i] = char_desc[i];
unsigned short *output = new unsigned short[FIX2INT(output_size)];
memset(&data, 0, sizeof(data));
data.lines = 1;
data.unk_24 = 1;
data.inputtype = FIX2INT(type);
data.desc = desc;
data.intext = input;
data.outtextlength = FIX2INT(output_size);
data.outtextlimit = FIX2INT(output_size);
data.outtext = output;
memset(¶ms, 0, sizeof(params));
params.base.size = sizeof(params);
params.base.language = FIX2INT(lang);
sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN,
¶ms.base.buttonSwap);
params.base.soundThread = 16;
params.base.graphicsThread = 17;
params.base.accessThread = 19;
params.base.fontThread = 18;
params.datacount = 1;
params.data = &data;
sceUtilityOskInitStart(¶ms);
bool done = false;
while (!done)
{
oslStartDrawing();
rb_yield(Qnil);
oslEndDrawing();
switch(sceUtilityOskGetStatus())
{
case PSP_UTILITY_DIALOG_INIT:
break;
case PSP_UTILITY_DIALOG_VISIBLE:
sceUtilityOskUpdate(1);
break;
case PSP_UTILITY_DIALOG_QUIT:
sceUtilityOskShutdownStart();
break;
case PSP_UTILITY_DIALOG_FINISHED:
break;
case PSP_UTILITY_DIALOG_NONE:
done = true;
default :
break;
}
oslEndDrawing();
oslEndFrame();
oslSyncFrame();
}
char *ret = new char[FIX2INT(output_size)];
for (int i = 0; i < FIX2INT(output_size); ++i)
ret[i] = (char)data.outtext[i];
delete[] input;
delete[] desc;
delete[] output;
return rb_str_new2(ret);
}