From cd40c260b9cecbe9d658a00e231aa4d82734e22d Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Mon, 21 Feb 2011 14:48:55 +0000 Subject: Remove knockout from html_redraw, and use it in browser_window_redraw and thumbnail_redraw. svn path=/trunk/netsurf/; revision=11746 --- desktop/browser.c | 27 ++++++++++++++++++++------- desktop/thumbnail.c | 16 +++++++++++++--- 2 files changed, 33 insertions(+), 10 deletions(-) (limited to 'desktop') diff --git a/desktop/browser.c b/desktop/browser.c index 351b327c6..1f536fe17 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -48,6 +48,7 @@ #include "desktop/history_core.h" #include "desktop/hotlist.h" #include "desktop/gui.h" +#include "desktop/knockout.h" #include "desktop/options.h" #include "desktop/selection.h" #include "desktop/textinput.h" @@ -94,20 +95,26 @@ bool browser_window_redraw(struct browser_window *bw, int x, int y, { int width = 0; int height = 0; + bool plot_ok = true; if (bw == NULL) { LOG(("NULL browser window")); return false; } - plot.clip(clip); - if (bw->current_content == NULL) { + /* Browser window has no content, render blank fill */ + plot.clip(clip); return plot.rectangle(clip->x0, clip->y0, clip->x1, clip->y1, plot_style_fill_white); - } + /* Browser window has content */ + if (plot.option_knockout) + knockout_plot_start(&plot); + + plot.clip(clip); + if (content_get_type(bw->current_content) != CONTENT_HTML) { /* Set render area according to scale */ width = content_get_width(bw->current_content) * bw->scale; @@ -115,12 +122,18 @@ bool browser_window_redraw(struct browser_window *bw, int x, int y, /* Non-HTML may not fill viewport to extents, so plot white * background fill */ - plot.rectangle(clip->x0, clip->y0, clip->x1, clip->y1, - plot_style_fill_white); + plot_ok &= plot.rectangle(clip->x0, clip->y0, + clip->x1, clip->y1, plot_style_fill_white); } - return content_redraw(bw->current_content, x, y, width, height, - clip, bw->scale, 0xFFFFFF); + /* Render the content */ + plot_ok &= content_redraw(bw->current_content, x, y, width, height, + clip, bw->scale, 0xFFFFFF); + + if (plot.option_knockout) + knockout_plot_end(); + + return plot_ok; } /* exported interface, documented in browser.h */ diff --git a/desktop/thumbnail.c b/desktop/thumbnail.c index ce36fdf1d..5407b60bb 100644 --- a/desktop/thumbnail.c +++ b/desktop/thumbnail.c @@ -26,6 +26,7 @@ #include "content/content.h" #include "content/hlcache.h" #include "desktop/browser.h" +#include "desktop/knockout.h" #include "desktop/options.h" #include "desktop/plotters.h" #include "desktop/thumbnail.h" @@ -38,9 +39,13 @@ bool thumbnail_redraw(struct hlcache_handle *content, { struct rect clip; float scale; + bool plot_ok = true; assert(content); + if (plot.option_knockout) + knockout_plot_start(&plot); + /* No selection */ current_redraw_browser = NULL; @@ -53,15 +58,20 @@ bool thumbnail_redraw(struct hlcache_handle *content, plot.clip(&clip); /* Plot white background */ - plot.rectangle(clip.x0, clip.y0, clip.x1, clip.y1, + plot_ok &= 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); + plot_ok &= content_redraw(content, 0, 0, width, height, &clip, scale, + 0xFFFFFF); + + if (plot.option_knockout) + knockout_plot_end(); + + return plot_ok; } -- cgit v1.2.3