summaryrefslogtreecommitdiff
path: root/riscos
diff options
context:
space:
mode:
authorRichard Wilson <rjw@netsurf-browser.org>2006-09-08 16:57:26 +0000
committerRichard Wilson <rjw@netsurf-browser.org>2006-09-08 16:57:26 +0000
commit02a8722cc66980069afe7c674dbb93710846a07f (patch)
treef303fe3166116122865d4cf6908e166f494f7055 /riscos
parent79554528ba6766cfc3687a223558956ad7526b83 (diff)
downloadnetsurf-02a8722cc66980069afe7c674dbb93710846a07f.tar.gz
netsurf-02a8722cc66980069afe7c674dbb93710846a07f.tar.bz2
Fix 1553282.
svn path=/trunk/netsurf/; revision=2932
Diffstat (limited to 'riscos')
-rw-r--r--riscos/dialog.c47
-rw-r--r--riscos/gui.h11
-rw-r--r--riscos/window.c111
3 files changed, 78 insertions, 91 deletions
diff --git a/riscos/dialog.c b/riscos/dialog.c
index 2f83c1496..e16fdeb24 100644
--- a/riscos/dialog.c
+++ b/riscos/dialog.c
@@ -40,6 +40,13 @@
#include "netsurf/utils/url.h"
#include "netsurf/utils/utils.h"
+#define ICON_ZOOM_VALUE 1
+#define ICON_ZOOM_DEC 2
+#define ICON_ZOOM_INC 3
+#define ICON_ZOOM_FRAMES 5
+#define ICON_ZOOM_CANCEL 7
+#define ICON_ZOOM_OK 8
+
/* The maximum number of persistent dialogues
*/
#define MAX_PERSISTENT 64
@@ -66,7 +73,6 @@ static struct {
static bool ro_gui_dialog_openurl_apply(wimp_w w);
-static bool ro_gui_dialog_zoom_click(wimp_pointer *pointer);
static bool ro_gui_dialog_zoom_apply(wimp_w w);
/**
@@ -193,8 +199,7 @@ void ro_gui_dialog_init(void)
dialog_zoom = ro_gui_dialog_create("zoom");
ro_gui_wimp_event_register_numeric_field(dialog_zoom, ICON_ZOOM_VALUE,
ICON_ZOOM_INC, ICON_ZOOM_DEC, 10, 1600, 10, 0);
- ro_gui_wimp_event_register_mouse_click(dialog_zoom,
- ro_gui_dialog_zoom_click);
+ ro_gui_wimp_event_register_checkbox(dialog_zoom, ICON_ZOOM_FRAMES);
ro_gui_wimp_event_register_cancel(dialog_zoom, ICON_ZOOM_CANCEL);
ro_gui_wimp_event_register_ok(dialog_zoom, ICON_ZOOM_OK,
ro_gui_dialog_zoom_apply);
@@ -654,39 +659,13 @@ void ro_gui_save_options(void)
options_write("<NetSurf$ChoicesSave>");
}
-
-/**
- * Handle clicks in the Scale view dialog.
- */
-
-bool ro_gui_dialog_zoom_click(wimp_pointer *pointer)
-{
- switch (pointer->i) {
- case ICON_ZOOM_75:
- ro_gui_set_icon_integer(dialog_zoom,
- ICON_ZOOM_VALUE, 75);
- return true;
- case ICON_ZOOM_100:
- ro_gui_set_icon_integer(dialog_zoom,
- ICON_ZOOM_VALUE, 100);
- return true;
- case ICON_ZOOM_150:
- ro_gui_set_icon_integer(dialog_zoom,
- ICON_ZOOM_VALUE, 150);
- return true;
- case ICON_ZOOM_200:
- ro_gui_set_icon_integer(dialog_zoom,
- ICON_ZOOM_VALUE, 200);
- return true;
- }
- return false;
-}
-
bool ro_gui_dialog_zoom_apply(wimp_w w) {
unsigned int scale;
+ bool all;
scale = atoi(ro_gui_get_icon_string(w, ICON_ZOOM_VALUE));
- ro_gui_window_set_scale(ro_gui_current_zoom_gui, scale * 0.01);
+ all = ro_gui_get_icon_selected_state(w, ICON_ZOOM_FRAMES);
+ browser_window_set_scale(ro_gui_current_zoom_gui->bw, scale * 0.01, all);
return true;
}
@@ -700,7 +679,9 @@ void ro_gui_dialog_prepare_zoom(struct gui_window *g)
char scale_buffer[8];
sprintf(scale_buffer, "%.0f", g->option.scale * 100);
ro_gui_set_icon_string(dialog_zoom, ICON_ZOOM_VALUE, scale_buffer);
-
+ ro_gui_set_icon_selected_state(dialog_zoom, ICON_ZOOM_FRAMES, true);
+ ro_gui_set_icon_shaded_state(dialog_zoom, ICON_ZOOM_FRAMES,
+ !(g->bw->parent));
ro_gui_current_zoom_gui = g;
ro_gui_wimp_event_memorise(dialog_zoom);
}
diff --git a/riscos/gui.h b/riscos/gui.h
index ea63558b0..ab31e7b1d 100644
--- a/riscos/gui.h
+++ b/riscos/gui.h
@@ -158,7 +158,6 @@ bool ro_gui_shift_pressed(void);
bool ro_gui_ctrl_pressed(void);
void ro_gui_window_scroll_end(struct gui_window *g, wimp_dragged *drag);
void ro_gui_window_frame_resize_end(struct gui_window *g, wimp_dragged *drag);
-void ro_gui_window_set_scale(struct gui_window *g, float scale);
void ro_gui_window_iconise(struct gui_window *g,
wimp_full_message_window_info *wi);
bool ro_gui_window_navigate_up(struct gui_window *g, const char *url);
@@ -222,16 +221,6 @@ bool ro_gui_theme_install_apply(wimp_w w);
#define ICON_STATUS_RESIZE 0
#define ICON_STATUS_TEXT 1
-#define ICON_ZOOM_VALUE 1
-#define ICON_ZOOM_DEC 2
-#define ICON_ZOOM_INC 3
-#define ICON_ZOOM_75 5
-#define ICON_ZOOM_100 6
-#define ICON_ZOOM_150 7
-#define ICON_ZOOM_200 8
-#define ICON_ZOOM_CANCEL 9
-#define ICON_ZOOM_OK 10
-
#define ICON_SAVE_ICON 0
#define ICON_SAVE_PATH 1
#define ICON_SAVE_OK 2
diff --git a/riscos/window.c b/riscos/window.c
index 63ce6ee74..efa121de9 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -1350,6 +1350,57 @@ bool gui_window_frame_resize_start(struct gui_window *g)
/**
+ * Save the specified content as a link.
+ *
+ * \param g gui_window containing the content
+ * \param c the content to save
+ */
+
+void gui_window_save_as_link(struct gui_window *g, struct content *c)
+{
+ if (!c)
+ return;
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL, c);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas, true);
+}
+
+
+/**
+ * Get the scale setting of a window
+ *
+ * \param g gui window
+ * \return scale value (1.0 == normal scale)
+ */
+
+float gui_window_get_scale(struct gui_window *g)
+{
+ return g->option.scale;
+}
+
+
+/**
+ * Set the scale setting of a window
+ *
+ * \param g gui window
+ * \param scale scale value (1.0 == normal scale)
+ */
+
+void gui_window_set_scale(struct gui_window *g, float scale)
+{
+ struct content *c;
+
+ if (g->option.scale == scale)
+ return;
+ g->option.scale = scale;
+ g->reformat_pending = true;
+ c = g->bw->current_content;
+ if ((c) && (c->type != CONTENT_HTML))
+ browser_window_update(g->bw, false);
+ gui_reformat_pending = true;
+}
+
+
+/**
* Redraws the content for all windows.
*/
@@ -1635,16 +1686,14 @@ void ro_gui_window_open(wimp_open *open)
struct gui_window *g = (struct gui_window *)ro_gui_wimp_event_get_user_data(open->w);
int width = open->visible.x1 - open->visible.x0;
int height = open->visible.y1 - open->visible.y0;
- int toolbar_height = 0;
+ int size, fheight, fwidth, toolbar_height = 0;
+ bool no_vscroll, no_hscroll;
+ float new_scale = 0;
struct content *content;
wimp_window_state state;
os_error *error;
- int key_down = 0;
wimp_w parent;
bits linkage;
- int size;
- bool no_vscroll, no_hscroll;
- int fheight, fwidth;
if (open->next == wimp_TOP && g->iconise_icon >= 0) {
/* window is no longer iconised, release its sprite number */
@@ -1759,15 +1808,13 @@ void ro_gui_window_open(wimp_open *open)
/* change extent if necessary */
if (g->old_width != width || g->old_height != height) {
if (content) {
- if (g->old_width != width) {
- xosbyte1(osbyte_SCAN_KEYBOARD, 1 ^ 0x80, 0, &key_down);
- if (key_down)
- g->option.scale = (g->option.scale * width) / g->old_width;
- };
+ /* Ctrl-resize of a top-level window scales the content size */
+ if ((g->old_width > 0) && (g->old_width != width) && (!g->bw->parent) &&
+ (ro_gui_ctrl_pressed()))
+ new_scale = (g->option.scale * width) / g->old_width;
g->reformat_pending = true;
gui_reformat_pending = true;
}
-
g->old_width = width;
g->old_height = height;
@@ -1797,11 +1844,17 @@ void ro_gui_window_open(wimp_open *open)
return;
}
+ /* update the toolbar */
if (g->toolbar) {
ro_gui_theme_process_toolbar(g->toolbar, -1);
/* second resize updates to the new URL bar width */
ro_gui_url_complete_resize(g, open);
}
+
+ /* set the new scale from a ctrl-resize. this must be done at the end as
+ * it may cause a frameset recalculation based on the new window size. */
+ if (new_scale > 0)
+ browser_window_set_scale(g->bw, new_scale, true);
}
@@ -3063,22 +3116,6 @@ void ro_gui_window_scroll_end(struct gui_window *g, wimp_dragged *drag)
/**
- * Save the specified content as a link.
- *
- * \param g gui_window containing the content
- * \param c the content to save
- */
-
-void gui_window_save_as_link(struct gui_window *g, struct content *c)
-{
- if (!c)
- return;
- ro_gui_save_prepare(GUI_SAVE_LINK_URL, c);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas, true);
-}
-
-
-/**
* Completes resizing of a browser frame
*
* \param g gui window
@@ -3090,26 +3127,6 @@ void ro_gui_window_frame_resize_end(struct gui_window *g, wimp_dragged *drag)
ro_gui_window_scroll_end(g, drag);
}
-
-/**
- * Alter the scale setting of a window
- *
- * \param g gui window
- * \param scale scale value (1.0 == normal scale)
- */
-
-void ro_gui_window_set_scale(struct gui_window *g, float scale)
-{
- struct content *c;
- g->option.scale = scale;
- g->reformat_pending = true;
- c = g->bw->current_content;
- if ((c) && (c->type != CONTENT_HTML))
- browser_window_update(g->bw, false);
- gui_reformat_pending = true;
-}
-
-
/**
* Import text file into window or its toolbar
*