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 | |
parent | cb8e5efbc74343a932a712444c5d7f017094cbe2 (diff) |
mouse support
Diffstat (limited to 'kvmd/web/js')
-rw-r--r-- | kvmd/web/js/hid.js | 34 | ||||
-rw-r--r-- | kvmd/web/js/keyboard.js | 6 | ||||
-rw-r--r-- | kvmd/web/js/mouse.js | 31 | ||||
-rw-r--r-- | kvmd/web/js/stream.js | 4 |
4 files changed, 38 insertions, 37 deletions
diff --git a/kvmd/web/js/hid.js b/kvmd/web/js/hid.js index a8a5d653..cb6c37bf 100644 --- a/kvmd/web/js/hid.js +++ b/kvmd/web/js/hid.js @@ -1,10 +1,4 @@ var hid = new function() { - var __install_timer = null; - var __installed = false; - - var __hidden_attr = null; - var __visibility_change_attr = null; - this.init = function() { keyboard.init(); mouse.init(); @@ -32,32 +26,12 @@ var hid = new function() { }; this.installCapture = function(ws) { - var http = tools.makeRequest("GET", "/kvmd/hid", function() { - if (http.readyState === 4) { - if (http.status === 200) { - features = JSON.parse(http.responseText).result.features; - if (features.mouse) { - mouse.setSocket(ws); - } - keyboard.setSocket(ws); - __installed = true; - } else { - tools.error("Can't resolve HID features:", http.responseText); - __install_timer = setTimeout(() => hid.installCapture(ws), 1000); - } - } - }); + keyboard.setSocket(ws); + mouse.setSocket(ws); }; this.clearCapture = function() { - if (__install_timer) { - clearTimeout(__install_timer); - __install_timer = null; - } - if (__installed) { - mouse.setSocket(null); - keyboard.setSocket(null); - __installed = false; - } + mouse.setSocket(null); + keyboard.setSocket(null); }; } diff --git a/kvmd/web/js/keyboard.js b/kvmd/web/js/keyboard.js index 9d3f65e6..3618f447 100644 --- a/kvmd/web/js/keyboard.js +++ b/kvmd/web/js/keyboard.js @@ -27,8 +27,10 @@ var keyboard = new function() { }; this.setSocket = function(ws) { - keyboard.releaseAll(); - __ws = ws; + if (ws !== __ws) { + keyboard.releaseAll(); + __ws = ws; + } keyboard.updateLeds(); }; 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) { diff --git a/kvmd/web/js/stream.js b/kvmd/web/js/stream.js index 51e00a96..e7bd82d4 100644 --- a/kvmd/web/js/stream.js +++ b/kvmd/web/js/stream.js @@ -11,14 +11,14 @@ var stream = new function() { tools.info("Refreshing stream ..."); __prev_state = false; $("stream-image").className = "stream-image-inactive"; - $("stream-box").className = "stream-box-inactive"; + $("stream-box").classList.add("stream-box-inactive"); $("stream-led").className = "led-off"; $("stream-reset-button").disabled = true; } else if (!__prev_state) { __refreshImage(); __prev_state = true; $("stream-image").className = "stream-image-active"; - $("stream-box").className = "stream-box-active"; + $("stream-box").classList.remove("stream-box-inactive"); $("stream-led").className = "led-on"; $("stream-reset-button").disabled = false; } |