summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2017-01-08 01:11:15 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2017-01-08 01:11:15 +0000
commit2e2596b959fff699b426df9ad8e75208a3380bfb (patch)
tree85678985c75259a2795fee186e0936575e0bc246
parentbf3ba5c97bac5aa79c43153311ea0d3d5945bd4d (diff)
downloadnetsurf-chris/amiga-corewindow.tar.gz
attempt visual drag selectchris/amiga-corewindow
needs rastport set as 'complement' think this is getting overwritten by the corewindow redraw anyway
-rw-r--r--frontends/amiga/corewindow.c21
-rw-r--r--frontends/amiga/corewindow.h2
2 files changed, 23 insertions, 0 deletions
diff --git a/frontends/amiga/corewindow.c b/frontends/amiga/corewindow.c
index 1bfd6c4c6..aafe33c4f 100644
--- a/frontends/amiga/corewindow.c
+++ b/frontends/amiga/corewindow.c
@@ -66,6 +66,12 @@
#include "amiga/schedule.h"
#include "amiga/utf8.h"
+#define DRAWBOX(P, R) Move(P, R.x0, R.y0); \
+ Move(P, R.x1, R.y0); \
+ Move(P, R.x1, R.y1); \
+ Move(P, R.x0, R.y1); \
+ Move(P, R.x0, R.y0);
+
static void
ami_cw_scroller_top(struct ami_corewindow *ami_cw, ULONG *restrict x, ULONG *restrict y)
{
@@ -479,6 +485,8 @@ ami_cw_drag_start(struct ami_corewindow *ami_cw, int x, int y)
switch(ami_cw->drag_status) {
case CORE_WINDOW_DRAG_SELECTION:
+ ami_cw->drag_select.x0 = ami_cw->win->MouseX;
+ ami_cw->drag_select.y0 = ami_cw->win->MouseY;
break;
case CORE_WINDOW_DRAG_MOVE:
@@ -500,6 +508,10 @@ ami_cw_drag_progress(struct ami_corewindow *ami_cw, int x, int y)
switch(ami_cw->drag_status) {
case CORE_WINDOW_DRAG_SELECTION:
+ DRAWBOX(ami_cw->win->RPort, ami_cw->drag_select);
+ ami_cw->drag_select.x1 = ami_cw->win->MouseX;
+ ami_cw->drag_select.y1 = ami_cw->win->MouseY;
+ DRAWBOX(ami_cw->win->RPort, ami_cw->drag_select);
break;
case CORE_WINDOW_DRAG_MOVE:
@@ -521,6 +533,10 @@ ami_cw_drag_end(struct ami_corewindow *ami_cw, int x, int y)
switch(ami_cw->drag_status) {
case CORE_WINDOW_DRAG_SELECTION:
+ ami_cw->drag_select.x0 = -1;
+ ami_cw->drag_select.y0 = -1;
+ ami_cw->drag_select.x1 = -1;
+ ami_cw->drag_select.y1 = -1;
break;
case CORE_WINDOW_DRAG_MOVE:
@@ -852,7 +868,12 @@ nserror ami_corewindow_init(struct ami_corewindow *ami_cw)
ami_cw->scroll_x_visible = true;
ami_cw->scroll_y_visible = true;
ami_cw->in_border_scroll = false;
+
ami_cw->dragging = false;
+ ami_cw->drag_select.x0 = -1;
+ ami_cw->drag_select.y0 = -1;
+ ami_cw->drag_select.x1 = -1;
+ ami_cw->drag_select.y1 = -1;
/* allocate drawing area etc */
ami_init_layers(&ami_cw->gg, 100, 100, false); // force tiles to save memory
diff --git a/frontends/amiga/corewindow.h b/frontends/amiga/corewindow.h
index cfcd7fc5e..198d90e87 100644
--- a/frontends/amiga/corewindow.h
+++ b/frontends/amiga/corewindow.h
@@ -20,6 +20,7 @@
#define AMIGA_COREWINDOW_H
#include "netsurf/core_window.h"
+#include "utils/utils.h" /* for struct rect */
#include "amiga/gui.h" /* need to know the size of ami_generic_window :( */
#include "amiga/plotters.h"
@@ -61,6 +62,7 @@ struct ami_corewindow {
bool dragging;
int drag_x_start;
int drag_y_start;
+ struct rect drag_select;
bool close_window; // set to true to close the window during event loop