diff --git a/minui/resources.c b/minui/resources.c index 7ecfeef..3d2c727 100644 --- a/minui/resources.c +++ b/minui/resources.c @@ -97,9 +97,10 @@ int res_create_surface(const char* name, gr_surface* pSurface) { int color_type = info_ptr->color_type; int bit_depth = info_ptr->bit_depth; int channels = info_ptr->channels; - if (bit_depth != 8 || (channels != 3 && channels != 4) || - (color_type != PNG_COLOR_TYPE_RGB && - color_type != PNG_COLOR_TYPE_RGBA)) { + if (!(bit_depth == 8 && + ((channels == 3 && color_type == PNG_COLOR_TYPE_RGB) || + (channels == 4 && color_type == PNG_COLOR_TYPE_RGBA) || + (channels == 1 && color_type == PNG_COLOR_TYPE_PALETTE)))) { return -7; goto exit; } @@ -118,6 +119,10 @@ int res_create_surface(const char* name, gr_surface* pSurface) { surface->format = (channels == 3) ? GGL_PIXEL_FORMAT_RGBX_8888 : GGL_PIXEL_FORMAT_RGBA_8888; + if (color_type == PNG_COLOR_TYPE_PALETTE) { + png_set_palette_to_rgb(png_ptr); + } + int y; if (channels == 3) { for (y = 0; y < height; ++y) { diff --git a/res/images/indeterminate1.png b/res/images/indeterminate1.png index 264bf27..90cb9fb 100644 Binary files a/res/images/indeterminate1.png and b/res/images/indeterminate1.png differ diff --git a/res/images/indeterminate2.png b/res/images/indeterminate2.png index c30c049..f7fb289 100644 Binary files a/res/images/indeterminate2.png and b/res/images/indeterminate2.png differ diff --git a/res/images/indeterminate3.png b/res/images/indeterminate3.png index 891a000..ba10dfa 100644 Binary files a/res/images/indeterminate3.png and b/res/images/indeterminate3.png differ diff --git a/res/images/indeterminate4.png b/res/images/indeterminate4.png index 7a64151..ad5d9a5 100644 Binary files a/res/images/indeterminate4.png and b/res/images/indeterminate4.png differ diff --git a/res/images/indeterminate5.png b/res/images/indeterminate5.png index cd6ab20..8c19c8d 100644 Binary files a/res/images/indeterminate5.png and b/res/images/indeterminate5.png differ diff --git a/res/images/indeterminate6.png b/res/images/indeterminate6.png index ddd9e73..c0c6638 100644 Binary files a/res/images/indeterminate6.png and b/res/images/indeterminate6.png differ diff --git a/res/images/progress_bar_empty.png b/res/images/progress_bar_empty.png deleted file mode 100644 index 9013f04..0000000 Binary files a/res/images/progress_bar_empty.png and /dev/null differ diff --git a/res/images/progress_bar_empty_left_round.png b/res/images/progress_bar_empty_left_round.png deleted file mode 100644 index dae7d5d..0000000 Binary files a/res/images/progress_bar_empty_left_round.png and /dev/null differ diff --git a/res/images/progress_bar_empty_right_round.png b/res/images/progress_bar_empty_right_round.png deleted file mode 100644 index 5427088..0000000 Binary files a/res/images/progress_bar_empty_right_round.png and /dev/null differ diff --git a/res/images/progress_bar_fill.png b/res/images/progress_bar_fill.png deleted file mode 100644 index 37c04b4..0000000 Binary files a/res/images/progress_bar_fill.png and /dev/null differ diff --git a/res/images/progress_bar_left_round.png b/res/images/progress_bar_left_round.png deleted file mode 100644 index e72af47..0000000 Binary files a/res/images/progress_bar_left_round.png and /dev/null differ diff --git a/res/images/progress_bar_right_round.png b/res/images/progress_bar_right_round.png deleted file mode 100644 index d04c980..0000000 Binary files a/res/images/progress_bar_right_round.png and /dev/null differ diff --git a/res/images/progress_empty.png b/res/images/progress_empty.png new file mode 100644 index 0000000..4cb4998 Binary files /dev/null and b/res/images/progress_empty.png differ diff --git a/res/images/progress_fill.png b/res/images/progress_fill.png new file mode 100644 index 0000000..eb71754 Binary files /dev/null and b/res/images/progress_fill.png differ diff --git a/ui.c b/ui.c index 51df1fa..fdc0991 100644 --- a/ui.c +++ b/ui.c @@ -38,13 +38,11 @@ #define PROGRESSBAR_INDETERMINATE_STATES 6 #define PROGRESSBAR_INDETERMINATE_FPS 15 -enum { LEFT_SIDE, CENTER_TILE, RIGHT_SIDE, NUM_SIDES }; - static pthread_mutex_t gUpdateMutex = PTHREAD_MUTEX_INITIALIZER; static gr_surface gBackgroundIcon[NUM_BACKGROUND_ICONS]; static gr_surface gProgressBarIndeterminate[PROGRESSBAR_INDETERMINATE_STATES]; -static gr_surface gProgressBarEmpty[NUM_SIDES]; -static gr_surface gProgressBarFill[NUM_SIDES]; +static gr_surface gProgressBarEmpty; +static gr_surface gProgressBarFill; static const struct { gr_surface* surface; const char *name; } BITMAPS[] = { { &gBackgroundIcon[BACKGROUND_ICON_INSTALLING], "icon_installing" }, @@ -59,12 +57,8 @@ static const struct { gr_surface* surface; const char *name; } BITMAPS[] = { { &gProgressBarIndeterminate[3], "indeterminate4" }, { &gProgressBarIndeterminate[4], "indeterminate5" }, { &gProgressBarIndeterminate[5], "indeterminate6" }, - { &gProgressBarEmpty[LEFT_SIDE], "progress_bar_empty_left_round" }, - { &gProgressBarEmpty[CENTER_TILE], "progress_bar_empty" }, - { &gProgressBarEmpty[RIGHT_SIDE], "progress_bar_empty_right_round" }, - { &gProgressBarFill[LEFT_SIDE], "progress_bar_left_round" }, - { &gProgressBarFill[CENTER_TILE], "progress_bar_fill" }, - { &gProgressBarFill[RIGHT_SIDE], "progress_bar_right_round" }, + { &gProgressBarEmpty, "progress_empty" }, + { &gProgressBarFill, "progress_fill" }, { NULL, NULL }, }; @@ -123,8 +117,8 @@ static void draw_progress_locked() if (gProgressBarType == PROGRESSBAR_TYPE_NONE) return; int iconHeight = gr_get_height(gBackgroundIcon[BACKGROUND_ICON_INSTALLING]); - int width = gr_get_width(gProgressBarIndeterminate[0]); - int height = gr_get_height(gProgressBarIndeterminate[0]); + int width = gr_get_width(gProgressBarEmpty); + int height = gr_get_height(gProgressBarEmpty); int dx = (gr_fb_width() - width)/2; int dy = (3*gr_fb_height() + iconHeight - 2*height)/4; @@ -137,18 +131,12 @@ static void draw_progress_locked() float progress = gProgressScopeStart + gProgress * gProgressScopeSize; int pos = (int) (progress * width); - gr_surface s = (pos ? gProgressBarFill : gProgressBarEmpty)[LEFT_SIDE]; - gr_blit(s, 0, 0, gr_get_width(s), gr_get_height(s), dx, dy); - - int x = gr_get_width(s); - while (x + (int) gr_get_width(gProgressBarEmpty[RIGHT_SIDE]) < width) { - s = (pos > x ? gProgressBarFill : gProgressBarEmpty)[CENTER_TILE]; - gr_blit(s, 0, 0, gr_get_width(s), gr_get_height(s), dx + x, dy); - x += gr_get_width(s); + if (pos > 0) { + gr_blit(gProgressBarFill, 0, 0, pos, height, dx, dy); + } + if (pos < width-1) { + gr_blit(gProgressBarEmpty, pos, 0, width-pos, height, dx+pos, dy); } - - s = (pos > x ? gProgressBarFill : gProgressBarEmpty)[RIGHT_SIDE]; - gr_blit(s, 0, 0, gr_get_width(s), gr_get_height(s), dx + x, dy); } if (gProgressBarType == PROGRESSBAR_TYPE_INDETERMINATE) {