123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /**
- * WHITEBOPHIR
- *********************************************************
- * @licstart The following is the entire license notice for the
- * JavaScript code in this page.
- *
- * Copyright (C) 2020 Ophir LOJKINE
- *
- *
- * The JavaScript code in this page is free software: you can
- * redistribute it and/or modify it under the terms of the GNU
- * General Public License (GNU GPL) as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option)
- * any later version. The code is distributed WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
- *
- * As additional permission under GNU GPL version 3 section 7, you
- * may distribute non-source (e.g., minimized or compacted) forms of
- * that code without the copy of the GNU GPL normally required by
- * section 4, provided you include this license notice and a URL
- * through which recipients can access the Corresponding Source.
- *
- * @licend
- */
-
- (function () { // Code isolation
-
- // Allocate half of the maximum server updates to cursor updates
- var MIN_CURSOR_UPDATES_INTERVAL_MS = Tools.server_config.MAX_EMIT_COUNT_PERIOD / Tools.server_config.MAX_EMIT_COUNT * 2;
-
- var CURSOR_DELETE_AFTER_MS = 1000 * 5;
-
- var lastCursorUpdate = 0;
- var sending = true;
-
- var cursorTool = {
- "name": "Cursor",
- "listeners": {
- "press": function () { sending = false },
- "move": handleMarker,
- "release": function () { sending = true },
- },
- "onSizeChange": onSizeChange,
- "draw": draw,
- "mouseCursor": "crosshair",
- "icon": "tools/pencil/icon.svg",
- };
- Tools.register(cursorTool);
- Tools.addToolListeners(cursorTool);
-
- var message = {
- type: "update",
- x: 0,
- y: 0,
- color: Tools.getColor(),
- size: Tools.getSize(),
- };
-
- function handleMarker(x, y) {
- // throttle local cursor updates
- message.x = x;
- message.y = y;
- message.color = Tools.getColor();
- message.size = Tools.getSize();
- updateMarker();
- }
-
- function onSizeChange(size) {
- message.size = size;
- updateMarker();
- }
-
- function updateMarker() {
- if (!Tools.showMarker || !Tools.showMyCursor) return;
- var cur_time = Date.now();
- if (cur_time - lastCursorUpdate > MIN_CURSOR_UPDATES_INTERVAL_MS &&
- (sending || Tools.curTool.showMarker)) {
- Tools.drawAndSend(message, cursorTool);
- lastCursorUpdate = cur_time;
- } else {
- draw(message);
- }
- }
-
- var cursorsElem = Tools.svg.getElementById("cursors");
-
- function createCursor(id) {
- var cursor = document.createElementNS("http://www.w3.org/2000/svg", "circle");
- cursor.setAttributeNS(null, "class", "opcursor");
- cursor.setAttributeNS(null, "id", id);
- cursor.setAttributeNS(null, "cx", 0);
- cursor.setAttributeNS(null, "cy", 0);
- cursor.setAttributeNS(null, "r", 10);
- cursorsElem.appendChild(cursor);
- setTimeout(function () {
- cursorsElem.removeChild(cursor);
- }, CURSOR_DELETE_AFTER_MS);
- return cursor;
- }
-
- function getCursor(id) {
- return document.getElementById(id) || createCursor(id);
- }
-
- function draw(message) {
- var cursor = getCursor("cursor-" + (message.socket || 'me'));
- cursor.style.transform = "translate(" + message.x + "px, " + message.y + "px)";
- if (Tools.isIE) cursor.setAttributeNS(null, "transform", "translate(" + message.x + " " + message.y + ")");
- cursor.setAttributeNS(null, "fill", message.color);
- cursor.setAttributeNS(null, "r", message.size / 2);
- }
- })();
|