From 42f89d4e0b35bbe768918305b624e20ef654d619 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sat, 29 Jan 2011 23:40:22 +0000 Subject: fixup gtk source file names svn path=/trunk/netsurf/; revision=11529 --- gtk/throbber.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 gtk/throbber.c (limited to 'gtk/throbber.c') diff --git a/gtk/throbber.c b/gtk/throbber.c new file mode 100644 index 000000000..987b9dd42 --- /dev/null +++ b/gtk/throbber.c @@ -0,0 +1,106 @@ +/* + * Copyright 2008 Rob Kendrick + * Copyright 2008 Sean Fox + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#ifdef WITH_GIF +#include +#endif +#include "utils/log.h" +#include "gtk/throbber.h" +#include "gtk/bitmap.h" + +struct nsgtk_throbber *nsgtk_throbber = NULL; + +/** + * Creates the throbber using a PNG for each frame. The number of frames must + * be at least two. The first frame is the inactive frame, others are the + * active frames. + * + * \param frames The number of frames. Must be at least two. + * \param ... Filenames of PNGs containing frames. + * \return true on success. + */ +bool nsgtk_throbber_initialise_from_png(const int frames, char** frame_files) +{ + GError *err = NULL; + struct nsgtk_throbber *throb; /**< structure we generate */ + bool errors_when_loading = false; /**< true if a frame failed */ + int frame_loop; + + if (frames < 2) { + /* we need at least two frames - one for idle, one for active */ + LOG(("Insufficent number of frames in throbber animation!")); + LOG(("(called with %d frames, where 2 is a minimum.)", + frames)); + return false; + } + + throb = malloc(sizeof(*throb)); + if (throb == NULL) + return false; + + throb->nframes = frames; + throb->framedata = malloc(sizeof(GdkPixbuf *) * throb->nframes); + if (throb->framedata == NULL) { + free(throb); + return false; + } + + for (frame_loop = 0; frame_loop < frames; frame_loop++) { + throb->framedata[frame_loop] = gdk_pixbuf_new_from_file(frame_files[frame_loop], &err); + if (err != NULL) { + LOG(("Error when loading %s: %s (%d)", + frame_files[frame_loop], err->message, err->code)); + throb->framedata[frame_loop] = NULL; + errors_when_loading = true; + } + } + + if (errors_when_loading == true) { + for (frame_loop = 0; frame_loop < frames; frame_loop++) { + if (throb->framedata[frame_loop] != NULL) + gdk_pixbuf_unref(throb->framedata[frame_loop]); + } + + free(throb->framedata); + free(throb); + + return false; + } + + nsgtk_throbber = throb; + + return true; +} + +void nsgtk_throbber_finalise(void) +{ + int i; + + for (i = 0; i < nsgtk_throbber->nframes; i++) + gdk_pixbuf_unref(nsgtk_throbber->framedata[i]); + + free(nsgtk_throbber->framedata); + free(nsgtk_throbber); + + nsgtk_throbber = NULL; +} + -- cgit v1.2.3