|
1 | | -// Movable View v1.1 |
| 1 | +// Movable View v1.2 |
2 | 2 | // https://github.com/MustafaHi/Sciter-MovableView |
3 | 3 |
|
4 | | -// Call movableView('.selector'); |
5 | | -function movableView(s) |
| 4 | +// Call movableView('selector' [, screenBound:bool(false)]); |
| 5 | +function movableView(s, screenBound = false) |
6 | 6 | { |
7 | | - var xoff,yoff; |
| 7 | + var xoff,yoff, minXY, maxX, maxY; |
8 | 8 | var dragging = false; |
| 9 | + |
9 | 10 | function doDrag() { while( dragging ) view.doEvent(); } |
| 11 | + |
| 12 | + function screenBounds() |
| 13 | + { |
| 14 | + if (screenBound) |
| 15 | + { |
| 16 | + (maxX, maxY) = view.screenBox(#workarea, #dimension); |
| 17 | + var (w, h) = view.box(#dimension, #border); |
| 18 | + maxX -= w; |
| 19 | + maxY -= h; |
| 20 | + minXY = 0; |
| 21 | + } |
| 22 | + else |
| 23 | + { |
| 24 | + (maxX, maxY) = Integer.MAX; |
| 25 | + minXY = Integer.MIN; |
| 26 | + } |
| 27 | + } |
10 | 28 |
|
11 | 29 | function onMouseDown(e) |
12 | 30 | { |
13 | | - if(!e.target.$is({s}) ){ return false; } |
| 31 | + if(!e.target.$is({s}) ) { return false; } |
| 32 | + |
| 33 | + screenBounds(); |
14 | 34 | e.target.capture(true); |
15 | 35 | xoff = e.xView; yoff = e.yView; |
16 | 36 | dragging = true; |
17 | 37 | doDrag(); |
18 | 38 | } |
19 | | - |
| 39 | + |
20 | 40 | function onMouseMove(e) |
21 | 41 | { |
22 | | - if( dragging ) |
| 42 | + if(dragging) |
23 | 43 | { |
24 | | - view.move( e.xScreen - xoff, e.yScreen - yoff, false); |
25 | | - return true; |
| 44 | + view.move( (e.xScreen - xoff).limit(minXY, maxX), (e.yScreen - yoff).limit(minXY, maxY), false ); |
26 | 45 | } |
27 | 46 | return true; |
28 | 47 | } |
29 | 48 |
|
30 | | - function stopDrag(e) |
| 49 | + function onMouseUp(e) |
31 | 50 | { |
32 | | - if(dragging) { dragging = false; e.target.capture(false); return true; } |
33 | | - return false; |
| 51 | + if(dragging) { dragging = false; e.target.capture(false); } |
| 52 | + return true; |
34 | 53 | } |
35 | 54 |
|
36 | | - function onKeyDown(e) { if(e.keyCode == Event.VK_ESCAPE ) return stopDrag(e); } |
37 | | - for(var i=0; i<$$({s}).length; ++i) { |
38 | | - $$({s})[i].subscribe(onMouseDown, Event.MOUSE, Event.MOUSE_DOWN ); |
39 | | - $$({s})[i].subscribe(stopDrag, Event.MOUSE, Event.MOUSE_UP ); |
40 | | - $$({s})[i].subscribe(onMouseMove, Event.MOUSE, Event.MOUSE_MOVE ); |
41 | | - $$({s})[i].subscribe(onKeyDown, Event.KEY, Event.KEY_DOWN ); |
| 55 | + const elements = $$({s}); |
| 56 | + for(var i=0; i<elements.length; ++i) { |
| 57 | + elements[i].subscribe(onMouseDown, Event.MOUSE, Event.MOUSE_DOWN ); |
| 58 | + elements[i].subscribe(onMouseUp, Event.MOUSE, Event.MOUSE_UP ); |
| 59 | + elements[i].subscribe(onMouseMove, Event.MOUSE, Event.MOUSE_MOVE ); |
42 | 60 | } |
43 | | - return false; |
| 61 | + return true; |
44 | 62 | } |
| 63 | + |
0 commit comments