From 199f11ce312a843ea65e0c28dcbc33df92f6a2c5 Mon Sep 17 00:00:00 2001 From: Bill Kendrick Date: Fri, 20 Dec 2024 00:13:59 -0800 Subject: [PATCH] Less stdout noise when running Tux Paint Avoid warnings when we cannot load non-existent SVGs by checking for file existence first. (h/t Thomas K) Add some "Info" and "Warning" labels to some output; improve some messages. Free gerror that rsvg_handle_new_from_file() allocates. --- docs/CHANGES.txt | 7 +++++- src/tuxpaint.c | 61 ++++++++++++++++++++++++++++++++---------------- 2 files changed, 47 insertions(+), 21 deletions(-) diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt index 461758e51..959f9447b 100644 --- a/docs/CHANGES.txt +++ b/docs/CHANGES.txt @@ -6,13 +6,18 @@ Copyright (c) 2002-2024 Various contributors (see below, and AUTHORS.txt) https://tuxpaint.org/ -2024.December.19 (0.9.35) +2024.December.20 (0.9.35) * Other Improvements: ------------------- + Improved color picker: better behavior when clicking/tapping and dragging hue/saturation box and value slider. Bill Kendrick + + Less warning noise to stdout (e.g., don't complain about inability + to load SVGs that don't exist; check whether they exist, first). + h/t Thomas Klausner for mentioning it. + Bill Kendrick + * Ports & Building: ----------------- + Don't use Linux-specific invocation of "install"; use "mkdir" & "cp" diff --git a/src/tuxpaint.c b/src/tuxpaint.c index a5c77b4b7..29d351174 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (See COPYING.txt) - June 14, 2002 - November 15, 2024 + June 14, 2002 - December 20, 2024 */ #include "platform.h" @@ -863,7 +863,7 @@ static void set_max_buttonscale(void) max_h = (float)WINDOW_HEIGHT / (40 + (6 * 48) + (gd_colors.rows * 48) + 56); button_scale = min(max_w, max_h); - fprintf(stderr, "Will use a button size of %d (scale = %f)\n", (int)(button_scale * ORIGINAL_BUTTON_SIZE), + fprintf(stderr, "Info: Will use a button size of %d (scale = %f)\n", (int)(button_scale * ORIGINAL_BUTTON_SIZE), button_scale); } @@ -920,7 +920,7 @@ static void setup_normal_screen_layout(void) if (buttons_tall < 5) { fprintf(stderr, - "Button size '%d' with window size '%dx%d' is not reasonable (not tall enough).\n", + "Warning: Button size '%d' with window size '%dx%d' is not reasonable (not tall enough).\n", button_w, WINDOW_WIDTH, WINDOW_HEIGHT); set_max_buttonscale(); setup_normal_screen_layout(); @@ -929,7 +929,7 @@ static void setup_normal_screen_layout(void) if (r_canvas.w < button_w * 9) { fprintf(stderr, - "Button size '%d' with window size '%dx%d' is not reasonable (not wide enough).\n", + "Warning: Button size '%d' with window size '%dx%d' is not reasonable (not wide enough).\n", button_w, WINDOW_WIDTH, WINDOW_HEIGHT); set_max_buttonscale(); setup_normal_screen_layout(); @@ -1725,7 +1725,7 @@ static SDL_Surface *render_text(TuxPaint_Font *restrict font, const char *restri if (font == NULL) { - fprintf(stderr, "render_text() received a NULL font!\n"); + fprintf(stderr, "Warning: render_text() received a NULL font!\n"); fflush(stdout); return NULL; } @@ -3701,7 +3701,7 @@ static void mainloop(void) } if (kbd == NULL) - fprintf(stderr, "kbd = NULL\n"); + fprintf(stderr, "Warning: kbd = NULL\n"); else reposition_onscreen_keyboard(0); } @@ -14282,10 +14282,17 @@ static SDL_Surface *load_starter_helper(char *path_and_basename, char fname[256]; SDL_Surface *surf; unsigned int i; + struct stat stat_buf; ext = strdup(extension); safe_snprintf(fname, sizeof(fname), "%s.%s", path_and_basename, ext); + if (stat(fname, &stat_buf) != 0) + { + /* File by that name doesn't exist; give up now */ + return NULL; + } + surf = (*load_func) (fname); if (surf == NULL) @@ -21353,9 +21360,11 @@ static SDL_Surface *_load_svg(const char *file) rsvg_handle = rsvg_handle_new_from_file(file, &gerr); if (rsvg_handle == NULL) { - fprintf(stderr, "rsvg_handle_new_from_file(%s) failed\n", file); + fprintf(stderr, "rsvg_handle_new_from_file(%s) failed: %s\n", file, gerr->message); + free(gerr); return (NULL); } + free(gerr); /* rsvg_handle_get_dimensions() is deprecated since since version 2.52, but we currently support some platforms where it's not yet available @@ -21632,6 +21641,13 @@ static SDL_Surface *myIMG_Load_RWops(const char *file) otherwise call SDL_Image lib's IMG_Load() (for PNGs, JPEGs, BMPs, etc.) */ static SDL_Surface *myIMG_Load(const char *file) { + struct stat stat_buf; + if (stat(file, &stat_buf) != 0) + { + /* File by that name doesn't exist; give up now */ + return NULL; + } + if (strlen(file) > 4 && strcasecmp(file + strlen(file) - 4, ".kpx") == 0) { return (load_kpx(file)); @@ -28648,7 +28664,7 @@ static void setup_config(char *argv[]) { if (strcmp(tmpcfg.tp_ui_font, "default") == 0) { - printf /*DEBUG_PRINTF */ ("Requested default UI font, \"%s\"\n", PANGO_DEFAULT_FONT); + printf /*DEBUG_PRINTF */ ("Info: Requested default UI font, \"%s\"\n", PANGO_DEFAULT_FONT); tp_ui_font = strdup(PANGO_DEFAULT_FONT); if (PANGO_DEFAULT_FONT_FALLBACK != NULL) { @@ -28658,12 +28674,12 @@ static void setup_config(char *argv[]) else { tp_ui_font = strdup(tmpcfg.tp_ui_font); - printf /*DEBUG_PRINTF */ ("Requested UI font described by \"%s\"\n", tp_ui_font); + printf /*DEBUG_PRINTF */ ("Info: Requested UI font described by \"%s\"\n", tp_ui_font); } } else { - printf /*DEBUG_PRINTF */ ("Requested default UI font, \"%s\"\n", PANGO_DEFAULT_FONT); + printf /*DEBUG_PRINTF */ ("Info: Requested default UI font, \"%s\"\n", PANGO_DEFAULT_FONT); tp_ui_font = strdup(PANGO_DEFAULT_FONT); if (PANGO_DEFAULT_FONT_FALLBACK != NULL) { @@ -28713,19 +28729,19 @@ static void setup_config(char *argv[]) tp_ui_font = strdup(tp_ui_font_fallback); tp_ui_font_fallback = NULL; - printf /*DEBUG_PRINTF */ ("Requested fallback default UI font, \"%s\"\n", tp_ui_font); + printf /*DEBUG_PRINTF */ ("Info: Requested fallback default UI font, \"%s\"\n", tp_ui_font); tmp_str = ask_pango_for_font(tp_ui_font); } } if (tmp_str != NULL) { - printf("Actual UI font will be \"%s\"\n", tmp_str); + printf("Info: Actual UI font will be \"%s\"\n", tmp_str); free(tmp_str); } else { - printf("Error asking pango for actual font!\n"); + printf("Error: Problem asking pango for actual font!\n"); } /* FIXME: most of this is not required before starting the font scanner */ @@ -29708,7 +29724,7 @@ static void setup(void) joystick = SDL_JoystickOpen(joystick_dev); if (joystick == NULL) { - fprintf(stderr, "Could not open joystick device %d: %s\n", joystick_dev, SDL_GetError()); + fprintf(stderr, "Info: Could not open joystick device %d: %s\n", joystick_dev, SDL_GetError()); } else { @@ -29853,14 +29869,16 @@ static void setup(void) SDL_CreateWindow("Tux Paint", win_x, win_y, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_HWSURFACE); if (window_screen == NULL) - printf("window_screen = NULL 1\n"); + printf("Warning: Cannot open fullscreen with hardware surface\n"); #else window_screen = SDL_CreateWindow(NULL, win_x, win_y, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_FULLSCREEN_DESKTOP); if (window_screen == NULL) - printf("window_screen = NULL 2\n"); + printf("Warning: Cannot open fullscreen with software surface\n"); #endif + /* FIXME: Check window_screen for being NULL, and abort?! (Also see below) -bjk 2024.12.20 */ + renderer = SDL_CreateRenderer(window_screen, -1, 0); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); @@ -29987,6 +30005,8 @@ static void setup(void) if (mode.w >= WINDOW_WIDTH && mode.h >= WINDOW_HEIGHT) { /* Found a display capable of the chosen window size */ + max_scrn_w = mode.w; + max_scrn_h = mode.h; } else { @@ -30008,13 +30028,13 @@ static void setup(void) /* Only found one display, and window size is larger? Use that window size */ if (WINDOW_WIDTH > max_scrn_w) { - fprintf(stderr, "Asked for window width (%d) larger than max screen width (%d)\n", WINDOW_WIDTH, max_scrn_w); + fprintf(stderr, "Warning: Asked for window width (%d) larger than max screen width (%d)\n", WINDOW_WIDTH, max_scrn_w); WINDOW_WIDTH = max_scrn_w; } if (WINDOW_HEIGHT > max_scrn_h) { - fprintf(stderr, "Asked for window height (%d) larger than max screen height (%d)\n", WINDOW_HEIGHT, max_scrn_h); + fprintf(stderr, "Warning: Asked for window height (%d) larger than max screen height (%d)\n", WINDOW_HEIGHT, max_scrn_h); WINDOW_HEIGHT = max_scrn_h; } } @@ -30024,13 +30044,14 @@ static void setup(void) #ifdef USE_HWSURFACE window_screen = SDL_CreateWindow("Tux Paint", win_x, win_y, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_HWSURFACE); if (window_screen == NULL) - printf("window_screen = NULL 3\n"); + printf("Warning: Could not create a window with a hardware surface\n"); #else window_screen = SDL_CreateWindow("Tux Paint", win_x, win_y, WINDOW_WIDTH, WINDOW_HEIGHT, 0 /* no flags */ ); if (window_screen == NULL) - printf("window_screen = NULL 4\n"); + printf("Warning: Could not create a window with a software surface\n"); #endif + /* FIXME: Check window_screen for being NULL, and abort?! (Also see above) -bjk 2024.12.20 */ /* Note: Seems that this depends on the compliance by the window manager. Currently this doesn't work under Fvwm */