summaryrefslogtreecommitdiff
path: root/riscos
diff options
context:
space:
mode:
Diffstat (limited to 'riscos')
-rw-r--r--riscos/gui.c49
-rw-r--r--riscos/gui.h4
2 files changed, 45 insertions, 8 deletions
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 <stdbool.h>
#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;
};