diff options
author | Mario Sanchez Prada <msanchez@gnome.org> | 2012-12-04 20:31:52 +0800 |
---|---|---|
committer | Mario Sanchez Prada <msanchez@gnome.org> | 2012-12-04 20:02:40 +0800 |
commit | ab48808effad3a4d5e58be8877108071d8685a8a (patch) | |
tree | 91732637ea334c824e9139987d53e59c035f1b93 | |
parent | 922083024453e10d90cc9819bd0bc6896636e780 (diff) | |
download | gsoc2013-epiphany-ab48808effad3a4d5e58be8877108071d8685a8a.tar gsoc2013-epiphany-ab48808effad3a4d5e58be8877108071d8685a8a.tar.gz gsoc2013-epiphany-ab48808effad3a4d5e58be8877108071d8685a8a.tar.bz2 gsoc2013-epiphany-ab48808effad3a4d5e58be8877108071d8685a8a.tar.lz gsoc2013-epiphany-ab48808effad3a4d5e58be8877108071d8685a8a.tar.xz gsoc2013-epiphany-ab48808effad3a4d5e58be8877108071d8685a8a.tar.zst gsoc2013-epiphany-ab48808effad3a4d5e58be8877108071d8685a8a.zip |
Add new helper functions WebKit2GTK+'s favicons API.
At the moment, just add one function to obtain a GdkPixbuf* with
specific dimensions from a cairo_surface_t*.
https://bugzilla.gnome.org/show_bug.cgi?id=679370
-rw-r--r-- | lib/Makefile.am | 2 | ||||
-rw-r--r-- | lib/ephy-favicon-helpers.c | 49 | ||||
-rw-r--r-- | lib/ephy-favicon-helpers.h | 36 |
3 files changed, 87 insertions, 0 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index 175297c7c..c120afc51 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -10,6 +10,7 @@ header_DATA = \ NOINST_H_FILES = \ ephy-debug.h \ ephy-dnd.h \ + ephy-favicon-helpers.h \ ephy-file-chooser.h \ ephy-file-helpers.h \ ephy-gui.h \ @@ -45,6 +46,7 @@ libephymisc_la_SOURCES = \ ephy-debug.c \ ephy-dialog.c \ ephy-dnd.c \ + ephy-favicon-helpers.c \ ephy-file-chooser.c \ ephy-file-helpers.c \ ephy-gui.c \ diff --git a/lib/ephy-favicon-helpers.c b/lib/ephy-favicon-helpers.c new file mode 100644 index 000000000..6ff236abd --- /dev/null +++ b/lib/ephy-favicon-helpers.c @@ -0,0 +1,49 @@ +/* + * Copyright © 2012 Igalia S.L. + * + * This program 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; either version 2, or (at your option) + * any later version. + * + * This program 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#include "config.h" +#include "ephy-favicon-helpers.h" + +#include <gdk/gdk.h> +#include <glib.h> + +GdkPixbuf * +ephy_pixbuf_get_from_surface_scaled (cairo_surface_t *surface, int width, int height) +{ + GdkPixbuf *pixbuf; + int favicon_width; + int favicon_height; + + /* Treat NULL surface cleanly. */ + if (!surface) + return NULL; + + favicon_width = cairo_image_surface_get_width (surface); + favicon_height = cairo_image_surface_get_height (surface); + pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, favicon_width, favicon_height); + + /* A size of (0, 0) means the original size of the favicon. */ + if (width && height && (favicon_width != width || favicon_height != height)) { + GdkPixbuf *scaled_pixbuf = gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR); + g_object_unref (pixbuf); + pixbuf = scaled_pixbuf; + } + + return pixbuf; +} diff --git a/lib/ephy-favicon-helpers.h b/lib/ephy-favicon-helpers.h new file mode 100644 index 000000000..2a6e326b1 --- /dev/null +++ b/lib/ephy-favicon-helpers.h @@ -0,0 +1,36 @@ +/* + * Copyright © 2012 Igalia S.L. + * + * This program 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; either version 2, or (at your option) + * any later version. + * + * This program 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION) +#error "Only <epiphany/epiphany.h> can be included directly." +#endif + +#ifndef EPHY_FAVICON_HELPERS_H +#define EPHY_FAVICON_HELPERS_H + +#include <cairo.h> +#include <gdk-pixbuf/gdk-pixbuf.h> + +G_BEGIN_DECLS + +GdkPixbuf *ephy_pixbuf_get_from_surface_scaled (cairo_surface_t *surface, int width, int height); + +G_END_DECLS + +#endif /* EPHY_FAVICON_HELPERS_H */ |