Cleanup legacy font renderer

This commit is contained in:
James Lambert 2023-12-06 21:18:57 -07:00
parent 5775f8abcd
commit 31ad3967ba
7 changed files with 5 additions and 134 deletions

View file

@ -47,107 +47,6 @@ struct FontSymbol* fontFindSymbol(struct Font* font, short id) {
return NULL;
}
Gfx* fontRender(struct Font* font, char* message, int x, int y, Gfx* dl) {
int startX = x;
char prev = 0;
for (; *message; prev = *message, ++message) {
char curr = *message;
if (curr == '\n') {
y += font->charHeight;
x = startX;
continue;
}
// TODO utf-8 decode
struct FontSymbol* symbol = fontFindSymbol(font, (short)curr);
if (!symbol) {
continue;
}
x += fontDetermineKerning(font, prev, curr);
int finalX = x + symbol->xoffset;
int finalY = y + symbol->yoffset;
gSPTextureRectangle(
dl++,
finalX << 2, finalY << 2,
(finalX + symbol->width) << 2,
(finalY + symbol->height) << 2,
G_TX_RENDERTILE,
symbol->x << 5, symbol->y << 5,
0x400, 0x400
);
x += symbol->xadvance;
}
return dl;
}
int fontCountGfx(struct Font* font, char* message) {
int result = 0;
for (; *message; ++message) {
char curr = *message;
if (curr == '\n') {
continue;
}
// TODO utf-8 decode
struct FontSymbol* symbol = fontFindSymbol(font, (short)curr);
if (!symbol) {
continue;
}
result += 3;
}
return result;
}
struct Vector2s16 fontMeasure(struct Font* font, char* message) {
int startX = 0;
char prev = 0;
int x = 0;
int y = 0;
struct Vector2s16 result;
result.x = 0;
for (; *message; prev = *message, ++message) {
char curr = *message;
if (curr == '\n') {
y += font->charHeight;
x = startX;
continue;
}
// TODO utf-8 decode
struct FontSymbol* symbol = fontFindSymbol(font, (short)curr);
if (!symbol) {
continue;
}
x += fontDetermineKerning(font, prev, curr);
x += symbol->xadvance;
result.x = MAX(result.x, x);
}
result.y = y + font->charHeight;
return result;
}
short fontNextUtf8Character(char** strPtr) {
char* curr = *strPtr;

View file

@ -35,11 +35,6 @@ struct Font {
unsigned short kerningMaxCollisions;
};
// legacy methods for a font that fits into a single page
Gfx* fontRender(struct Font* font, char* message, int x, int y, Gfx* dl);
int fontCountGfx(struct Font* font, char* message);
struct Vector2s16 fontMeasure(struct Font* font, char* message);
struct SymbolLocation {
short x;
short y;

View file

@ -16,16 +16,6 @@ struct PrerenderedText* menuBuildPrerenderedText(struct Font* font, char* messag
return result;
}
Gfx* menuBuildText(struct Font* font, char* message, int x, int y) {
Gfx* result = malloc(sizeof(Gfx) * (fontCountGfx(font, message) + 1));
Gfx* dl = result;
dl = fontRender(font, message, x, y, dl);
gSPEndDisplayList(dl++);
return result;
}
Gfx* menuBuildBorder(int x, int y, int width, int height) {
Gfx* result = malloc(sizeof(Gfx) * 7 * 3 + 1);
Gfx* dl = result;
@ -211,7 +201,7 @@ void menuSetRenderColor(struct RenderState* renderState, int isSelected, struct
}
}
struct MenuCheckbox menuBuildCheckbox(struct Font* font, char* message, int x, int y, int shouldUsePrerendered) {
struct MenuCheckbox menuBuildCheckbox(struct Font* font, char* message, int x, int y) {
struct MenuCheckbox result;
result.x = x;
@ -227,12 +217,7 @@ struct MenuCheckbox menuBuildCheckbox(struct Font* font, char* message, int x, i
dl = menuRenderOutline(x, y, CHECKBOX_SIZE, CHECKBOX_SIZE, 1, dl);
gSPEndDisplayList(dl++);
if (shouldUsePrerendered) {
result.prerenderedText = menuBuildPrerenderedText(font, message, x + CHECKBOX_SIZE + 6, y, SCREEN_WD);
} else {
result.text = menuBuildText(font, message, x + CHECKBOX_SIZE + 6, y);
}
result.prerenderedText = menuBuildPrerenderedText(font, message, x + CHECKBOX_SIZE + 6, y, SCREEN_WD);
result.checked = 0;
return result;

View file

@ -17,10 +17,7 @@ struct MenuButton {
struct MenuCheckbox {
Gfx* outline;
union {
Gfx* text;
struct PrerenderedText* prerenderedText;
};
struct PrerenderedText* prerenderedText;
Gfx* checkedIndicator;
short x, y;
short checked;
@ -48,7 +45,6 @@ extern struct Coloru8 gSelectionGray;
extern struct Coloru8 gBorderHighlight;
extern struct Coloru8 gBorderDark;
Gfx* menuBuildText(struct Font* font, char* message, int x, int y);
struct PrerenderedText* menuBuildPrerenderedText(struct Font* font, char* message, int x, int y, int maxWidth);
Gfx* menuBuildBorder(int x, int y, int width, int height);
@ -61,7 +57,7 @@ struct MenuButton menuBuildButton(struct Font* font, char* message, int x, int y
void menuSetRenderColor(struct RenderState* renderState, int isSelected, struct Coloru8* selected, struct Coloru8* defaultColor);
void menuRebuildButtonText(struct MenuButton* button, struct Font* font, char* message, int rightAlign);
struct MenuCheckbox menuBuildCheckbox(struct Font* font, char* message, int x, int y, int shouldUsePrerendered);
struct MenuCheckbox menuBuildCheckbox(struct Font* font, char* message, int x, int y);
Gfx* menuCheckboxRender(struct MenuCheckbox* checkbox, Gfx* dl);
struct MenuSlider menuBuildSlider(int x, int y, int w, int tickCount);

View file

@ -44,8 +44,7 @@ void checkboxMenuItemInit(struct MenuBuilderElement* element) {
element->params->params.checkbox.font,
translationsGet(element->params->params.checkbox.messageId),
element->params->x,
element->params->y,
1
element->params->y
);
element->data = checkbox;
}

View file

@ -41,8 +41,6 @@ struct Tab gOptionTabs[] = {
void optionsMenuInit(struct OptionsMenu* options) {
options->menuOutline = menuBuildBorder(MENU_LEFT, MENU_TOP, MENU_WIDTH, MENU_HEIGHT);
options->optionsText = menuBuildText(&gDejaVuSansFont, "OPTIONS", 48, 48);
tabsInit(
&options->tabs,
gOptionTabs,

View file

@ -22,7 +22,6 @@ enum OptionsMenuTabs {
struct OptionsMenu {
Gfx* menuOutline;
Gfx* optionsText;
struct Tabs tabs;