mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-20 10:37:37 -04:00
Cleanup legacy font renderer
This commit is contained in:
parent
5775f8abcd
commit
31ad3967ba
101
src/font/font.c
101
src/font/font.c
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -22,7 +22,6 @@ enum OptionsMenuTabs {
|
|||
|
||||
struct OptionsMenu {
|
||||
Gfx* menuOutline;
|
||||
Gfx* optionsText;
|
||||
|
||||
struct Tabs tabs;
|
||||
|
||||
|
|
Loading…
Reference in a new issue