Skip to content

Commit

Permalink
Merge pull request #393 from KrahJohlito/patch
Browse files Browse the repository at this point in the history
Fix an info page bug
  • Loading branch information
uyjulian committed Feb 28, 2021
2 parents 71a574c + 18835bf commit a8c7163
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 72 deletions.
3 changes: 3 additions & 0 deletions src/lang.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "include/util.h"
#include "include/fntsys.h"
#include "include/ioman.h"
#include "include/themes.h"

// Language support
static char *internalEnglish[LANG_STR_COUNT] = {
Expand Down Expand Up @@ -480,13 +481,15 @@ int lngSetGuiValue(int langID)
language_t *currLang = &languages[langID - 1];
if (lngLoadFromFile(currLang->filePath, currLang->name)) {
guiLangID = langID;
thmSetGuiValue(thmGetGuiValue(), 1);
return 1;
}
}
lang_strs = internalEnglish;
guiLangID = 0;
// lang switched back to internalEnglish, reload default font
fntLoadDefault(NULL);
thmSetGuiValue(thmGetGuiValue(), 1);
}
}
return 0;
Expand Down
42 changes: 25 additions & 17 deletions src/textures.c
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ static void texPngReadMemFunction(png_structp pngPtr, png_bytep data, png_size_t
*PngBufferPtr = (u8 *)(*PngBufferPtr) + length;
}

static void texPngReadPixels4(GSTEXTURE *texture, png_bytep *rowPointers)
static void texPngReadPixels4(GSTEXTURE *texture, png_bytep *rowPointers, size_t size)
{
unsigned char *pixel = (unsigned char *)texture->Mem;
png_clut_t *clut = (png_clut_t *)texture->Clut;
Expand All @@ -296,15 +296,19 @@ static void texPngReadPixels4(GSTEXTURE *texture, png_bytep *rowPointers)
clut[i].alpha = pngTexture.trans[i] >> 1;

for (i = 0; i < texture->Height; i++) {
for (j = 0; j < texture->Width / 2; j++) {
memcpy(&pixel[k], &rowPointers[i][1 * j], 1);
pixel[k] = (pixel[k] << 4) | (pixel[k] >> 4);
k++;
}
for (j = 0; j < texture->Width / 2; j++)
memcpy(&pixel[k++], &rowPointers[i][1 * j], 1);
}

int byte;
unsigned char *tmpdst = (unsigned char *)texture->Mem;
unsigned char *tmpsrc = (unsigned char *)pixel;

for (byte = 0; byte < size; byte++)
tmpdst[byte] = (tmpsrc[byte] << 4) | (tmpsrc[byte] >> 4);
}

static void texPngReadPixels8(GSTEXTURE *texture, png_bytep *rowPointers)
static void texPngReadPixels8(GSTEXTURE *texture, png_bytep *rowPointers, size_t size)
{
unsigned char *pixel = (unsigned char *)texture->Mem;
png_clut_t *clut = (png_clut_t *)texture->Clut;
Expand Down Expand Up @@ -341,7 +345,7 @@ static void texPngReadPixels8(GSTEXTURE *texture, png_bytep *rowPointers)
}
}

static void texPngReadPixels24(GSTEXTURE *texture, png_bytep *rowPointers)
static void texPngReadPixels24(GSTEXTURE *texture, png_bytep *rowPointers, size_t size)
{
struct pixel3
{
Expand All @@ -357,7 +361,7 @@ static void texPngReadPixels24(GSTEXTURE *texture, png_bytep *rowPointers)
}
}

static void texPngReadPixels32(GSTEXTURE *texture, png_bytep *rowPointers)
static void texPngReadPixels32(GSTEXTURE *texture, png_bytep *rowPointers, size_t size)
{
struct pixel
{
Expand All @@ -375,7 +379,7 @@ static void texPngReadPixels32(GSTEXTURE *texture, png_bytep *rowPointers)
}

static void texPngReadData(GSTEXTURE *texture, png_structp pngPtr, png_infop infoPtr,
void (*texPngReadPixels)(GSTEXTURE *texture, png_bytep *rowPointers))
void (*texPngReadPixels)(GSTEXTURE *texture, png_bytep *rowPointers, size_t size))
{
int row, rowBytes = png_get_rowbytes(pngPtr, infoPtr);
size_t size = gsKit_texture_size_ee(texture->Width, texture->Height, texture->PSM);
Expand All @@ -393,7 +397,7 @@ static void texPngReadData(GSTEXTURE *texture, png_structp pngPtr, png_infop inf
}
png_read_image(pngPtr, rowPointers);

texPngReadPixels(texture, rowPointers);
texPngReadPixels(texture, rowPointers, size);

for (row = 0; row < texture->Height; row++)
free(rowPointers[row]);
Expand Down Expand Up @@ -459,16 +463,19 @@ int texPngLoad(GSTEXTURE *texture, const char *path, int texId, short psm)
png_get_IHDR(pngPtr, infoPtr, &pngWidth, &pngHeight, &bitDepth, &colorType, &interlaceType, NULL, NULL);
texUpdate(texture, pngWidth, pngHeight);

if (colorType == PNG_COLOR_TYPE_GRAY)
png_set_expand(pngPtr);

if (bitDepth == 16)
png_set_strip_16(pngPtr);

if (colorType == PNG_COLOR_TYPE_GRAY || bitDepth < 4) {
png_set_expand(pngPtr);
if (png_get_valid(pngPtr, infoPtr, PNG_INFO_tRNS))
png_set_tRNS_to_alpha(pngPtr);
}

png_set_filler(pngPtr, 0x80, PNG_FILLER_AFTER);
png_read_update_info(pngPtr, infoPtr);

void (*texPngReadPixels)(GSTEXTURE * texture, png_bytep * rowPointers);
void (*texPngReadPixels)(GSTEXTURE * texture, png_bytep * rowPointers, size_t size);
switch (png_get_color_type(pngPtr, infoPtr)) {
case PNG_COLOR_TYPE_RGB_ALPHA:
// if PNG have alpha, then it fits for every case (even if we only wanted RGB)
Expand Down Expand Up @@ -497,13 +504,14 @@ int texPngLoad(GSTEXTURE *texture, const char *path, int texId, short psm)
memset(texture->Clut, 0, gsKit_texture_size_ee(8, 2, GS_PSM_CT32));

texPngReadPixels = &texPngReadPixels4;
} else {
} else if (bitDepth == 8) {
texture->PSM = GS_PSM_T8;
texture->Clut = memalign(128, gsKit_texture_size_ee(16, 16, GS_PSM_CT32));
memset(texture->Clut, 0, gsKit_texture_size_ee(16, 16, GS_PSM_CT32));

texPngReadPixels = &texPngReadPixels8;
}
} else
return texPngEnd(pngPtr, infoPtr, file, ERR_BAD_DEPTH);
break;
default:
return texPngEnd(pngPtr, infoPtr, file, ERR_BAD_DEPTH);
Expand Down
106 changes: 51 additions & 55 deletions src/themes.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,29 @@ static mutable_text_t *initMutableText(const char *themePath, config_set_t *them
else
alias = value;
}
length = strlen(alias) + 1 + 2;
mutableText->alias = (char *)malloc(length * sizeof(char));

char *temp;
if (!strncmp(alias, "Title", 5))
temp = _l(_STR_INFO_TITLE);
else if (!strncmp(alias, "Genre", 5))
temp = _l(_STR_INFO_GENRE);
else if (!strncmp(alias, "Release", 7))
temp = _l(_STR_INFO_RELEASE);
else if (!strncmp(alias, "Developer", 9))
temp = _l(_STR_INFO_DEVELOPER);
else if (!strncmp(alias, "Size", 4))
temp = _l(_STR_SIZE);
else if (!strncmp(alias, "Description", 11))
temp = _l(_STR_INFO_DESCRIPTION);
else
temp = (char *)alias;

length = strlen(temp) + 1 + 2;
mutableText->alias = (char *)calloc(length, sizeof(char));
if (mutableText->sizingMode == SIZING_WRAP)
snprintf(mutableText->alias, length, "%s:\n", alias);
snprintf(mutableText->alias, length, "%s:\n", temp);
else
snprintf(mutableText->alias, length, "%s: ", alias);
snprintf(mutableText->alias, length, "%s: ", temp);
} else {
if (mutableText->sizingMode == SIZING_WRAP)
fntFitString(elem->font, mutableText->value, elem->width);
Expand Down Expand Up @@ -183,9 +200,7 @@ static void initStaticText(const char *themePath, config_set_t *themeConfig, the

static void drawAttributeText(struct menu_list *menu, struct submenu_list *item, config_set_t *config, struct theme_element *elem)
{
char result[300];
mutable_text_t *mutableText = (mutable_text_t *)elem->extended;

if (config) {
if (mutableText->currentConfigId != config->uid) {
// force refresh
Expand All @@ -196,59 +211,40 @@ static void drawAttributeText(struct menu_list *menu, struct submenu_list *item,
fntFitString(elem->font, mutableText->currentValue, elem->width);
}
}
}

if (mutableText->displayMode == DISPLAY_NEVER) {
if (mutableText->currentValue) {
if (!strncmp(mutableText->alias, "Size", 4))
snprintf(result, sizeof(result), "%s MiB", mutableText->currentValue);
else
snprintf(result, sizeof(result), mutableText->currentValue);

if (mutableText->sizingMode == SIZING_NONE)
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, 0, 0, result, elem->color);
else
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, elem->width, elem->height, result, elem->color);
char result[300];
if (mutableText->displayMode == DISPLAY_NEVER) {
if (!strncmp(mutableText->alias, _l(_STR_SIZE), strlen(_l(_STR_SIZE)))) {
snprintf(result, sizeof(result), "%s MiB", mutableText->currentValue);
if (mutableText->sizingMode == SIZING_NONE)
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, 0, 0, result, elem->color);
else
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, elem->width, elem->height, result, elem->color);
} else {
if (mutableText->sizingMode == SIZING_NONE)
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, 0, 0, mutableText->currentValue, elem->color);
else
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, elem->width, elem->height, mutableText->currentValue, elem->color);
}
} else {
if (!strncmp(mutableText->alias, _l(_STR_SIZE), strlen(_l(_STR_SIZE))))
snprintf(result, sizeof(result), "%s%s MiB", mutableText->alias, mutableText->currentValue);
else
snprintf(result, sizeof(result), "%s%s", mutableText->alias, mutableText->currentValue);
if (mutableText->sizingMode == SIZING_NONE)
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, 0, 0, result, elem->color);
else
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, elem->width, elem->height, result, elem->color);
}
return;
}
return;
}

if (mutableText->displayMode == DISPLAY_DEFINED && mutableText->currentValue == NULL)
return;

char colon[4];
if (mutableText->sizingMode == SIZING_WRAP)
snprintf(colon, sizeof(colon), ":\n");
else
snprintf(colon, sizeof(colon), ": ");

int addSuffix = 0;
if (!strncmp(mutableText->alias, "Title", 5))
snprintf(result, sizeof(result), "%s%s", _l(_STR_INFO_TITLE), colon);
else if (!strncmp(mutableText->alias, "Genre", 5))
snprintf(result, sizeof(result), "%s%s", _l(_STR_INFO_GENRE), colon);
else if (!strncmp(mutableText->alias, "Release", 7))
snprintf(result, sizeof(result), "%s%s", _l(_STR_INFO_RELEASE), colon);
else if (!strncmp(mutableText->alias, "Developer", 9))
snprintf(result, sizeof(result), "%s%s", _l(_STR_INFO_DEVELOPER), colon);
else if (!strncmp(mutableText->alias, "Size", 4)) {
snprintf(result, sizeof(result), "%s%s", _l(_STR_SIZE), colon);
addSuffix = 1;
} else if (!strncmp(mutableText->alias, "Description", 11))
snprintf(result, sizeof(result), "%s%s", _l(_STR_INFO_DESCRIPTION), colon);
else
snprintf(result, sizeof(result), "%s", mutableText->alias);

if (mutableText->currentValue) {
strcat(result, mutableText->currentValue);
if (addSuffix)
strcat(result, " MiB");
if (mutableText->displayMode == DISPLAY_ALWAYS) {
if (mutableText->sizingMode == SIZING_NONE)
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, 0, 0, mutableText->alias, elem->color);
else
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, elem->width, elem->height, mutableText->alias, elem->color);
}

if (mutableText->sizingMode == SIZING_NONE)
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, 0, 0, result, elem->color);
else
fntRenderString(elem->font, elem->posX, elem->posY, elem->aligned, elem->width, elem->height, result, elem->color);
}

static void initAttributeText(const char *themePath, config_set_t *themeConfig, theme_t *theme, theme_element_t *elem, const char *name)
Expand Down

0 comments on commit a8c7163

Please sign in to comment.