From f33b3e6f52ea20dd1262bafdb44700b34e7b703e Mon Sep 17 00:00:00 2001 From: James Bursa Date: Wed, 10 Sep 2003 21:44:11 +0000 Subject: [project @ 2003-09-10 21:44:10 by bursa] Reformat page when browser window is resized. svn path=/import/netsurf/; revision=280 --- riscos/gui.c | 49 ++++++++++++++++++++++++++++++++++++++++++------- riscos/gui.h | 4 +++- 2 files changed, 45 insertions(+), 8 deletions(-) (limited to 'riscos') diff --git a/riscos/gui.c b/riscos/gui.c index 6753e3d57..39764a7d9 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -89,8 +89,7 @@ static void ro_gui_keypress(wimp_key* key); static void ro_msg_datasave(wimp_message* block); static void ro_msg_dataload(wimp_message* block); static void gui_set_gadget_extent(struct box* box, int x, int y, os_box* extent, struct gui_gadget* g); - - +static void ro_gui_screen_size(int *width, int *height); @@ -232,6 +231,8 @@ gui_window *gui_create_browser_window(struct browser_window *bw) } g->redraw_safety = SAFE; + g->data.browser.reformat_pending = false; + g->data.browser.old_width = 0; g->next = window_list; window_list = g; @@ -470,16 +471,26 @@ void ro_gui_window_open(gui_window* g, wimp_open* open) { if (g->type == GUI_BROWSER_WINDOW) { + wimp_window_state state; + state.w = g->data.browser.window; + wimp_get_window_state(&state); + if (state.flags & wimp_WINDOW_TOGGLED) { + open->visible.x0 = open->visible.y0 = 0; + ro_gui_screen_size(&open->visible.x1, &open->visible.y1); + } + if (g->data.browser.bw->current_content != 0) { - if (g->old_width != open->visible.x1 - open->visible.x0) { - if (g->data.browser.bw->current_content->width - < browser_x_units(open->visible.x1 - open->visible.x0)) - gui_window_set_extent(g, browser_x_units(open->visible.x1 - open->visible.x0), + int width = open->visible.x1 - open->visible.x0; + if (g->data.browser.old_width != width) { + if (g->data.browser.bw->current_content->width + < browser_x_units(width)) + gui_window_set_extent(g, browser_x_units(width), g->data.browser.bw->current_content->height); else gui_window_set_extent(g, g->data.browser.bw->current_content->width, g->data.browser.bw->current_content->height); - g->old_width = open->visible.x1 - open->visible.x0; + g->data.browser.old_width = width; + g->data.browser.reformat_pending = true; } } wimp_open_window(open); @@ -1446,6 +1457,13 @@ void gui_poll(void) wimp_get_pointer_info(&pointer); ro_gui_window_mouse_at(&pointer); } + for (g = window_list; g; g = g->next) { + if (g->type == GUI_BROWSER_WINDOW && g->data.browser.reformat_pending) { + content_reformat(g->data.browser.bw->current_content, + browser_x_units(g->data.browser.old_width), 1000); + g->data.browser.reformat_pending = false; + } + } break; case wimp_REDRAW_WINDOW_REQUEST : @@ -1919,3 +1937,20 @@ void gui_remove_gadget(struct gui_gadget* g) } } + +/** + * Find screen size in OS units. + */ + +void ro_gui_screen_size(int *width, int *height) +{ + int xeig_factor, yeig_factor, xwind_limit, ywind_limit; + + os_read_mode_variable(os_CURRENT_MODE, os_MODEVAR_XEIG_FACTOR, &xeig_factor); + os_read_mode_variable(os_CURRENT_MODE, os_MODEVAR_YEIG_FACTOR, &yeig_factor); + os_read_mode_variable(os_CURRENT_MODE, os_MODEVAR_XWIND_LIMIT, &xwind_limit); + os_read_mode_variable(os_CURRENT_MODE, os_MODEVAR_YWIND_LIMIT, &ywind_limit); + *width = (xwind_limit + 1) << xeig_factor; + *height = (ywind_limit + 1) << yeig_factor; +} + diff --git a/riscos/gui.h b/riscos/gui.h index 9f1f60e39..3250d46a3 100644 --- a/riscos/gui.h +++ b/riscos/gui.h @@ -8,6 +8,7 @@ #ifndef _NETSURF_RISCOS_GUI_H_ #define _NETSURF_RISCOS_GUI_H_ +#include #include "oslib/wimp.h" #include "netsurf/desktop/browser.h" #include "netsurf/desktop/netsurf.h" @@ -36,6 +37,8 @@ struct gui_window wimp_w toolbar; int toolbar_width; struct browser_window* bw; + bool reformat_pending; + int old_width; } browser; struct { wimp_w window; @@ -56,7 +59,6 @@ struct gui_window gui_safety redraw_safety; enum { drag_NONE, drag_UNKNOWN, drag_BROWSER_TEXT_SELECTION } drag_status; - int old_width; }; -- cgit v1.2.3