summaryrefslogtreecommitdiff
path: root/atari/gemtk
diff options
context:
space:
mode:
authorOle Loots <ole@monochrom.net>2012-12-01 16:18:02 +0100
committerOle Loots <ole@monochrom.net>2012-12-01 16:18:02 +0100
commit40313798ee3024a530f2d677155290775526899e (patch)
treeab032f039630cf381c61f31e5b0c7a92bea84278 /atari/gemtk
parent2705884b65a726e3fb8d0cb5ceedbd0877cbe8c5 (diff)
downloadnetsurf-40313798ee3024a530f2d677155290775526899e.tar.gz
netsurf-40313798ee3024a530f2d677155290775526899e.tar.bz2
Implemented Browser key input handling.
Diffstat (limited to 'atari/gemtk')
-rw-r--r--atari/gemtk/gemtk.h1
-rw-r--r--atari/gemtk/guiwin.c187
2 files changed, 94 insertions, 94 deletions
diff --git a/atari/gemtk/gemtk.h b/atari/gemtk/gemtk.h
index ddcad785a..ad9253c63 100644
--- a/atari/gemtk/gemtk.h
+++ b/atari/gemtk/gemtk.h
@@ -111,6 +111,7 @@ void guiwin_set_user_data(GUIWIN *win, void *data);
void *guiwin_get_user_data(GUIWIN *win);
struct guiwin_scroll_info_s * guiwin_get_scroll_info(GUIWIN *win);
bool guiwin_update_slider(GUIWIN *win, short mode);
+void guiwin_scroll(GUIWIN *gw, short orientation, int units, bool refresh);
void guiwin_send_redraw(GUIWIN *win, GRECT *area);
VdiHdl guiwin_get_vdi_handle(GUIWIN *win);
bool guiwin_has_intersection(GUIWIN *win, GRECT *work);
diff --git a/atari/gemtk/guiwin.c b/atari/gemtk/guiwin.c
index 455836308..54d043e0d 100644
--- a/atari/gemtk/guiwin.c
+++ b/atari/gemtk/guiwin.c
@@ -57,90 +57,6 @@ static void move_rect(GUIWIN * win, GRECT *rect, int dx, int dy)
wind_update(END_UPDATE);
}
-static void preproc_scroll(GUIWIN *gw, short orientation, int units,
- bool refresh)
-{
- struct guiwin_scroll_info_s *slid = guiwin_get_scroll_info(gw);
- int oldpos = 0, newpos = 0, vis_units=0, pix = 0;
- int abs_pix = 0;
- GRECT *redraw=NULL, g, g_ro;
-
- guiwin_get_grect(gw, GUIWIN_AREA_CONTENT, &g);
- g_ro = g;
-
- if (orientation == GUIWIN_VSLIDER) {
- pix = units*slid->y_unit_px;
- abs_pix = abs(pix);
- oldpos = slid->y_pos;
- vis_units = g.g_h/slid->y_unit_px;
- newpos = slid->y_pos = MIN(slid->y_units-vis_units,
- MAX(0, slid->y_pos+units));
- if(oldpos == newpos)
- return;
- if (units>=vis_units || guiwin_has_intersection(gw, &g_ro)) {
- // send complete redraw
- redraw = &g_ro;
- } else {
- // only adjust ypos when scrolling down:
- if(pix < 0 ) {
- // blit screen area:
- g.g_h -= abs_pix;
- move_rect(gw, &g, 0, abs_pix);
- g.g_y = g_ro.g_y;
- g.g_h = abs_pix;
- redraw = &g;
- } else {
- // blit screen area:
- g.g_y += abs_pix;
- g.g_h -= abs_pix;
- move_rect(gw, &g, 0, -abs_pix);
- g.g_y = g_ro.g_y + g_ro.g_h - abs_pix;
- g.g_h = abs_pix;
- redraw = &g;
- }
- }
- } else {
- pix = units*slid->x_unit_px;
- abs_pix = abs(pix);
- oldpos = slid->x_pos;
- vis_units = g.g_w/slid->x_unit_px;
- newpos = slid->x_pos = MIN(slid->x_units-vis_units,
- MAX(0, slid->x_pos+units));
- if(oldpos == newpos)
- return;
- if (units>=vis_units || guiwin_has_intersection(gw, &g_ro)) {
- // send complete redraw
- redraw = &g_ro;
- } else {
- // only adjust ypos when scrolling down:
- if(pix < 0 ) {
- // blit screen area:
- g.g_w -= abs_pix;
- move_rect(gw, &g, abs_pix, 0);
- g.g_x = g_ro.g_x;
- g.g_w = abs_pix;
- redraw = &g;
- } else {
- // blit screen area:
- g.g_x += abs_pix;
- g.g_w -= abs_pix;
- move_rect(gw, &g, -abs_pix, 0);
- g.g_x = g_ro.g_x + g_ro.g_w - abs_pix;
- g.g_w = abs_pix;
- redraw = &g;
- }
- }
- }
-
- if (refresh) {
- guiwin_update_slider(gw, orientation);
- }
-
- if ((redraw != NULL) && (redraw->g_h > 0)) {
- guiwin_send_redraw(gw, redraw);
- }
-}
-
static short preproc_wm(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
{
GRECT g, g_ro, g2;
@@ -162,7 +78,7 @@ static short preproc_wm(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
else {
val = val-slid->x_pos;
}
- preproc_scroll(gw, GUIWIN_HSLIDER, val, false);
+ guiwin_scroll(gw, GUIWIN_HSLIDER, val, false);
}
break;
@@ -178,7 +94,7 @@ static short preproc_wm(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
else {
val = val -slid->y_pos;
}
- preproc_scroll(gw, GUIWIN_VSLIDER, val, false);
+ guiwin_scroll(gw, GUIWIN_VSLIDER, val, false);
}
break;
@@ -193,47 +109,47 @@ static short preproc_wm(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
case WA_UPPAGE:
/* scroll page up */
- preproc_scroll(gw, GUIWIN_VSLIDER, -(g.g_h/slid->y_unit_px),
+ guiwin_scroll(gw, GUIWIN_VSLIDER, -(g.g_h/slid->y_unit_px),
true);
break;
case WA_UPLINE:
/* scroll line up */
- preproc_scroll(gw, GUIWIN_VSLIDER, -1, true);
+ guiwin_scroll(gw, GUIWIN_VSLIDER, -1, true);
break;
case WA_DNPAGE:
/* scroll page down */
- preproc_scroll(gw, GUIWIN_VSLIDER, g.g_h/slid->y_unit_px,
+ guiwin_scroll(gw, GUIWIN_VSLIDER, g.g_h/slid->y_unit_px,
true);
break;
case WA_DNLINE:
/* scroll line down */
- preproc_scroll(gw, GUIWIN_VSLIDER, +1, true);
+ guiwin_scroll(gw, GUIWIN_VSLIDER, +1, true);
break;
case WA_LFPAGE:
/* scroll page left */
- preproc_scroll(gw, GUIWIN_HSLIDER, -(g.g_w/slid->x_unit_px),
+ guiwin_scroll(gw, GUIWIN_HSLIDER, -(g.g_w/slid->x_unit_px),
true);
break;
case WA_LFLINE:
/* scroll line left */
- preproc_scroll(gw, GUIWIN_HSLIDER, -1,
+ guiwin_scroll(gw, GUIWIN_HSLIDER, -1,
true);
break;
case WA_RTPAGE:
/* scroll page right */
- preproc_scroll(gw, GUIWIN_HSLIDER, (g.g_w/slid->x_unit_px),
+ guiwin_scroll(gw, GUIWIN_HSLIDER, (g.g_w/slid->x_unit_px),
true);
break;
case WA_RTLINE:
/* scroll line right */
- preproc_scroll(gw, GUIWIN_HSLIDER, 1,
+ guiwin_scroll(gw, GUIWIN_HSLIDER, 1,
true);
break;
@@ -538,6 +454,89 @@ void guiwin_get_grect(GUIWIN *win, enum guwin_area_e mode, GRECT *dest)
}
}
+void guiwin_scroll(GUIWIN *gw, short orientation, int units, bool refresh)
+{
+ struct guiwin_scroll_info_s *slid = guiwin_get_scroll_info(gw);
+ int oldpos = 0, newpos = 0, vis_units=0, pix = 0;
+ int abs_pix = 0;
+ GRECT *redraw=NULL, g, g_ro;
+
+ guiwin_get_grect(gw, GUIWIN_AREA_CONTENT, &g);
+ g_ro = g;
+
+ if (orientation == GUIWIN_VSLIDER) {
+ pix = units*slid->y_unit_px;
+ abs_pix = abs(pix);
+ oldpos = slid->y_pos;
+ vis_units = g.g_h/slid->y_unit_px;
+ newpos = slid->y_pos = MIN(slid->y_units-vis_units,
+ MAX(0, slid->y_pos+units));
+ if(oldpos == newpos)
+ return;
+ if (units>=vis_units || guiwin_has_intersection(gw, &g_ro)) {
+ // send complete redraw
+ redraw = &g_ro;
+ } else {
+ // only adjust ypos when scrolling down:
+ if(pix < 0 ) {
+ // blit screen area:
+ g.g_h -= abs_pix;
+ move_rect(gw, &g, 0, abs_pix);
+ g.g_y = g_ro.g_y;
+ g.g_h = abs_pix;
+ redraw = &g;
+ } else {
+ // blit screen area:
+ g.g_y += abs_pix;
+ g.g_h -= abs_pix;
+ move_rect(gw, &g, 0, -abs_pix);
+ g.g_y = g_ro.g_y + g_ro.g_h - abs_pix;
+ g.g_h = abs_pix;
+ redraw = &g;
+ }
+ }
+ } else {
+ pix = units*slid->x_unit_px;
+ abs_pix = abs(pix);
+ oldpos = slid->x_pos;
+ vis_units = g.g_w/slid->x_unit_px;
+ newpos = slid->x_pos = MIN(slid->x_units-vis_units,
+ MAX(0, slid->x_pos+units));
+ if(oldpos == newpos)
+ return;
+ if (units>=vis_units || guiwin_has_intersection(gw, &g_ro)) {
+ // send complete redraw
+ redraw = &g_ro;
+ } else {
+ // only adjust ypos when scrolling down:
+ if(pix < 0 ) {
+ // blit screen area:
+ g.g_w -= abs_pix;
+ move_rect(gw, &g, abs_pix, 0);
+ g.g_x = g_ro.g_x;
+ g.g_w = abs_pix;
+ redraw = &g;
+ } else {
+ // blit screen area:
+ g.g_x += abs_pix;
+ g.g_w -= abs_pix;
+ move_rect(gw, &g, -abs_pix, 0);
+ g.g_x = g_ro.g_x + g_ro.g_w - abs_pix;
+ g.g_w = abs_pix;
+ redraw = &g;
+ }
+ }
+ }
+
+ if (refresh) {
+ guiwin_update_slider(gw, orientation);
+ }
+
+ if ((redraw != NULL) && (redraw->g_h > 0)) {
+ guiwin_send_redraw(gw, redraw);
+ }
+}
+
bool guiwin_update_slider(GUIWIN *win, short mode)
{
GRECT viewport;