diff options
author | Devaev Maxim <[email protected]> | 2018-08-01 17:31:23 +0300 |
---|---|---|
committer | Devaev Maxim <[email protected]> | 2018-08-01 17:31:23 +0300 |
commit | 9a5c583f808f7167a5a630d675c195a4a7ded2aa (patch) | |
tree | 904f4250943e04aa0f8864ccb7785c9618ece058 /kvmd/web/js/mouse.js | |
parent | cb8e5efbc74343a932a712444c5d7f017094cbe2 (diff) |
mouse support
Diffstat (limited to 'kvmd/web/js/mouse.js')
-rw-r--r-- | kvmd/web/js/mouse.js | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/kvmd/web/js/mouse.js b/kvmd/web/js/mouse.js index b9d27e67..ba4eb264 100644 --- a/kvmd/web/js/mouse.js +++ b/kvmd/web/js/mouse.js @@ -2,9 +2,12 @@ var mouse = new function() { var __ws = null; var __current_pos = {x: 0, y:0}; var __sent_pos = {x: 0, y:0}; + var __stream_hovered = false; this.init = function() { el_stream_box = $("stream-box"); + el_stream_box.onmouseenter = __hoverStream; + el_stream_box.onmouseleave = __leaveStream; el_stream_box.onmousedown = (event) => __buttonHandler(event, true); el_stream_box.onmouseup = (event) => __buttonHandler(event, false); el_stream_box.oncontextmenu = (event) => event.preventDefault(); @@ -15,11 +18,25 @@ var mouse = new function() { this.setSocket = function(ws) { __ws = ws; + if (ws) { + $("stream-box").classList.add("stream-box-mouse-enabled"); + } else { + $("stream-box").classList.remove("stream-box-mouse-enabled"); + } + }; + + var __hoverStream = function() { + __stream_hovered = true; + mouse.updateLeds(); + }; + + var __leaveStream = function() { + __stream_hovered = false; + mouse.updateLeds(); }; this.updateLeds = function() { - var focused = (__ws && document.activeElement === $("stream-window")); - $("hid-mouse-led").className = (focused ? "led-on" : "led-off"); + $("hid-mouse-led").className = (__ws && __stream_hovered ? "led-on" : "led-off"); }; var __buttonHandler = function(event, state) { @@ -56,15 +73,23 @@ var mouse = new function() { if (pos.x !== __sent_pos.x || pos.y !== __sent_pos.y) { tools.debug("Mouse move:", pos); if (__ws) { + el_stream_image = $("stream-image"); __ws.send(JSON.stringify({ event_type: "mouse_move", - to: pos, + to: { + x: __translate(pos.x, 0, el_stream_image.clientWidth, -32768, 32767), + y: __translate(pos.y, 0, el_stream_image.clientHeight, -32768, 32767), + }, })); } __sent_pos = pos; } }; + var __translate = function(x, a, b, c, d) { + return Math.round((x - a) / (b - a) * (d - c) + c); + }; + var __wheelHandler = function(event) { // https://learn.javascript.ru/mousewheel if (event.preventDefault) { |