From e2a7600e9a2fe94a00e653b0f484d941129c3ad5 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Fri, 2 Dec 2011 16:10:13 +0000 Subject: Big wodge of internal browser window scroll fixes, or "rationalisation of browser window scrollbar handling". svn path=/trunk/netsurf/; revision=13221 --- desktop/browser.c | 25 +++++++++++++------------ desktop/frames.c | 8 ++++---- desktop/textinput.c | 11 ++--------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/desktop/browser.c b/desktop/browser.c index e703358ba..614d6b08d 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -332,7 +332,6 @@ void browser_window_get_position(struct browser_window *bw, bool root, while (bw) { switch (bw->browser_window_type) { - case BROWSER_WINDOW_FRAME: case BROWSER_WINDOW_FRAMESET: *pos_x += bw->x * bw->scale; *pos_y += bw->y * bw->scale; @@ -342,6 +341,9 @@ void browser_window_get_position(struct browser_window *bw, bool root, /* There is no offset to the root browser window */ break; + case BROWSER_WINDOW_FRAME: + /* Iframe and Frame handling is identical; + * fall though */ case BROWSER_WINDOW_IFRAME: *pos_x += (bw->x - scrollbar_get_offset(bw->scroll_x)) * bw->scale; @@ -533,6 +535,10 @@ bool browser_window_scroll_at_point(struct browser_window *bw, bool handled_scroll = false; assert(bw != NULL); + /* Handle (i)frame scroll offset (core-managed browser windows only) */ + x += scrollbar_get_offset(bw->scroll_x); + y += scrollbar_get_offset(bw->scroll_y); + if (bw->children) { /* Browser window has children, so pass request on to * appropriate child */ @@ -581,6 +587,10 @@ bool browser_window_drop_file_at_point(struct browser_window *bw, { assert(bw != NULL); + /* Handle (i)frame scroll offset (core-managed browser windows only) */ + x += scrollbar_get_offset(bw->scroll_x); + y += scrollbar_get_offset(bw->scroll_y); + if (bw->children) { /* Browser window has children, so pass request on to * appropriate child */ @@ -600,7 +610,8 @@ bool browser_window_drop_file_at_point(struct browser_window *bw, /* Pass request into this child */ return browser_window_drop_file_at_point(bwc, - (x - bwc->x), (y - bwc->y), file); + (x - bwc->x), (y - bwc->y), + file); } } @@ -1310,13 +1321,6 @@ nserror browser_window_callback(hlcache_handle *c, .y1 = event->data.redraw.y + event->data.redraw.height }; - if (bw->browser_window_type == BROWSER_WINDOW_FRAME) { - rect.x0 -= scrollbar_get_offset(bw->scroll_x); - rect.y0 -= scrollbar_get_offset(bw->scroll_y); - rect.x1 -= scrollbar_get_offset(bw->scroll_x); - rect.y1 -= scrollbar_get_offset(bw->scroll_y); - } - browser_window_update_box(bw, &rect); } break; @@ -2271,9 +2275,6 @@ void browser_window_mouse_track(struct browser_window *bw, browser_window_get_position(drag_bw, true, &off_x, &off_y); if (drag_bw->browser_window_type == BROWSER_WINDOW_FRAME) { - off_x -= scrollbar_get_offset(drag_bw->scroll_x); - off_y -= scrollbar_get_offset(drag_bw->scroll_y); - browser_window_mouse_track(drag_bw, mouse, x - off_x, y - off_y); diff --git a/desktop/frames.c b/desktop/frames.c index 412741181..3667e3fde 100644 --- a/desktop/frames.c +++ b/desktop/frames.c @@ -66,10 +66,10 @@ void browser_window_scroll_callback(void *client_data, } else { struct rect rect; - rect.x0 = 0; - rect.y0 = 0; - rect.x1 = bw->width; - rect.y1 = bw->height; + rect.x0 = scrollbar_get_offset(bw->scroll_x); + rect.y0 = scrollbar_get_offset(bw->scroll_y); + rect.x1 = rect.x0 + bw->width; + rect.y1 = rect.y0 + bw->height; browser_window_update_box(bw, &rect); } diff --git a/desktop/textinput.c b/desktop/textinput.c index 50ea16cc8..63e17debe 100644 --- a/desktop/textinput.c +++ b/desktop/textinput.c @@ -76,15 +76,8 @@ void browser_window_place_caret(struct browser_window *bw, root_bw = browser_window_get_root(bw); browser_window_get_position(bw, true, &pos_x, &pos_y); - if (bw->browser_window_type == BROWSER_WINDOW_FRAME) { - x = (x - scrollbar_get_offset(bw->scroll_x)) * bw->scale; - y = (y - scrollbar_get_offset(bw->scroll_y)) * bw->scale; - x += pos_x; - y += pos_y; - } else { - x = x * bw->scale + pos_x; - y = y * bw->scale + pos_y; - } + x = x * bw->scale + pos_x; + y = y * bw->scale + pos_y; gui_window_place_caret(root_bw->window, x, y, height * bw->scale); bw->caret_callback = caret_cb; -- cgit v1.2.3