diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2017-01-08 01:11:15 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2017-01-08 01:11:15 +0000 |
commit | 2e2596b959fff699b426df9ad8e75208a3380bfb (patch) | |
tree | 85678985c75259a2795fee186e0936575e0bc246 | |
parent | bf3ba5c97bac5aa79c43153311ea0d3d5945bd4d (diff) | |
download | netsurf-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.c | 21 | ||||
-rw-r--r-- | frontends/amiga/corewindow.h | 2 |
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 |