Added most of the spanish characters
|
@ -3591,14 +3591,73 @@ ALIGNED8 static const u8 texture_font_normal_char_93[] = {
|
||||||
#include "textures/segment2/custom_font_normal_char_93.ia4.inc.c"
|
#include "textures/segment2/custom_font_normal_char_93.ia4.inc.c"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// spanish
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_sa[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_sa.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_se[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_se.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_si[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_si.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_so[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_so.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_su[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_su.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_su2[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_su2.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
ALIGNED8 static const u8 texture_font_normal_char_sn[] = {
|
ALIGNED8 static const u8 texture_font_normal_char_sn[] = {
|
||||||
#include "textures/segment2/custom_font_normal_char_sn.ia4.inc.c"
|
#include "textures/segment2/custom_font_normal_char_sn.ia4.inc.c"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_sca[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_sca.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_sce[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_sce.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_sci[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_sci.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_sco[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_sco.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_scu[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_scu.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_scu2[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_scu2.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
ALIGNED8 static const u8 texture_font_normal_char_scn[] = {
|
ALIGNED8 static const u8 texture_font_normal_char_scn[] = {
|
||||||
#include "textures/segment2/custom_font_normal_char_scn.ia4.inc.c"
|
#include "textures/segment2/custom_font_normal_char_scn.ia4.inc.c"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_sex[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_sex.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
ALIGNED8 static const u8 texture_font_normal_char_squ[] = {
|
||||||
|
#include "textures/segment2/custom_font_normal_char_squ.ia4.inc.c"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const u8* const font_normal_chars[] = {
|
const u8* const font_normal_chars[] = {
|
||||||
texture_font_char_us_exclamation, // !
|
texture_font_char_us_exclamation, // !
|
||||||
texture_font_char_us_double_quote_open, // "
|
texture_font_char_us_double_quote_open, // "
|
||||||
|
@ -3695,8 +3754,24 @@ const u8* const font_normal_chars[] = {
|
||||||
texture_font_normal_char_93, // }
|
texture_font_normal_char_93, // }
|
||||||
texture_font_char_us_tilde, // ~
|
texture_font_char_us_tilde, // ~
|
||||||
texture_font_char_us_star_filled, // DEL
|
texture_font_char_us_star_filled, // DEL
|
||||||
|
|
||||||
|
texture_font_normal_char_sa, // á
|
||||||
|
texture_font_normal_char_se, // é
|
||||||
|
texture_font_normal_char_si, // í
|
||||||
|
texture_font_normal_char_so, // ó
|
||||||
|
texture_font_normal_char_su, // ú
|
||||||
|
texture_font_normal_char_su2, // ü
|
||||||
texture_font_normal_char_sn, // ñ
|
texture_font_normal_char_sn, // ñ
|
||||||
|
texture_font_normal_char_sca, // Á
|
||||||
|
texture_font_normal_char_sce, // É
|
||||||
|
texture_font_normal_char_sci, // Í
|
||||||
|
texture_font_normal_char_sco, // Ó
|
||||||
|
texture_font_normal_char_scu, // Ú
|
||||||
|
texture_font_normal_char_scu2, // Ü
|
||||||
texture_font_normal_char_scn, // Ñ
|
texture_font_normal_char_scn, // Ñ
|
||||||
|
texture_font_normal_char_sex, // ¡
|
||||||
|
texture_font_normal_char_squ, // ¿
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const f32 font_normal_widths[] = {
|
const f32 font_normal_widths[] = {
|
||||||
|
@ -3714,8 +3789,13 @@ const f32 font_normal_widths[] = {
|
||||||
0.3750f, 0.3125f, 0.3125f, 0.3750f, 0.3125f, 0.3125f, 0.3750f, 0.3125f, 0.2500f, 0.3125f, 0.3125f, 0.1875f, 0.4375f, 0.3125f, 0.3125f, 0.3125f, 0.3750f, 0.3125f, 0.3125f, 0.3125f, 0.3125f, 0.3125f, 0.4375f, 0.4375f, 0.3125f, 0.3125f,
|
0.3750f, 0.3125f, 0.3125f, 0.3750f, 0.3125f, 0.3125f, 0.3750f, 0.3125f, 0.2500f, 0.3125f, 0.3125f, 0.1875f, 0.4375f, 0.3125f, 0.3125f, 0.3125f, 0.3750f, 0.3125f, 0.3125f, 0.3125f, 0.3125f, 0.3125f, 0.4375f, 0.4375f, 0.3125f, 0.3125f,
|
||||||
/* { | } ~ DEL */
|
/* { | } ~ DEL */
|
||||||
0.3125f, 0.2500f, 0.3125f, 0.5000f, 0.5000f,
|
0.3125f, 0.2500f, 0.3125f, 0.5000f, 0.5000f,
|
||||||
/* ñ Ñ */
|
|
||||||
0.3125f, 0.5000f,
|
/* á é í ó ú ü ñ */
|
||||||
|
0.3750f, 0.3125f, 0.2500f, 0.3125f, 0.3125f, 0.3125f, 0.3125f,
|
||||||
|
/* Á É Í Ó Ú Ü Ñ */
|
||||||
|
0.3750f, 0.3750f, 0.3125f, 0.3750f, 0.3750f, 0.3750f, 0.5000f,
|
||||||
|
/* ¡ ¿ */
|
||||||
|
0.3125f, 0.4375f,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,66 @@
|
||||||
#include "djui.h"
|
#include "djui.h"
|
||||||
#include "game/segment2.h"
|
#include "game/segment2.h"
|
||||||
|
|
||||||
|
struct SmCodeGlyph {
|
||||||
|
s8 unicode1;
|
||||||
|
s8 unicode2;
|
||||||
|
u8 smcode;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SmCodeGlyph sSmCodeGlyphs[] = {
|
||||||
|
{ -61, -95, 128 }, // á
|
||||||
|
{ -61, -87, 129 }, // é
|
||||||
|
{ -61, -83, 130 }, // í
|
||||||
|
{ -61, -77, 131 }, // ó
|
||||||
|
{ -61, -70, 132 }, // ú
|
||||||
|
{ -61, -68, 133 }, // ü
|
||||||
|
{ -61, -79, 134 }, // ñ
|
||||||
|
{ -61, -127, 135 }, // Á
|
||||||
|
{ -61, -119, 136 }, // É
|
||||||
|
{ -61, -115, 137 }, // Í
|
||||||
|
{ -61, -109, 138 }, // Ó
|
||||||
|
{ -61, -102, 139 }, // Ú
|
||||||
|
{ -61, -100, 140 }, // Ü
|
||||||
|
{ -61, -111, 141 }, // Ñ
|
||||||
|
{ -62, -95, 142 }, // ¡
|
||||||
|
{ -62, -65, 143 }, // ¿
|
||||||
|
};
|
||||||
|
|
||||||
|
void djui_font_convert_to_smcode(char* text) {
|
||||||
|
size_t glyphCount = sizeof(sSmCodeGlyphs) / sizeof(sSmCodeGlyphs[0]);
|
||||||
|
|
||||||
|
char* t = text;
|
||||||
|
while (*t != '\0') {
|
||||||
|
for (size_t i = 0; i < glyphCount; i++) {
|
||||||
|
struct SmCodeGlyph* glyph = &sSmCodeGlyphs[i];
|
||||||
|
if (t[0] == glyph->unicode1 && t[1] == glyph->unicode2) {
|
||||||
|
// consume down to one character
|
||||||
|
char* t2 = t;
|
||||||
|
while (*t2 != '\0') { t2[0] = t2[1]; t2++; }
|
||||||
|
// replace
|
||||||
|
t[0] = (s8)glyph->smcode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool djui_font_valid_smcode(char c) {
|
||||||
|
if (c >= '!' && c <= '~') {
|
||||||
|
return true;
|
||||||
|
} else if (c == ' ') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t glyphCount = sizeof(sSmCodeGlyphs) / sizeof(sSmCodeGlyphs[0]);
|
||||||
|
for (size_t i = 0; i < glyphCount; i++) {
|
||||||
|
struct SmCodeGlyph* glyph = &sSmCodeGlyphs[i];
|
||||||
|
if ((u8)c == glyph->smcode) { return true; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
// font 0 (built-in normal font) //
|
// font 0 (built-in normal font) //
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
|
@ -35,7 +95,8 @@ const Gfx dl_font_normal_display_list[] = {
|
||||||
static void djui_font_normal_render_char(char c) {
|
static void djui_font_normal_render_char(char c) {
|
||||||
extern const u8* const font_normal_chars[];
|
extern const u8* const font_normal_chars[];
|
||||||
// replace undisplayable characters
|
// replace undisplayable characters
|
||||||
if ((u8)c < ' ' || (u8)c > ('~' + 3)) { c = '?'; }
|
//if ((u8)c < ' ' || (u8)c > ('~' + 3)) { c = '?'; }
|
||||||
|
if (!djui_font_valid_smcode(c)) { c = '?'; }
|
||||||
if (c == ' ') { return; }
|
if (c == ' ') { return; }
|
||||||
void* fontChar = (void*)font_normal_chars[(u8)c - '!'];
|
void* fontChar = (void*)font_normal_chars[(u8)c - '!'];
|
||||||
if (fontChar == NULL) { fontChar = (void*)font_normal_chars[94]; }
|
if (fontChar == NULL) { fontChar = (void*)font_normal_chars[94]; }
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "djui.h"
|
#include "djui.h"
|
||||||
|
|
||||||
#define SPANISH_UNICODE_START -61
|
|
||||||
#define SPANISH_UNICODE_LOWER_N -79 // ñ
|
|
||||||
#define SPANISH_UNICODE_UPPER_N -111 // Ñ
|
|
||||||
#define SPANISH_SMCODE_LOWER_N ((s8)('~' + 2))
|
|
||||||
#define SPANISH_SMCODE_UPPER_N ((s8)('~' + 3))
|
|
||||||
|
|
||||||
struct DjuiFont {
|
struct DjuiFont {
|
||||||
f32 charWidth;
|
f32 charWidth;
|
||||||
f32 charHeight;
|
f32 charHeight;
|
||||||
|
@ -20,3 +14,6 @@ struct DjuiFont {
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const struct DjuiFont* gDjuiFonts[];
|
extern const struct DjuiFont* gDjuiFonts[];
|
||||||
|
|
||||||
|
void djui_font_convert_to_smcode(char* text);
|
||||||
|
bool djui_font_valid_smcode(char c);
|
||||||
|
|
|
@ -291,55 +291,19 @@ static void djui_inputbox_on_focus_end(UNUSED struct DjuiBase* base) {
|
||||||
wm_api->stop_text_input();
|
wm_api->stop_text_input();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SPANISH_UNICODE_START -61
|
|
||||||
#define SPANISH_UNICODE_LOWER_N -79 // ñ
|
|
||||||
#define SPANISH_UNICODE_UPPER_N -111 // Ñ
|
|
||||||
#define SPANISH_SMCODE_LOWER_N ((s8)('~' + 2))
|
|
||||||
#define SPANISH_SMCODE_UPPER_N ((s8)('~' + 3))
|
|
||||||
|
|
||||||
static void djui_inputbox_on_text_input(struct DjuiBase *base, char* text) {
|
static void djui_inputbox_on_text_input(struct DjuiBase *base, char* text) {
|
||||||
struct DjuiInputbox *inputbox = (struct DjuiInputbox *) base;
|
struct DjuiInputbox *inputbox = (struct DjuiInputbox *) base;
|
||||||
char* msg = inputbox->buffer;
|
char* msg = inputbox->buffer;
|
||||||
int msgLen = strlen(msg);
|
int msgLen = strlen(msg);
|
||||||
int textLen = strlen(text);
|
int textLen = strlen(text);
|
||||||
|
|
||||||
// special case ñ and Ñ
|
djui_font_convert_to_smcode(text);
|
||||||
char* tinput = text;
|
|
||||||
while (*tinput != '\0') {
|
|
||||||
if (tinput[0] == SPANISH_UNICODE_START) {
|
|
||||||
if ((tinput[1] == SPANISH_UNICODE_LOWER_N || tinput[1] == SPANISH_UNICODE_UPPER_N)) {
|
|
||||||
// consume SPANISH_UNICODE_START
|
|
||||||
char* t2 = tinput;
|
|
||||||
while (*t2 != '\0') {
|
|
||||||
t2[0] = t2[1];
|
|
||||||
t2++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// translate
|
|
||||||
if (tinput[0] == SPANISH_UNICODE_LOWER_N) {
|
|
||||||
tinput[0] = SPANISH_SMCODE_LOWER_N;
|
|
||||||
} else if (tinput[0] == SPANISH_UNICODE_UPPER_N) {
|
|
||||||
tinput[0] = SPANISH_SMCODE_UPPER_N;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tinput++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure we're not just printing garbage characters
|
// make sure we're not just printing garbage characters
|
||||||
bool containsValidAscii = false;
|
bool containsValidAscii = false;
|
||||||
tinput = text;
|
char* tinput = text;
|
||||||
while (*tinput != '\0') {
|
while (*tinput != '\0') {
|
||||||
if (*tinput >= '!' && *tinput <= '~') {
|
if (djui_font_valid_smcode(*tinput)) {
|
||||||
containsValidAscii = true;
|
|
||||||
break;
|
|
||||||
} else if (*tinput == ' ') {
|
|
||||||
containsValidAscii = true;
|
|
||||||
break;
|
|
||||||
} else if (*tinput == SPANISH_SMCODE_LOWER_N) {
|
|
||||||
containsValidAscii = true;
|
|
||||||
break;
|
|
||||||
} else if (*tinput == SPANISH_SMCODE_UPPER_N) {
|
|
||||||
containsValidAscii = true;
|
containsValidAscii = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -367,9 +331,7 @@ static void djui_inputbox_on_text_input(struct DjuiBase *base, char* text) {
|
||||||
while (*t != '\0') {
|
while (*t != '\0') {
|
||||||
if (*t == '\n') { *t = ' '; }
|
if (*t == '\n') { *t = ' '; }
|
||||||
else if (*t == '\r') { *t = ' '; }
|
else if (*t == '\r') { *t = ' '; }
|
||||||
else if (*t == ' ') { ; }
|
else if (djui_font_valid_smcode(*t)) { ; }
|
||||||
else if (*t == SPANISH_SMCODE_LOWER_N) { ; }
|
|
||||||
else if (*t == SPANISH_SMCODE_UPPER_N) { ; }
|
|
||||||
else if (*t < '!' || *t > '~') { *t = '?'; }
|
else if (*t < '!' || *t > '~') { *t = '?'; }
|
||||||
t++;
|
t++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,6 +100,7 @@ static void gfx_sdl_reset_dimension_and_pos(void) {
|
||||||
|
|
||||||
static void gfx_sdl_init(const char *window_title) {
|
static void gfx_sdl_init(const char *window_title) {
|
||||||
SDL_Init(SDL_INIT_VIDEO);
|
SDL_Init(SDL_INIT_VIDEO);
|
||||||
|
SDL_StartTextInput();
|
||||||
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
||||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
|
@ -163,7 +164,6 @@ static void gfx_sdl_onkeyup(int scancode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_sdl_handle_events(void) {
|
static void gfx_sdl_handle_events(void) {
|
||||||
SDL_StartTextInput();
|
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
|
|
BIN
textures/segment2/custom_font_normal_char_sa.ia4.png
Normal file
After Width: | Height: | Size: 504 B |
BIN
textures/segment2/custom_font_normal_char_sca.ia4.png
Normal file
After Width: | Height: | Size: 512 B |
BIN
textures/segment2/custom_font_normal_char_sce.ia4.png
Normal file
After Width: | Height: | Size: 515 B |
BIN
textures/segment2/custom_font_normal_char_sci.ia4.png
Normal file
After Width: | Height: | Size: 514 B |
BIN
textures/segment2/custom_font_normal_char_sco.ia4.png
Normal file
After Width: | Height: | Size: 514 B |
BIN
textures/segment2/custom_font_normal_char_scu.ia4.png
Normal file
After Width: | Height: | Size: 513 B |
BIN
textures/segment2/custom_font_normal_char_scu2.ia4.png
Normal file
After Width: | Height: | Size: 519 B |
BIN
textures/segment2/custom_font_normal_char_se.ia4.png
Normal file
After Width: | Height: | Size: 504 B |
BIN
textures/segment2/custom_font_normal_char_sex.ia4.png
Normal file
After Width: | Height: | Size: 499 B |
BIN
textures/segment2/custom_font_normal_char_sex.ia4.png~
Normal file
After Width: | Height: | Size: 501 B |
BIN
textures/segment2/custom_font_normal_char_si.ia4.png
Normal file
After Width: | Height: | Size: 502 B |
BIN
textures/segment2/custom_font_normal_char_so.ia4.png
Normal file
After Width: | Height: | Size: 503 B |
BIN
textures/segment2/custom_font_normal_char_squ.ia4.png
Normal file
After Width: | Height: | Size: 509 B |
BIN
textures/segment2/custom_font_normal_char_squ.ia4.png~
Normal file
After Width: | Height: | Size: 512 B |
BIN
textures/segment2/custom_font_normal_char_su.ia4.png
Normal file
After Width: | Height: | Size: 509 B |
BIN
textures/segment2/custom_font_normal_char_su2.ia4.png
Normal file
After Width: | Height: | Size: 510 B |