Local history: Pass clip rectangle around as struct.

This commit is contained in:
Michael Drake 2017-06-10 11:15:20 +01:00
parent 283d921f34
commit 368b03bffb
6 changed files with 40 additions and 51 deletions

View File

@ -279,27 +279,23 @@ static plot_font_style_t pfstyle_node_sel = {
* Recursively redraw a history_entry.
*
* \param history history containing the entry
* \param entry entry to render
* \param x0 area top left x coordinate
* \param y0 area top left y coordinate
* \param x1 area bottom right x coordinate
* \param y1 area bottom right y coordinate
* \param x window x offset
* \param y window y offset
* \param ctx current redraw context
* \param entry entry to render
* \param clip redraw area
* \param x window x offset
* \param y window y offset
* \param ctx current redraw context
*/
static bool
browser_window_history__redraw_entry(struct history *history,
struct history_entry *entry,
int x0, int y0, int x1, int y1,
struct history_entry *entry, struct rect *clip,
int x, int y, const struct redraw_context *ctx)
{
size_t char_offset;
int actual_x;
struct history_entry *child;
int tailsize = 5;
int xoffset = x - x0;
int yoffset = y - y0;
int xoffset = x - clip->x0;
int yoffset = y - clip->y0;
plot_style_t *pstyle;
plot_font_style_t *pfstyle;
@ -316,10 +312,10 @@ browser_window_history__redraw_entry(struct history *history,
}
/* setup clip area */
rect.x0 = x0 + xoffset;
rect.y0 = y0 + yoffset;
rect.x1 = x1 + xoffset;
rect.y1 = y1 + yoffset;
rect.x0 = clip->x0 + xoffset;
rect.y0 = clip->y0 + yoffset;
rect.x1 = clip->x1 + xoffset;
rect.y1 = clip->y1 + yoffset;
res = ctx->plot->clip(ctx, &rect);
if (res != NSERROR_OK) {
return false;
@ -395,7 +391,7 @@ browser_window_history__redraw_entry(struct history *history,
}
if (!browser_window_history__redraw_entry(history, child,
x0, y0, x1, y1, x, y, ctx)) {
clip, x, y, ctx)) {
return false;
}
}
@ -778,16 +774,10 @@ void browser_window_history_size(struct browser_window *bw,
/* exported interface documented in desktop/browser_history.h */
bool browser_window_history_redraw_rectangle(struct browser_window *bw,
int x0, int y0, int x1, int y1,
int x, int y, const struct redraw_context *ctx)
struct rect *clip, int x, int y,
const struct redraw_context *ctx)
{
struct history *history;
struct rect rect = {
.x0 = x0,
.y0 = y0,
.x1 = x1,
.y1 = y1,
};
assert(bw != NULL);
history = bw->history;
@ -795,10 +785,11 @@ bool browser_window_history_redraw_rectangle(struct browser_window *bw,
if (!history->start)
return true;
ctx->plot->rectangle(ctx, &pstyle_bg, &rect);
ctx->plot->rectangle(ctx, &pstyle_bg, clip);
return browser_window_history__redraw_entry(history, history->start,
x0, y0, x1, y1, x, y, ctx);
return browser_window_history__redraw_entry(
history, history->start,
clip, x, y, ctx);
}

View File

@ -129,17 +129,14 @@ void browser_window_history_size(struct browser_window *bw,
/**
* Redraw part of a history area.
*
* \param bw browser window with history object.
* \param x0 left X co-ordinate of redraw area
* \param y0 top Y co-ordinate of redraw area
* \param x1 right X co-ordinate of redraw area
* \param y1 lower Y co-ordinate of redraw area
* \param x start X co-ordinate on plot canvas
* \param y start Y co-ordinate on plot canvas
* \param ctx current redraw context
* \param bw browser window with history object.
* \param clip redraw area
* \param x start X co-ordinate on plot canvas
* \param y start Y co-ordinate on plot canvas
* \param ctx current redraw context
*/
bool browser_window_history_redraw_rectangle(struct browser_window *bw,
int x0, int y0, int x1, int y1, int x, int y,
struct rect *clip, int x, int y,
const struct redraw_context *ctx);
/**

View File

@ -77,7 +77,7 @@ local_history_redraw(struct local_history_session *session,
{
if (session->bw != NULL) {
browser_window_history_redraw_rectangle(session->bw,
clip->x0, clip->y0, clip->x1, clip->y1, x, y, ctx);
clip, x, y, ctx);
}
return NSERROR_OK;
}

View File

@ -84,6 +84,7 @@ static void ami_history_redraw(struct history_window *hw)
{
struct IBox *bbox;
ULONG xs,ys;
struct rect clip;
struct redraw_context ctx = {
.interactive = true,
.background_images = true,
@ -102,9 +103,11 @@ static void ami_history_redraw(struct history_window *hw)
SetRPAttrs(glob->rp, RPTAG_APenColor, 0xffffffff, TAG_DONE);
RectFill(glob->rp, 0, 0, bbox->Width - 1, bbox->Height - 1);
*/
browser_window_history_redraw_rectangle(hw->gw->bw, xs, ys,
bbox->Width + xs, bbox->Height + ys, 0, 0, &ctx);
clip.x0 = xs;
clip.y0 = ys;
clip.x1 = bbox->Width + xs;
clip.y1 = bbox->Height + ys;
browser_window_history_redraw_rectangle(hw->gw->bw, &clip, 0, 0, &ctx);
ami_clearclipreg(hw->gg);
ami_history_update_extent(hw);

View File

@ -36,6 +36,7 @@ localhistory_redraw(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
struct gui_localhistory *glh = cbi->context;
nsfb_bbox_t rbox;
struct rect clip;
struct redraw_context ctx = {
.interactive = true,
@ -53,12 +54,13 @@ localhistory_redraw(fbtk_widget_t *widget, fbtk_callback_info *cbi)
nsfb_plot_rectangle_fill(fbtk_get_nsfb(widget), &rbox, 0xffffffff);
clip.x0 = glh->scrollx;
clip.y0 = glh->scrolly;
clip.x1 = fbtk_get_width(widget) + glh->scrollx;
clip.y0 = fbtk_get_height(widget) + glh->scrolly;
browser_window_history_redraw_rectangle(glh->bw,
glh->scrollx,
glh->scrolly,
fbtk_get_width(widget) + glh->scrollx,
fbtk_get_height(widget) + glh->scrolly,
0, 0, &ctx);
&clip, 0, 0, &ctx);
nsfb_update(fbtk_get_nsfb(widget), &rbox);

View File

@ -111,11 +111,7 @@ nsw32_local_history_draw(struct nsw32_corewindow *nsw32_cw,
lhw = (struct nsw32_local_history_window *)nsw32_cw;
local_history_redraw(lhw->session,
r->x0 - scrollx,
r->y0 - scrolly,
r,
&ctx);
local_history_redraw(lhw->session, -scrollx, -scrolly, r, &ctx);
return NSERROR_OK;
}