Author: vince
Date: Mon Nov 21 02:45:08 2011
New Revision: 13159
URL:
http://source.netsurf-browser.org?rev=13159&view=rev
Log:
Update for modified libnsfb API
Make thumbnailing work
Removed:
trunk/netsurf/framebuffer/bitmap.h
Modified:
trunk/netsurf/framebuffer/Makefile.target
trunk/netsurf/framebuffer/bitmap.c
trunk/netsurf/framebuffer/convert_image.c
trunk/netsurf/framebuffer/fbtk.h
trunk/netsurf/framebuffer/fbtk/bitmap.c
trunk/netsurf/framebuffer/fbtk/event.c
trunk/netsurf/framebuffer/fbtk/fbtk.c
trunk/netsurf/framebuffer/fbtk/osk.c
trunk/netsurf/framebuffer/fbtk/scroll.c
trunk/netsurf/framebuffer/fbtk/user.c
trunk/netsurf/framebuffer/fbtk/widget.h
trunk/netsurf/framebuffer/framebuffer.c
trunk/netsurf/framebuffer/framebuffer.h
trunk/netsurf/framebuffer/gui.c
trunk/netsurf/framebuffer/image_data.h
trunk/netsurf/framebuffer/localhistory.c
trunk/netsurf/framebuffer/thumbnail.c
Modified: trunk/netsurf/framebuffer/Makefile.target
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/Makefile.targ...
==============================================================================
--- trunk/netsurf/framebuffer/Makefile.target (original)
+++ trunk/netsurf/framebuffer/Makefile.target Mon Nov 21 02:45:08 2011
@@ -74,7 +74,7 @@
# We make convert_image depend on fb_bitmap.h so that if we change
# that header, we get new images built just in case.
-$(TOOLROOT)/convert_image: $(TOOLROOT)/created framebuffer/convert_image.c
framebuffer/bitmap.h
+$(TOOLROOT)/convert_image: $(TOOLROOT)/created framebuffer/convert_image.c
framebuffer/fbtk.h
$(VQ)echo " HOST CC: $@"
$(Q)$(HOST_CC) -o $@ framebuffer/convert_image.c -lpng
Modified: trunk/netsurf/framebuffer/bitmap.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/bitmap.c?rev=...
==============================================================================
--- trunk/netsurf/framebuffer/bitmap.c (original)
+++ trunk/netsurf/framebuffer/bitmap.c Mon Nov 21 02:45:08 2011
@@ -18,11 +18,12 @@
#include <inttypes.h>
#include <sys/types.h>
-
-#include "assert.h"
+#include <stdbool.h>
+#include <assert.h>
+
+#include <libnsfb.h>
+
#include "image/bitmap.h"
-#include "framebuffer/bitmap.h"
-
#include "utils/log.h"
/**
@@ -36,26 +37,29 @@
void *bitmap_create(int width, int height, unsigned int state)
{
- struct bitmap *bitmap;
+ nsfb_t *bm;
LOG(("width %d, height %d, state %u",width,height,state));
- bitmap = calloc(1 , sizeof(struct bitmap));
- if (bitmap) {
- bitmap->pixdata = calloc(4, width * height);
- if (bitmap->pixdata != NULL) {
- bitmap->width = width;
- bitmap->height = height;
- bitmap->opaque = (state & BITMAP_OPAQUE) != 0;
- } else {
- free(bitmap);
- bitmap=NULL;
- }
- }
-
- LOG(("bitmap %p", bitmap));
-
- return bitmap;
+ bm = nsfb_new(NSFB_SURFACE_RAM);
+ if (bm == NULL) {
+ return NULL;
+ }
+
+ if ((state & BITMAP_OPAQUE) == 0) {
+ nsfb_set_geometry(bm, width, height, NSFB_FMT_ABGR8888);
+ } else {
+ nsfb_set_geometry(bm, width, height, NSFB_FMT_XBGR8888);
+ }
+
+ if (nsfb_init(bm) == -1) {
+ nsfb_free(bm);
+ return NULL;
+ }
+
+ LOG(("bitmap %p", bm));
+
+ return bm;
}
@@ -71,14 +75,14 @@
unsigned char *bitmap_get_buffer(void *bitmap)
{
- struct bitmap *bm = bitmap;
-
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return NULL;
- }
-
- return bm->pixdata;
+ nsfb_t *bm = bitmap;
+ unsigned char *bmpptr;
+
+ assert(bm != NULL);
+
+ nsfb_get_buffer(bm, &bmpptr, NULL);
+
+ return bmpptr;
}
@@ -91,14 +95,14 @@
size_t bitmap_get_rowstride(void *bitmap)
{
- struct bitmap *bm = bitmap;
-
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return 0;
- }
-
- return (bm->width) * 4;
+ nsfb_t *bm = bitmap;
+ int bmpstride;
+
+ assert(bm != NULL);
+
+ nsfb_get_buffer(bm, NULL, &bmpstride);
+
+ return bmpstride;
}
@@ -110,15 +114,11 @@
void bitmap_destroy(void *bitmap)
{
- struct bitmap *bm = bitmap;
-
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return;
- }
-
- free(bm->pixdata);
- free(bm);
+ nsfb_t *bm = bitmap;
+
+ assert(bm != NULL);
+
+ nsfb_free(bm);
}
@@ -158,22 +158,24 @@
}
/**
- * Sets whether a bitmap should be plotted opaque
+ * Sets wether a bitmap should be plotted opaque
*
* \param bitmap a bitmap, as returned by bitmap_create()
* \param opaque whether the bitmap should be plotted opaque
*/
void bitmap_set_opaque(void *bitmap, bool opaque)
{
- struct bitmap *bm = bitmap;
-
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return;
- }
+ nsfb_t *bm = bitmap;
+
+ assert(bm != NULL);
LOG(("setting bitmap %p to %s", bm,
opaque?"opaque":"transparent"));
- bm->opaque = opaque;
+
+ if (opaque) {
+ nsfb_set_geometry(bm, 0, 0, NSFB_FMT_XBGR8888);
+ } else {
+ nsfb_set_geometry(bm, 0, 0, NSFB_FMT_ABGR8888);
+ }
}
@@ -186,17 +188,21 @@
bool bitmap_test_opaque(void *bitmap)
{
int tst;
- struct bitmap *bm = bitmap;
-
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return false;
- }
-
- tst = bm->width * bm->height;
+ nsfb_t *bm = bitmap;
+ unsigned char *bmpptr;
+ int width;
+ int height;
+
+ assert(bm != NULL);
+
+ nsfb_get_buffer(bm, &bmpptr, NULL);
+
+ nsfb_get_geometry(bm, &width, &height, NULL);
+
+ tst = width * height;
while (tst-- > 0) {
- if (bm->pixdata[(tst << 2) + 3] != 0xff) {
+ if (bmpptr[(tst << 2) + 3] != 0xff) {
LOG(("bitmap %p has transparency",bm));
return false;
}
@@ -207,46 +213,50 @@
/**
- * Gets whether a bitmap should be plotted opaque
+ * Gets weather a bitmap should be plotted opaque
*
* \param bitmap a bitmap, as returned by bitmap_create()
*/
bool bitmap_get_opaque(void *bitmap)
{
- struct bitmap *bm = bitmap;
-
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return false;
- }
-
- return bm->opaque;
+ nsfb_t *bm = bitmap;
+ enum nsfb_format_e format;
+
+ assert(bm != NULL);
+
+ nsfb_get_geometry(bm, NULL, NULL, &format);
+
+ if (format == NSFB_FMT_ABGR8888)
+ return false;
+
+ return true;
}
int bitmap_get_width(void *bitmap)
{
- struct bitmap *bm = bitmap;
-
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return 0;
- }
-
- return(bm->width);
+ nsfb_t *bm = bitmap;
+ int width;
+
+ assert(bm != NULL);
+
+ nsfb_get_geometry(bm, &width, NULL, NULL);
+
+ return(width);
}
int bitmap_get_height(void *bitmap)
{
- struct bitmap *bm = bitmap;
-
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return 0;
- }
-
- return(bm->height);
-}
-
+ nsfb_t *bm = bitmap;
+ int height;
+
+ assert(bm != NULL);
+
+ nsfb_get_geometry(bm, NULL, &height, NULL);
+
+ return(height);
+}
+
+/* get bytes per pixel */
size_t bitmap_get_bpp(void *bitmap)
{
return 4;
Removed: trunk/netsurf/framebuffer/bitmap.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/bitmap.h?rev=...
==============================================================================
--- trunk/netsurf/framebuffer/bitmap.h (original)
+++ trunk/netsurf/framebuffer/bitmap.h (removed)
@@ -1,33 +1,0 @@
-/*
- * Copyright 2008 Vincent Sanders <vince(a)simtec.co.uk>
- *
- * 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/>.
- */
-
-#ifndef FRAMEBUFFER_BITMAP_H
-#define FRAMEBUFFER_BITMAP_H
-
-struct bitmap {
- int width;
- int height;
- uint8_t *pixdata;
- bool opaque;
-
- /* The following two are only used for cursors */
- int hot_x;
- int hot_y;
-};
-
-#endif
Modified: trunk/netsurf/framebuffer/convert_image.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/convert_image...
==============================================================================
--- trunk/netsurf/framebuffer/convert_image.c (original)
+++ trunk/netsurf/framebuffer/convert_image.c Mon Nov 21 02:45:08 2011
@@ -177,7 +177,10 @@
fprintf(f, "#include <sys/types.h>\n\n");
fprintf(f, "#include <stdint.h>\n\n");
fprintf(f, "#include <stdbool.h>\n\n");
- fprintf(f, "#include \"framebuffer/bitmap.h\"\n\n");
+ fprintf(f, "#include <libnsfb.h>\n\n");
+ fprintf(f, "#include \"desktop/plot_style.h\"\n");
+ fprintf(f, "#include \"framebuffer/gui.h\"\n");
+ fprintf(f, "#include \"framebuffer/fbtk.h\"\n\n");
fprintf(f, "static uint8_t %s_pixdata[] = {\n", argv[3]);
for (y = 0; y < HEIGHT; ++y) {
@@ -197,7 +200,7 @@
}
fprintf(f, "};\n\n");
- fprintf(f, "struct bitmap %s = {\n", argv[3]);
+ fprintf(f, "struct fbtk_bitmap %s = {\n", argv[3]);
fprintf(f, "\t.width\t\t= %d,\n", WIDTH);
fprintf(f, "\t.height\t\t= %d,\n", HEIGHT);
fprintf(f, "\t.hot_x\t\t= %d,\n", HOT_X);
Modified: trunk/netsurf/framebuffer/fbtk.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/fbtk.h?rev=13...
==============================================================================
--- trunk/netsurf/framebuffer/fbtk.h (original)
+++ trunk/netsurf/framebuffer/fbtk.h Mon Nov 21 02:45:08 2011
@@ -61,6 +61,18 @@
fbtk_widget_t *widget;
} fbtk_callback_info;
+/* structure for framebuffer toolkit bitmaps */
+struct fbtk_bitmap {
+ int width;
+ int height;
+ uint8_t *pixdata;
+ bool opaque;
+
+ /* The following two are only used for cursors */
+ int hot_x;
+ int hot_y;
+};
+
typedef int (*fbtk_callback)(fbtk_widget_t *widget, fbtk_callback_info *cbi);
/* enter pressed on writable icon */
@@ -349,9 +361,9 @@
* @param window The window to add the bitmap widget to.
* @return new widget handle or NULL on error.
*/
-fbtk_widget_t *fbtk_create_bitmap(fbtk_widget_t *window, int x, int y, int width, int
height, colour c,struct bitmap *image);
-
-void fbtk_set_bitmap(fbtk_widget_t *widget, struct bitmap *image);
+fbtk_widget_t *fbtk_create_bitmap(fbtk_widget_t *window, int x, int y, int width, int
height, colour c,struct fbtk_bitmap *image);
+
+void fbtk_set_bitmap(fbtk_widget_t *widget, struct fbtk_bitmap *image);
/** Create a button widget.
*
@@ -361,7 +373,7 @@
* @param window The window to add the button widget to.
* @return new widget handle or NULL on error.
*/
-fbtk_widget_t *fbtk_create_button(fbtk_widget_t *window, int x, int y, int width, int
height, colour c, struct bitmap *image, fbtk_callback click, void *pw);
+fbtk_widget_t *fbtk_create_button(fbtk_widget_t *window, int x, int y, int width, int
height, colour c, struct fbtk_bitmap *image, fbtk_callback click, void *pw);
Modified: trunk/netsurf/framebuffer/fbtk/bitmap.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/fbtk/bitmap.c...
==============================================================================
--- trunk/netsurf/framebuffer/fbtk/bitmap.c (original)
+++ trunk/netsurf/framebuffer/fbtk/bitmap.c Mon Nov 21 02:45:08 2011
@@ -28,7 +28,6 @@
#include "framebuffer/gui.h"
#include "framebuffer/fbtk.h"
-#include "framebuffer/bitmap.h"
#include "framebuffer/image_data.h"
#include "widget.h"
@@ -70,7 +69,7 @@
/* exported function documented in fbtk.h */
void
-fbtk_set_bitmap(fbtk_widget_t *widget, struct bitmap *image)
+fbtk_set_bitmap(fbtk_widget_t *widget, struct fbtk_bitmap *image)
{
if ((widget == NULL) || (widget->type != FB_WIDGET_TYPE_BITMAP))
return;
@@ -88,7 +87,7 @@
int width,
int height,
colour c,
- struct bitmap *image)
+ struct fbtk_bitmap *image)
{
fbtk_widget_t *neww;
@@ -111,7 +110,7 @@
int width,
int height,
colour c,
- struct bitmap *image,
+ struct fbtk_bitmap *image,
fbtk_callback click,
void *pw)
{
Modified: trunk/netsurf/framebuffer/fbtk/event.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/fbtk/event.c?...
==============================================================================
--- trunk/netsurf/framebuffer/fbtk/event.c (original)
+++ trunk/netsurf/framebuffer/fbtk/event.c Mon Nov 21 02:45:08 2011
@@ -37,7 +37,6 @@
#include "framebuffer/gui.h"
#include "framebuffer/fbtk.h"
-#include "framebuffer/bitmap.h"
#include "framebuffer/image_data.h"
#include "widget.h"
Modified: trunk/netsurf/framebuffer/fbtk/fbtk.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/fbtk/fbtk.c?r...
==============================================================================
--- trunk/netsurf/framebuffer/fbtk/fbtk.c (original)
+++ trunk/netsurf/framebuffer/fbtk/fbtk.c Mon Nov 21 02:45:08 2011
@@ -38,7 +38,6 @@
#include "framebuffer/gui.h"
#include "framebuffer/fbtk.h"
-#include "framebuffer/bitmap.h"
#include "framebuffer/image_data.h"
#include "widget.h"
@@ -337,7 +336,7 @@
fbtk_set_ptr(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
fbtk_widget_t *root = fbtk_get_root_widget(widget);
- struct bitmap *bm = cbi->context;
+ struct fbtk_bitmap *bm = cbi->context;
nsfb_cursor_set(root->u.root.fb,
(nsfb_colour_t *)bm->pixdata,
Modified: trunk/netsurf/framebuffer/fbtk/osk.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/fbtk/osk.c?re...
==============================================================================
--- trunk/netsurf/framebuffer/fbtk/osk.c (original)
+++ trunk/netsurf/framebuffer/fbtk/osk.c Mon Nov 21 02:45:08 2011
@@ -31,7 +31,6 @@
#include "framebuffer/gui.h"
#include "framebuffer/fbtk.h"
-#include "framebuffer/bitmap.h"
#include "framebuffer/image_data.h"
#include "widget.h"
Modified: trunk/netsurf/framebuffer/fbtk/scroll.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/fbtk/scroll.c...
==============================================================================
--- trunk/netsurf/framebuffer/fbtk/scroll.c (original)
+++ trunk/netsurf/framebuffer/fbtk/scroll.c Mon Nov 21 02:45:08 2011
@@ -30,7 +30,6 @@
#include "framebuffer/gui.h"
#include "framebuffer/fbtk.h"
-#include "framebuffer/bitmap.h"
#include "framebuffer/image_data.h"
#include "widget.h"
Modified: trunk/netsurf/framebuffer/fbtk/user.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/fbtk/user.c?r...
==============================================================================
--- trunk/netsurf/framebuffer/fbtk/user.c (original)
+++ trunk/netsurf/framebuffer/fbtk/user.c Mon Nov 21 02:45:08 2011
@@ -19,7 +19,7 @@
*/
#include <stdlib.h>
-
+#include <stdbool.h>
#include <libnsfb.h>
#include "desktop/plotters.h"
Modified: trunk/netsurf/framebuffer/fbtk/widget.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/fbtk/widget.h...
==============================================================================
--- trunk/netsurf/framebuffer/fbtk/widget.h (original)
+++ trunk/netsurf/framebuffer/fbtk/widget.h Mon Nov 21 02:45:08 2011
@@ -165,7 +165,7 @@
/* bitmap */
struct {
- struct bitmap *bitmap;
+ struct fbtk_bitmap *bitmap;
} bitmap;
/* text */
Modified: trunk/netsurf/framebuffer/framebuffer.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/framebuffer.c...
==============================================================================
--- trunk/netsurf/framebuffer/framebuffer.c (original)
+++ trunk/netsurf/framebuffer/framebuffer.c Mon Nov 21 02:45:08 2011
@@ -30,11 +30,11 @@
#include "utils/log.h"
#include "desktop/browser.h"
+#include "image/bitmap.h"
#include "framebuffer/gui.h"
#include "framebuffer/fbtk.h"
#include "framebuffer/framebuffer.h"
-#include "framebuffer/bitmap.h"
#include "framebuffer/font.h"
/* netsurf framebuffer library handle */
@@ -175,8 +175,10 @@
nsfb_bbox_t clipbox;
bool repeat_x = (flags & BITMAPF_REPEAT_X);
bool repeat_y = (flags & BITMAPF_REPEAT_Y);
-
- nsfb_plot_get_clip(nsfb, &clipbox);
+ int bmwidth;
+ int bmheight;
+ unsigned char *bmptr;
+ nsfb_t *bm = (nsfb_t *)bitmap;
/* x and y define coordinate of top left of of the initial explicitly
* placed tile. The width and height are the image scaling and the
@@ -191,26 +193,19 @@
loc.x1 = loc.x0 + width;
loc.y1 = loc.y0 + height;
- if ((bitmap->width == 1) && (bitmap->height == 1)) {
- if ((*(nsfb_colour_t *)bitmap->pixdata & 0xff000000) == 0) {
- return true;
- }
- return nsfb_plot_rectangle_fill(nsfb, &loc, *(nsfb_colour_t
*)bitmap->pixdata);
-
- } else {
- return nsfb_plot_bitmap(nsfb, &loc,
- (nsfb_colour_t *)bitmap->pixdata,
- bitmap->width, bitmap->height,
- bitmap->width, !bitmap->opaque);
- }
- }
+ return nsfb_plot_copy(bm, NULL, nsfb, &loc);
+ }
+
+ nsfb_plot_get_clip(nsfb, &clipbox);
+ nsfb_get_geometry(bm, &bmwidth, &bmheight, NULL);
+ nsfb_get_buffer(bm, &bmptr, NULL);
/* Optimise tiled plots of 1x1 bitmaps by replacing with a flat fill
* of the area. Can only be done when image is fully opaque. */
- if ((bitmap->width == 1) && (bitmap->height == 1)) {
- if ((*(nsfb_colour_t *)bitmap->pixdata & 0xff000000) != 0) {
+ if ((bmwidth == 1) && (bmheight == 1)) {
+ if ((*(nsfb_colour_t *)bmptr & 0xff000000) != 0) {
return nsfb_plot_rectangle_fill(nsfb, &clipbox,
- *(nsfb_colour_t *)bitmap->pixdata);
+ *(nsfb_colour_t *)bmptr);
}
}
@@ -218,11 +213,11 @@
* a flat fill of the area. Can only be done when image is fully
* opaque. */
if ((width == 1) && (height == 1)) {
- if (bitmap->opaque) {
+ if (bitmap_get_opaque(bm)) {
/** TODO: Currently using top left pixel. Maybe centre
* pixel or average value would be better. */
return nsfb_plot_rectangle_fill(nsfb, &clipbox,
- *(nsfb_colour_t *)bitmap->pixdata);
+ *(nsfb_colour_t *)bmptr);
}
}
@@ -243,10 +238,8 @@
loc.x1 = loc.x0 + width;
loc.y1 = loc.y0 + height;
- nsfb_plot_bitmap(nsfb, &loc,
- (nsfb_colour_t *)bitmap->pixdata,
- bitmap->width, bitmap->height,
- bitmap->width, !bitmap->opaque);
+ nsfb_plot_copy(bm, NULL, nsfb, &loc);
+
if (!repeat_y)
break;
}
@@ -359,31 +352,63 @@
nsfb_t *
framebuffer_initialise(const char *fename, int width, int height, int bpp)
{
- enum nsfb_frontend_e fetype;
-
- fetype = nsfb_frontend_from_name(fename);
- if (fetype == NSFB_FRONTEND_NONE) {
- LOG(("The %s frontend is not available from libnsfb\n", fename));
+ enum nsfb_type_e fbtype;
+ enum nsfb_format_e fbfmt;
+
+ /* bpp is a proxy for the framebuffer format */
+ switch (bpp) {
+ case 32:
+ fbfmt = NSFB_FMT_XRGB8888;
+ break;
+
+ case 24:
+ fbfmt = NSFB_FMT_RGB888;
+ break;
+
+ case 16:
+ fbfmt = NSFB_FMT_RGB565;
+ break;
+
+ case 8:
+ fbfmt = NSFB_FMT_I8;
+ break;
+
+ case 4:
+ fbfmt = NSFB_FMT_I4;
+ break;
+
+ case 1:
+ fbfmt = NSFB_FMT_I1;
+ break;
+
+ default:
+ LOG(("Bad bits per pixel (%d)\n", bpp));
+ return NULL;
+ }
+
+ fbtype = nsfb_type_from_name(fename);
+ if (fbtype == NSFB_SURFACE_NONE) {
+ LOG(("The %s surface is not available from libnsfb\n", fename));
return NULL;
}
- nsfb = nsfb_init(fetype);
+ nsfb = nsfb_new(fbtype);
if (nsfb == NULL) {
- LOG(("Unable to initialise nsfb with %s frontend\n", fename));
+ LOG(("Unable to create %s fb surface\n", fename));
return NULL;
}
- if (nsfb_set_geometry(nsfb, width, height, bpp) == -1) {
- LOG(("Unable to set geometry\n"));
- nsfb_finalise(nsfb);
+ if (nsfb_set_geometry(nsfb, width, height, fbfmt) == -1) {
+ LOG(("Unable to set surface geometry\n"));
+ nsfb_free(nsfb);
return NULL;
}
nsfb_cursor_init(nsfb);
- if (nsfb_init_frontend(nsfb) == -1) {
- LOG(("Unable to initialise nsfb frontend\n"));
- nsfb_finalise(nsfb);
+ if (nsfb_init(nsfb) == -1) {
+ LOG(("Unable to initialise nsfb surface\n"));
+ nsfb_free(nsfb);
return NULL;
}
@@ -394,11 +419,19 @@
void
framebuffer_finalise(void)
{
- nsfb_finalise(nsfb);
+ nsfb_free(nsfb);
}
bool
-framebuffer_set_cursor(struct bitmap *bm)
+framebuffer_set_cursor(struct fbtk_bitmap *bm)
{
return nsfb_cursor_set(nsfb, (nsfb_colour_t *)bm->pixdata, bm->width,
bm->height, bm->width);
}
+
+nsfb_t *framebuffer_set_surface(nsfb_t *new_nsfb)
+{
+ nsfb_t *old_nsfb;
+ old_nsfb = nsfb;
+ nsfb = new_nsfb;
+ return old_nsfb;
+}
Modified: trunk/netsurf/framebuffer/framebuffer.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/framebuffer.h...
==============================================================================
--- trunk/netsurf/framebuffer/framebuffer.h (original)
+++ trunk/netsurf/framebuffer/framebuffer.h Mon Nov 21 02:45:08 2011
@@ -4,4 +4,10 @@
nsfb_t *framebuffer_initialise(const char *fename, int width, int height, int bpp);
void framebuffer_finalise(void);
-bool framebuffer_set_cursor(struct bitmap *bm);
+bool framebuffer_set_cursor(struct fbtk_bitmap *bm);
+
+/** Set framebuffer surface to render into
+ *
+ * @return return old surface
+ */
+nsfb_t *framebuffer_set_surface(nsfb_t *new_nsfb);
Modified: trunk/netsurf/framebuffer/gui.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/gui.c?rev=131...
==============================================================================
--- trunk/netsurf/framebuffer/gui.c (original)
+++ trunk/netsurf/framebuffer/gui.c Mon Nov 21 02:45:08 2011
@@ -49,7 +49,6 @@
#include "framebuffer/gui.h"
#include "framebuffer/fbtk.h"
#include "framebuffer/framebuffer.h"
-#include "framebuffer/bitmap.h"
#include "framebuffer/schedule.h"
#include "framebuffer/findfile.h"
#include "framebuffer/image_data.h"
@@ -222,7 +221,7 @@
dstbox.y1 = dstbox.y0 + height + bwidget->pany;
/* move part that remains visible up */
- nsfb_plot_copy(nsfb, &srcbox, &dstbox);
+ nsfb_plot_copy(nsfb, &srcbox, nsfb, &dstbox);
/* redraw newly exposed area */
bwidget->scrolly += bwidget->pany;
@@ -242,7 +241,7 @@
dstbox.y1 = dstbox.y0 + height - bwidget->pany;
/* move part that remains visible down */
- nsfb_plot_copy(nsfb, &srcbox, &dstbox);
+ nsfb_plot_copy(nsfb, &srcbox, nsfb, &dstbox);
/* redraw newly exposed area */
bwidget->scrolly += bwidget->pany;
@@ -262,7 +261,7 @@
dstbox.y1 = dstbox.y0 + height;
/* move part that remains visible left */
- nsfb_plot_copy(nsfb, &srcbox, &dstbox);
+ nsfb_plot_copy(nsfb, &srcbox, nsfb, &dstbox);
/* redraw newly exposed area */
bwidget->scrollx += bwidget->panx;
@@ -282,7 +281,7 @@
dstbox.y1 = dstbox.y0 + height;
/* move part that remains visible right */
- nsfb_plot_copy(nsfb, &srcbox, &dstbox);
+ nsfb_plot_copy(nsfb, &srcbox, nsfb, &dstbox);
/* redraw newly exposed area */
bwidget->scrollx += bwidget->panx;
@@ -1391,7 +1390,7 @@
throbber_advance(void *pw)
{
struct gui_window *g = pw;
- struct bitmap *image;
+ struct fbtk_bitmap *image;
switch (g->throbber_index) {
case 0:
Modified: trunk/netsurf/framebuffer/image_data.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/image_data.h?...
==============================================================================
--- trunk/netsurf/framebuffer/image_data.h (original)
+++ trunk/netsurf/framebuffer/image_data.h Mon Nov 21 02:45:08 2011
@@ -19,39 +19,39 @@
#ifndef FB_IMAGE_DATA
#define FB_IMAGE_DATA
-#include "framebuffer/bitmap.h"
+#include "framebuffer/fbtk.h"
-extern struct bitmap left_arrow;
-extern struct bitmap right_arrow;
-extern struct bitmap reload;
-extern struct bitmap stop_image;
-extern struct bitmap history_image;
+extern struct fbtk_bitmap left_arrow;
+extern struct fbtk_bitmap right_arrow;
+extern struct fbtk_bitmap reload;
+extern struct fbtk_bitmap stop_image;
+extern struct fbtk_bitmap history_image;
-extern struct bitmap left_arrow_g;
-extern struct bitmap right_arrow_g;
-extern struct bitmap reload_g;
-extern struct bitmap stop_image_g;
-extern struct bitmap history_image_g;
+extern struct fbtk_bitmap left_arrow_g;
+extern struct fbtk_bitmap right_arrow_g;
+extern struct fbtk_bitmap reload_g;
+extern struct fbtk_bitmap stop_image_g;
+extern struct fbtk_bitmap history_image_g;
-extern struct bitmap scrolll;
-extern struct bitmap scrollr;
-extern struct bitmap scrollu;
-extern struct bitmap scrolld;
+extern struct fbtk_bitmap scrolll;
+extern struct fbtk_bitmap scrollr;
+extern struct fbtk_bitmap scrollu;
+extern struct fbtk_bitmap scrolld;
-extern struct bitmap pointer_image;
-extern struct bitmap hand_image;
-extern struct bitmap caret_image;
-extern struct bitmap menu_image;
-extern struct bitmap progress_image;
+extern struct fbtk_bitmap pointer_image;
+extern struct fbtk_bitmap hand_image;
+extern struct fbtk_bitmap caret_image;
+extern struct fbtk_bitmap menu_image;
+extern struct fbtk_bitmap progress_image;
-extern struct bitmap throbber0;
-extern struct bitmap throbber1;
-extern struct bitmap throbber2;
-extern struct bitmap throbber3;
-extern struct bitmap throbber4;
-extern struct bitmap throbber5;
-extern struct bitmap throbber6;
-extern struct bitmap throbber7;
-extern struct bitmap throbber8;
+extern struct fbtk_bitmap throbber0;
+extern struct fbtk_bitmap throbber1;
+extern struct fbtk_bitmap throbber2;
+extern struct fbtk_bitmap throbber3;
+extern struct fbtk_bitmap throbber4;
+extern struct fbtk_bitmap throbber5;
+extern struct fbtk_bitmap throbber6;
+extern struct fbtk_bitmap throbber7;
+extern struct fbtk_bitmap throbber8;
#endif /* FB_IMAGE_DATA */
Modified: trunk/netsurf/framebuffer/localhistory.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/localhistory....
==============================================================================
--- trunk/netsurf/framebuffer/localhistory.c (original)
+++ trunk/netsurf/framebuffer/localhistory.c Mon Nov 21 02:45:08 2011
@@ -45,7 +45,6 @@
#include "framebuffer/gui.h"
#include "framebuffer/fbtk.h"
#include "framebuffer/framebuffer.h"
-#include "framebuffer/bitmap.h"
#include "framebuffer/schedule.h"
#include "framebuffer/findfile.h"
#include "framebuffer/image_data.h"
Modified: trunk/netsurf/framebuffer/thumbnail.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/thumbnail.c?r...
==============================================================================
--- trunk/netsurf/framebuffer/thumbnail.c (original)
+++ trunk/netsurf/framebuffer/thumbnail.c Mon Nov 21 02:45:08 2011
@@ -16,14 +16,80 @@
* along with this program. If not, see <
http://www.gnu.org/licenses/>.
*/
+#include <stdbool.h>
+
+#include <libnsfb.h>
+#include <libnsfb_plot.h>
+
+#include "utils/log.h"
#include "desktop/thumbnail.h"
#include "content/urldb.h"
-bool
-thumbnail_create(struct hlcache_handle *content,
+#include "framebuffer/gui.h"
+#include "framebuffer/fbtk.h"
+#include "framebuffer/framebuffer.h"
+
+bool
+thumbnail_create(struct hlcache_handle *content,
struct bitmap *bitmap,
const char *url)
{
+ nsfb_t *tbm = (nsfb_t *)bitmap; /* target bitmap */
+ nsfb_t *bm; /* temporary bitmap */
+ nsfb_t *current; /* current main fb */
+ int width, height; /* target bitmap width height */
+ int cwidth, cheight;/* content width /height */
+ nsfb_bbox_t loc;
+
+ struct redraw_context ctx = {
+ .interactive = false,
+ .plot = &fb_plotters
+ };
+
+
+ nsfb_get_geometry(tbm, &width, &height, NULL);
+
+ LOG(("width %d, height %d", width, height));
+
+ /* Calculate size of buffer to render the content into */
+ /* We get the width from the content width, unless it exceeds 1024,
+ * in which case we use 1024. This means we never create excessively
+ * large render buffers for huge contents, which would eat memory and
+ * cripple performance. */
+ cwidth = min(content_get_width(content), 1024);
+ /* The height is set in proportion with the width, according to the
+ * aspect ratio of the required thumbnail. */
+ cheight = ((cwidth * height) + (width / 2)) / width;
+
+ /* create temporary surface */
+ bm = nsfb_new(NSFB_SURFACE_RAM);
+ if (bm == NULL) {
+ return false;
+ }
+
+ nsfb_set_geometry(bm, cwidth, cheight, NSFB_FMT_XBGR8888);
+
+ if (nsfb_init(bm) == -1) {
+ nsfb_free(bm);
+ return false;
+ }
+
+ current = framebuffer_set_surface(bm);
+
+ /* render the content into temporary surface */
+ thumbnail_redraw(content, cwidth, cheight, &ctx);
+
+ framebuffer_set_surface(current);
+
+ loc.x0 = 0;
+ loc.y0 = 0;
+ loc.x1 = width;
+ loc.y1 = height;
+
+ nsfb_plot_copy(bm, NULL, tbm, &loc);
+
+ nsfb_free(bm);
+
/* register the thumbnail with the URL */
if (url != NULL)
urldb_set_thumbnail(url, bitmap);