Fix text area positioning, simpify scroll bar code.

svn path=/trunk/netsurf/; revision=2757
This commit is contained in:
Richard Wilson 2006-07-16 00:34:16 +00:00
parent 9006b194bb
commit 589fe57264

View File

@ -78,7 +78,7 @@ static wimp_window text_area_definition = {
0,
0,
wimp_TOP,
wimp_WINDOW_NEW_FORMAT,
wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS,
wimp_COLOUR_BLACK,
wimp_COLOUR_LIGHT_GREY,
wimp_COLOUR_LIGHT_GREY,
@ -208,6 +208,8 @@ uintptr_t textarea_create(wimp_w parent, wimp_i icon, unsigned int flags,
ro_get_hscroll_height(ret->window) - state.yscroll;
state.visible.y1 += istate.icon.extent.y1 - 2 - state.yscroll;
LOG(("%i, %i, %i, %i", state.visible.x0, state.visible.y0,
state.visible.x1, state.visible.y1));
if (flags & TEXTAREA_READONLY) {
state.visible.x0 += 2;
state.visible.x1 -= 4;
@ -836,11 +838,10 @@ void textarea_reflow(struct text_area *ta, unsigned int line)
/* Create vertical scrollbar if we don't already have one */
if (!ro_gui_wimp_check_window_furniture(ta->window,
wimp_WINDOW_VSCROLL)) {
wimp_outline outline;
wimp_window_state state;
wimp_w parent;
bits linkage;
unsigned int old_w;
unsigned int vscroll_width;
/* Save window parent & linkage flags */
state.w = ta->window;
@ -852,34 +853,10 @@ void textarea_reflow(struct text_area *ta, unsigned int line)
return;
}
/* Read existing window outline */
outline.w = ta->window;
error = xwimp_get_window_outline(&outline);
if (error) {
LOG(("xwimp_get_window_outline: 0x%x: %s",
error->errnum, error->errmess));
return;
}
/* Save width */
old_w = outline.outline.x1 - outline.outline.x0;
/* Now, attempt to create vertical scrollbar */
ro_gui_wimp_update_window_furniture(ta->window, 0,
ro_gui_wimp_update_window_furniture(ta->window, wimp_WINDOW_VSCROLL,
wimp_WINDOW_VSCROLL);
/* Read new window outline */
outline.w = ta->window;
error = xwimp_get_window_outline(&outline);
if (error) {
LOG(("xwimp_get_window_outline: 0x%x: %s",
error->errnum, error->errmess));
return;
}
/* Calculate difference in widths */
old_w = (outline.outline.x1 - outline.outline.x0) - old_w;
/* Get new window state */
state.w = ta->window;
error = xwimp_get_window_state(&state);
@ -889,8 +866,11 @@ void textarea_reflow(struct text_area *ta, unsigned int line)
return;
}
/* Get scroll width */
vscroll_width = ro_get_vscroll_width(NULL);
/* Shrink width by difference */
state.visible.x1 -= old_w;
state.visible.x1 -= vscroll_width;
/* and reopen window */
error = xwimp_open_window_nested((wimp_open *)&state,
@ -902,7 +882,7 @@ void textarea_reflow(struct text_area *ta, unsigned int line)
}
/* finally, update visible width */
ta->vis_width -= old_w;
ta->vis_width -= vscroll_width;
/* Now we've done that, we have to reflow the text area */
textarea_reflow(ta, 0);