diff --git a/desktop/scroll.c b/desktop/scroll.c index bfa17f9c8..19efa8df5 100644 --- a/desktop/scroll.c +++ b/desktop/scroll.c @@ -203,8 +203,7 @@ static inline bool scroll_redraw_scrollbar_rectangle( * \param scale scale for the redraw * \return true on succes false otherwise */ -bool scroll_redraw(struct scroll *scroll, int x, int y, - int clip_x0, int clip_y0, int clip_x1, int clip_y1, +bool scroll_redraw(struct scroll *scroll, int x, int y, struct rect *clip, float scale) { int w = SCROLLBAR_WIDTH; @@ -247,26 +246,11 @@ bool scroll_redraw(struct scroll *scroll, int x, int y, bar_c0 = (scroll->horizontal ? x0 : y0) + w + bar_off; - if (clip_x0 < x0) - clip_x0 = x0; - - if (clip_y0 < y0) - clip_y0 = y0; - - if (clip_x1 > x1 + 1) - clip_x1 = x1 + 1; - - if (clip_y1 > y1 + 1) - clip_y1 = y1 + 1; - - - if (clip_x0 > clip_x1 || clip_y0 > clip_y1) - /* clipping rectangle is outside the scrollbar area */ + if (x1 < clip->x0 || y1 < clip->y0 || clip->x1 < x0 || clip->y1 < y0) + /* scrollbar is outside the clipping rectangle, nothing to + * render */ return true; - if (!plot.clip(clip_x0, clip_y0, clip_x1, clip_y1)) - return false; - if (scroll->horizontal) { /* scroll is horizontal */ diff --git a/desktop/scroll.h b/desktop/scroll.h index 3e15d5f3e..ebca97463 100644 --- a/desktop/scroll.h +++ b/desktop/scroll.h @@ -64,8 +64,7 @@ bool scroll_create(bool horizontal, int length, void *client_data, scroll_client_callback client_callback, struct scroll **scroll_pt); void scroll_destroy(struct scroll *scroll); -bool scroll_redraw(struct scroll *scroll, int x, int y, - int clip_x0, int clip_y0, int clip_x1, int clip_y1, +bool scroll_redraw(struct scroll *scroll, int x, int y, struct rect *clip, float scale); void scroll_set(struct scroll *scroll, int scroll_val, bool bar); diff --git a/render/form.c b/render/form.c index 71a42da4c..8c54b23d5 100644 --- a/render/form.c +++ b/render/form.c @@ -989,6 +989,11 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y, int i; int scroll; int x_cp, y_cp; + struct rect clip; + clip.x0 = clip_x0; + clip.y0 = clip_y0; + clip.x1 = clip_x1; + clip.y1 = clip_y1; box = control->box; @@ -1079,7 +1084,7 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y, if (!scroll_redraw(menu->scroll, x_cp + menu->width - SCROLLBAR_WIDTH, y_cp, - clip_x0, clip_y0, clip_x1, clip_y1, scale)) + &clip, scale)) return false; return true; diff --git a/render/html_redraw.c b/render/html_redraw.c index d36eb8d91..019b99ed7 100644 --- a/render/html_redraw.c +++ b/render/html_redraw.c @@ -722,17 +722,13 @@ bool html_redraw_box(struct box *box, int x_parent, int y_parent, x_parent + box->x, y_parent + box->y + box->padding[TOP] + box->height + box->padding[BOTTOM] - - SCROLLBAR_WIDTH, - clip.x0, clip.y0, clip.x1, clip.y1, - scale); + SCROLLBAR_WIDTH, &clip, scale); if (box->scroll_y != NULL) scroll_redraw(box->scroll_y, x_parent + box->x + box->padding[LEFT] + box->width + box->padding[RIGHT] - SCROLLBAR_WIDTH, - y_parent + box->y, - clip.x0, clip.y0, clip.x1, clip.y1, - scale); + y_parent + box->y, &clip, scale); }