diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-23 23:05:34 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-23 23:05:34 +0000 |
commit | ddeadd1c02880367ad786b113d352a519f45ec73 (patch) | |
tree | 00b8b46ee1a3fc84e5492c2183dfaa8192d261f9 /desktop/browser.c | |
parent | b20949a35025b23da1bf0ac6003f4575eb94281d (diff) | |
download | netsurf-ddeadd1c02880367ad786b113d352a519f45ec73.tar.gz netsurf-ddeadd1c02880367ad786b113d352a519f45ec73.tar.bz2 |
Merge LibCSS port to trunk.
svn path=/trunk/netsurf/; revision=8752
Diffstat (limited to 'desktop/browser.c')
-rw-r--r-- | desktop/browser.c | 171 |
1 files changed, 88 insertions, 83 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index b188316ea..d19281e9d 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1421,10 +1421,12 @@ void browser_window_mouse_action_html(struct browser_window *bw, while ((next_box = box_at_point(box, x, y, &box_x, &box_y, &content)) != NULL) { + enum css_overflow overflow = CSS_OVERFLOW_VISIBLE; + box = next_box; - if (box->style && - box->style->visibility == CSS_VISIBILITY_HIDDEN) + if (box->style && css_computed_visibility(box->style) == + CSS_VISIBILITY_HIDDEN) continue; if (box->object) @@ -1458,14 +1460,16 @@ void browser_window_mouse_action_html(struct browser_window *bw, if (box->title) title = box->title; - if (box->style && box->style->cursor != CSS_CURSOR_UNKNOWN) - pointer = get_pointer_shape(bw, box, false); + pointer = get_pointer_shape(bw, box, false); + + if (box->style) + overflow = css_computed_overflow(box->style); if (box->style && box->type != BOX_BR && box->type != BOX_INLINE && box->type != BOX_TEXT && - (box->style->overflow == CSS_OVERFLOW_SCROLL || - box->style->overflow == CSS_OVERFLOW_AUTO) && + (overflow == CSS_OVERFLOW_SCROLL || + overflow == CSS_OVERFLOW_AUTO) && ((box_vscrollbar_present(box) && box_x + box->scroll_x + box->padding[LEFT] + box->width < x) || @@ -2464,7 +2468,9 @@ gui_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *box, bool imagemap) { gui_pointer_shape pointer; - struct css_style *style; + css_computed_style *style; + enum css_cursor cursor; + lwc_string **cursor_uris; assert(bw); @@ -2481,84 +2487,83 @@ gui_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *box, else style = box->style; - assert(style); - switch (style->cursor) { - case CSS_CURSOR_AUTO: - if (box->href || (box->gadget && - (box->gadget->type == GADGET_IMAGE || - box->gadget->type == GADGET_SUBMIT)) || - imagemap) { - /* link */ - pointer = GUI_POINTER_POINT; - } else if (box->gadget && - (box->gadget->type == GADGET_TEXTBOX || - box->gadget->type == GADGET_PASSWORD || - box->gadget->type == GADGET_TEXTAREA)) { - /* text input */ - pointer = GUI_POINTER_CARET; - } else { - /* anything else */ - if (loading) - /* loading new content */ - pointer = GUI_POINTER_PROGRESS; - else - pointer = GUI_POINTER_DEFAULT; - } - break; - case CSS_CURSOR_CROSSHAIR: - pointer = GUI_POINTER_CROSS; - break; - case CSS_CURSOR_POINTER: + if (style == NULL) + return GUI_POINTER_DEFAULT; + + cursor = css_computed_cursor(style, &cursor_uris); + + switch (cursor) { + case CSS_CURSOR_AUTO: + if (box->href || (box->gadget && + (box->gadget->type == GADGET_IMAGE || + box->gadget->type == GADGET_SUBMIT)) || + imagemap) { + /* link */ pointer = GUI_POINTER_POINT; - break; - case CSS_CURSOR_MOVE: - pointer = GUI_POINTER_MOVE; - break; - case CSS_CURSOR_E_RESIZE: - pointer = GUI_POINTER_RIGHT; - break; - case CSS_CURSOR_W_RESIZE: - pointer = GUI_POINTER_LEFT; - break; - case CSS_CURSOR_N_RESIZE: - pointer = GUI_POINTER_UP; - break; - case CSS_CURSOR_S_RESIZE: - pointer = GUI_POINTER_DOWN; - break; - case CSS_CURSOR_NE_RESIZE: - pointer = GUI_POINTER_RU; - break; - case CSS_CURSOR_SW_RESIZE: - pointer = GUI_POINTER_LD; - break; - case CSS_CURSOR_SE_RESIZE: - pointer = GUI_POINTER_RD; - break; - case CSS_CURSOR_NW_RESIZE: - pointer = GUI_POINTER_LU; - break; - case CSS_CURSOR_TEXT: + } else if (box->gadget && + (box->gadget->type == GADGET_TEXTBOX || + box->gadget->type == GADGET_PASSWORD || + box->gadget->type == GADGET_TEXTAREA)) { + /* text input */ pointer = GUI_POINTER_CARET; - break; - case CSS_CURSOR_WAIT: - pointer = GUI_POINTER_WAIT; - break; - case CSS_CURSOR_PROGRESS: - pointer = GUI_POINTER_PROGRESS; - break; - case CSS_CURSOR_NO_DROP: - pointer = GUI_POINTER_NO_DROP; - break; - case CSS_CURSOR_NOT_ALLOWED: - pointer = GUI_POINTER_NOT_ALLOWED; - break; - case CSS_CURSOR_HELP: - pointer = GUI_POINTER_HELP; - break; - default: - pointer = GUI_POINTER_DEFAULT; - break; + } else { + /* anything else */ + if (loading) { + /* loading new content */ + pointer = GUI_POINTER_PROGRESS; + } else { + pointer = GUI_POINTER_DEFAULT; + } + } + break; + case CSS_CURSOR_CROSSHAIR: + pointer = GUI_POINTER_CROSS; + break; + case CSS_CURSOR_POINTER: + pointer = GUI_POINTER_POINT; + break; + case CSS_CURSOR_MOVE: + pointer = GUI_POINTER_MOVE; + break; + case CSS_CURSOR_E_RESIZE: + pointer = GUI_POINTER_RIGHT; + break; + case CSS_CURSOR_W_RESIZE: + pointer = GUI_POINTER_LEFT; + break; + case CSS_CURSOR_N_RESIZE: + pointer = GUI_POINTER_UP; + break; + case CSS_CURSOR_S_RESIZE: + pointer = GUI_POINTER_DOWN; + break; + case CSS_CURSOR_NE_RESIZE: + pointer = GUI_POINTER_RU; + break; + case CSS_CURSOR_SW_RESIZE: + pointer = GUI_POINTER_LD; + break; + case CSS_CURSOR_SE_RESIZE: + pointer = GUI_POINTER_RD; + break; + case CSS_CURSOR_NW_RESIZE: + pointer = GUI_POINTER_LU; + break; + case CSS_CURSOR_TEXT: + pointer = GUI_POINTER_CARET; + break; + case CSS_CURSOR_WAIT: + pointer = GUI_POINTER_WAIT; + break; + case CSS_CURSOR_PROGRESS: + pointer = GUI_POINTER_PROGRESS; + break; + case CSS_CURSOR_HELP: + pointer = GUI_POINTER_HELP; + break; + default: + pointer = GUI_POINTER_DEFAULT; + break; } return pointer; |