summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2011-02-19 22:15:43 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2011-02-19 22:15:43 +0000
commitbd48a052a3b621233438bce25915aa3360502730 (patch)
tree0b814e4cf4ad9c2b7f8d1c0c1f4059479d235929 /desktop
parent4cc4f6dffcf9f529c1bae0bda82f2e5f3f5e81fc (diff)
downloadnetsurf-bd48a052a3b621233438bce25915aa3360502730.tar.gz
netsurf-bd48a052a3b621233438bce25915aa3360502730.tar.bz2
Add core thumbnail redraw functions.
svn path=/trunk/netsurf/; revision=11715
Diffstat (limited to 'desktop')
-rw-r--r--desktop/thumbnail.c77
-rw-r--r--desktop/thumbnail.h67
2 files changed, 144 insertions, 0 deletions
diff --git a/desktop/thumbnail.c b/desktop/thumbnail.c
new file mode 100644
index 000000000..ce36fdf1d
--- /dev/null
+++ b/desktop/thumbnail.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2011 Michael Drake <tlsa@netsurf-browser.org>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * Core thumbnail handling (implementation).
+ */
+
+#include <assert.h>
+#include <stdbool.h>
+
+#include "content/content.h"
+#include "content/hlcache.h"
+#include "desktop/browser.h"
+#include "desktop/options.h"
+#include "desktop/plotters.h"
+#include "desktop/thumbnail.h"
+#include "utils/log.h"
+
+
+/* exported interface, documented in thumbnail.h */
+bool thumbnail_redraw(struct hlcache_handle *content,
+ int width, int height)
+{
+ struct rect clip;
+ float scale;
+
+ assert(content);
+
+ /* No selection */
+ current_redraw_browser = NULL;
+
+ /* Set clip rectangle to required thumbnail size */
+ clip.x0 = 0;
+ clip.y0 = 0;
+ clip.x1 = width;
+ clip.y1 = height;
+
+ plot.clip(&clip);
+
+ /* Plot white background */
+ plot.rectangle(clip.x0, clip.y0, clip.x1, clip.y1,
+ plot_style_fill_white);
+
+ /* Find the scale we're using */
+ scale = thumbnail_get_redraw_scale(content, width);
+
+ /* Render the content */
+ return content_redraw(content, 0, 0, width, height, &clip, scale,
+ 0xFFFFFF);
+}
+
+
+/* exported interface, documented in thumbnail.h */
+float thumbnail_get_redraw_scale(struct hlcache_handle *content, int width)
+{
+ assert(content);
+
+ if (content_get_width(content))
+ return (float)width / (float)content_get_width(content);
+ else
+ return 1.0;
+}
diff --git a/desktop/thumbnail.h b/desktop/thumbnail.h
new file mode 100644
index 000000000..c4700547f
--- /dev/null
+++ b/desktop/thumbnail.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2011 Michael Drake <tlsa@netsurf-browser.org>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * Thumbail handling (interface).
+ */
+
+#ifndef _NETSURF_DESKTOP_THUMBNAIL_H_
+#define _NETSURF_DESKTOP_THUMBNAIL_H_
+
+#include <stdbool.h>
+
+struct hlcache_handle;
+struct bitmap;
+
+
+/**
+ * Redraw a content for thumbnailing
+ *
+ * Calls the redraw function for the content,
+ *
+ * \param content The content to redraw for thumbnail
+ * \param width The thumbnail width
+ * \param height The thumbnail height
+ * \return true if successful, false otherwise
+ *
+ * The thumbnail is guaranteed to be filled to its width/height extents, so
+ * there is no need to render a solid background first.
+ *
+ * Units for width and height are pixels.
+ */
+bool thumbnail_redraw(struct hlcache_handle *content,
+ int width, int height);
+
+/**
+ * Get scale at which thumbnail will be rendered for a given content and
+ * thumbnail size.
+ *
+ * \param content The content to redraw for thumbnail
+ * \param width The thumbnail width
+ * \return scale thumbnail will be rendered at
+ *
+ * Units for width and height are pixels.
+ */
+float thumbnail_get_redraw_scale(struct hlcache_handle *content, int width);
+
+
+/* In platform specific thumbnail.c. */
+bool thumbnail_create(struct hlcache_handle *content, struct bitmap *bitmap,
+ const char *url);
+
+#endif