summaryrefslogtreecommitdiff
path: root/frontends/riscos/window.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2019-08-04 16:49:01 +0100
committerVincent Sanders <vince@kyllikki.org>2019-08-04 16:49:01 +0100
commit0aae3c370ba498d726eda40b71d2259c00f86a24 (patch)
tree3ad299d9998c57d249abf0ca652c73871f5f58e2 /frontends/riscos/window.c
parent077237a4df2b576e972ff2d98b9c35175536ccd5 (diff)
downloadnetsurf-0aae3c370ba498d726eda40b71d2259c00f86a24.tar.gz
netsurf-0aae3c370ba498d726eda40b71d2259c00f86a24.tar.bz2
change RISC OS keypress handling for scale to not use shadow variable
Diffstat (limited to 'frontends/riscos/window.c')
-rw-r--r--frontends/riscos/window.c163
1 files changed, 99 insertions, 64 deletions
diff --git a/frontends/riscos/window.c b/frontends/riscos/window.c
index a92d4c73c..0a0faed51 100644
--- a/frontends/riscos/window.c
+++ b/frontends/riscos/window.c
@@ -390,15 +390,18 @@ static void ro_gui_window_open(wimp_open *open)
/* reformat or change extent if necessary */
if (have_content &&
- (g->old_width != width || g->old_height != height)) {
+ (g->old_width != width || g->old_height != height)) {
/* Ctrl-resize of a top-level window scales the content size */
- if ((g->old_width > 0) && (g->old_width != width) &&
- (ro_gui_ctrl_pressed()))
- new_scale = (g->scale * width) / g->old_width;
+ if ((g->old_width > 0) &&
+ (g->old_width != width) &&
+ (ro_gui_ctrl_pressed())) {
+ new_scale = (browser_window_get_scale(g->bw) * width) / g->old_width;
+ }
browser_window_schedule_reformat(g->bw);
}
- if (g->update_extent || g->old_width != width ||
- g->old_height != height) {
+ if (g->update_extent ||
+ g->old_width != width ||
+ g->old_height != height) {
g->old_width = width;
g->old_height = height;
g->update_extent = false;
@@ -1209,6 +1212,52 @@ ro_gui_window_scroll_action(struct gui_window *g,
}
}
+/**
+ * handle scale kepresses within RISC OS
+ */
+static bool handle_local_keypress_scale(struct gui_window *gw, uint32_t c)
+{
+ float cscale; /* current scale */
+ float scale; /* new scale */
+
+ cscale = browser_window_get_scale(gw->bw);
+
+ scale = cscale;
+
+ if (ro_gui_shift_pressed() && c == 17) {
+ scale = cscale - 0.1;
+ } else if (ro_gui_shift_pressed() && c == 23) {
+ scale = cscale + 0.1;
+ } else if (c == 17) {
+ for (int i = SCALE_SNAP_TO_SIZE - 1; i >= 0; i--) {
+ if (scale_snap_to[i] < cscale) {
+ scale = scale_snap_to[i];
+ break;
+ }
+ }
+ } else {
+ for (unsigned int i = 0; i < SCALE_SNAP_TO_SIZE; i++) {
+ if (scale_snap_to[i] > cscale) {
+ scale = scale_snap_to[i];
+ break;
+ }
+ }
+ }
+
+ if (scale < scale_snap_to[0]) {
+ scale = scale_snap_to[0];
+ }
+
+ if (scale > scale_snap_to[SCALE_SNAP_TO_SIZE - 1]) {
+ scale = scale_snap_to[SCALE_SNAP_TO_SIZE - 1];
+ }
+
+ if (cscale != scale) {
+ ro_gui_window_set_scale(gw, scale);
+ }
+
+ return true;
+}
/**
* Handle keypresses within the RISC OS GUI
@@ -1231,7 +1280,6 @@ ro_gui_window_handle_local_keypress(struct gui_window *g,
os_error *ro_error;
wimp_pointer pointer;
os_coord pos;
- float scale;
uint32_t c = (uint32_t) key->c;
wimp_scroll_direction xscroll = wimp_SCROLL_NONE;
wimp_scroll_direction yscroll = wimp_SCROLL_NONE;
@@ -1392,34 +1440,10 @@ ro_gui_window_handle_local_keypress(struct gui_window *g,
case 17: /* CTRL+Q (Zoom out) */
case 23: /* CTRL+W (Zoom in) */
- if (browser_window_has_content(g->bw) == false)
- break;
- scale = g->scale;
- if (ro_gui_shift_pressed() && c == 17)
- scale = g->scale - 0.1;
- else if (ro_gui_shift_pressed() && c == 23)
- scale = g->scale + 0.1;
- else if (c == 17) {
- for (int i = SCALE_SNAP_TO_SIZE - 1; i >= 0; i--)
- if (scale_snap_to[i] < g->scale) {
- scale = scale_snap_to[i];
- break;
- }
- } else {
- for (unsigned int i = 0; i < SCALE_SNAP_TO_SIZE; i++)
- if (scale_snap_to[i] > g->scale) {
- scale = scale_snap_to[i];
- break;
- }
- }
- if (scale < scale_snap_to[0])
- scale = scale_snap_to[0];
- if (scale > scale_snap_to[SCALE_SNAP_TO_SIZE - 1])
- scale = scale_snap_to[SCALE_SNAP_TO_SIZE - 1];
- if (g->scale != scale) {
- ro_gui_window_set_scale(g, scale);
+ if (browser_window_has_content(g->bw) == true) {
+ return handle_local_keypress_scale(g, c);
}
- return true;
+ break;
case IS_WIMP_KEY + wimp_KEY_PRINT:
ro_gui_window_action_print(g);
@@ -1700,37 +1724,48 @@ static void ro_gui_window_redraw(wimp_draw *redraw)
*/
static void ro_gui_window_scroll(wimp_scroll *scroll)
{
- struct gui_window *g = ro_gui_window_lookup(scroll->w);
-
- if (g && browser_window_has_content(g->bw) && ro_gui_shift_pressed()) {
- /* extended scroll request with shift held down; change zoom */
- float scale, inc;
-
- if (scroll->ymin & 3)
- inc = 0.02; /* RO5 sends the msg 5 times;
- * don't ask me why
- *
- * @todo this is liable to break if
- * HID is configured optimally for
- * frame scrolling. *5 appears to be
- * an artifact of non-HID mode scrolling.
- */
- else
- inc = (1 << (ABS(scroll->ymin)>>2)) / 20.0F;
-
- if (scroll->ymin > 0) {
- scale = g->scale + inc;
- if (scale > scale_snap_to[SCALE_SNAP_TO_SIZE - 1])
- scale = scale_snap_to[SCALE_SNAP_TO_SIZE - 1];
- } else {
- scale = g->scale - inc;
- if (scale < scale_snap_to[0])
- scale = scale_snap_to[0];
- }
- if (g->scale != scale)
- ro_gui_window_set_scale(g, scale);
- } else if (g != NULL) {
+ float cscale, scale, inc;
+ struct gui_window *g = ro_gui_window_lookup(scroll->w);
+
+ if (g == NULL) {
+ return;
+ }
+
+ if ((browser_window_has_content(g->bw) == false) ||
+ (ro_gui_shift_pressed() == false)) {
ro_gui_window_scroll_action(g, scroll->xmin, scroll->ymin);
+ return;
+ }
+
+ /* extended scroll request with shift held down; change zoom */
+ cscale = browser_window_get_scale(g->bw);
+
+ if (scroll->ymin & 3) {
+ inc = 0.02; /* RO5 sends the msg 5 times;
+ * don't ask me why
+ *
+ * @todo this is liable to break if
+ * HID is configured optimally for
+ * frame scrolling. *5 appears to be
+ * an artifact of non-HID mode scrolling.
+ */
+ } else {
+ inc = (1 << (ABS(scroll->ymin)>>2)) / 20.0F;
+ }
+
+ if (scroll->ymin > 0) {
+ scale = cscale + inc;
+ if (scale > scale_snap_to[SCALE_SNAP_TO_SIZE - 1]) {
+ scale = scale_snap_to[SCALE_SNAP_TO_SIZE - 1];
+ }
+ } else {
+ scale = cscale - inc;
+ if (scale < scale_snap_to[0]) {
+ scale = scale_snap_to[0];
+ }
+ }
+ if (scale != cscale) {
+ ro_gui_window_set_scale(g, scale);
}
}