You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2021/02/25 10:32:04 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2519] fabric.js is updated

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new e6b90b8  [OPENMEETINGS-2519] fabric.js is updated
e6b90b8 is described below

commit e6b90b819d55faa5bde52233037572b480e61ba1
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Feb 25 17:31:14 2021 +0700

    [OPENMEETINGS-2519] fabric.js is updated
---
 openmeetings-web/src/main/front/wb/package.json   |  2 +-
 openmeetings-web/src/main/front/wb/src/wb-area.js | 80 ++++++++++-------------
 2 files changed, 37 insertions(+), 45 deletions(-)

diff --git a/openmeetings-web/src/main/front/wb/package.json b/openmeetings-web/src/main/front/wb/package.json
index 9b63ae5..7920b65 100644
--- a/openmeetings-web/src/main/front/wb/package.json
+++ b/openmeetings-web/src/main/front/wb/package.json
@@ -18,7 +18,7 @@
     "tinyify": "^3.0.0"
   },
   "dependencies": {
-    "fabric": "^3.6.6",
+    "fabric": "^4.3.1",
     "mathjax-full": "^3.1.2"
   }
 }
diff --git a/openmeetings-web/src/main/front/wb/src/wb-area.js b/openmeetings-web/src/main/front/wb/src/wb-area.js
index 4e94fec..a7baa5b 100644
--- a/openmeetings-web/src/main/front/wb/src/wb-area.js
+++ b/openmeetings-web/src/main/front/wb/src/wb-area.js
@@ -68,56 +68,48 @@ module.exports = class DrawWbArea extends WbAreaBase {
 		let scroll, role = Role.NONE, _inited = false;
 
 		// Fabric overrides (should be kept up-to-date on fabric.js updates)
-		if ('function' !== typeof(window.originalDrawControl)) {
-			window.originalDrawControl = fabric.Object.prototype._drawControl;
-			window.originalGetRotatedCornerCursor = fabric.Canvas.prototype._getRotatedCornerCursor;
-			window.originalGetActionFromCorner = fabric.Canvas.prototype._getActionFromCorner;
-			window.originalGetCornerCursor = fabric.Canvas.prototype.getCornerCursor;
+		if ('function' !== typeof (window.originalTr)) {
+			window.originalTr = fabric.Object.prototype.controls.tr;
 		}
-		fabric.Object.prototype._drawControl = function(control, ctx, methodName, left, top, styleOverride) {
-			switch (control) {
-				case 'mtr':
-				{
-					const x = left + (this.cornerSize - arrowImg.width) / 2
-						, y = top + (this.cornerSize - arrowImg.height) / 2;
-					ctx.drawImage(arrowImg, x, y);
-				}
-					break;
-				case 'tr':
-				{
-					if (role === Role.PRESENTER) {
-						const x = left + (this.cornerSize - delImg.width) / 2
-							, y = top + (this.cornerSize - delImg.height) / 2;
-						ctx.drawImage(delImg, x, y);
-					} else {
-						window.originalDrawControl.call(this, control, ctx, methodName, left, top, styleOverride);
-					}
+		fabric.Object.prototype.controls.mtr.render = function(ctx, left, top, _, fabricObject) {
+			ctx.save();
+			ctx.translate(left, top);
+			ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));
+			ctx.drawImage(arrowImg, x-arrowImg.width / 2, -arrowImg.height / 2);
+			ctx.restore();
+		};
+		fabric.Object.prototype.controls.tr = new fabric.Control({
+			x: 0.5
+			, y: -0.5
+			, cursorStyleHandler: function(eventData, control, fabricObject) {
+				if (role === Role.PRESENTER) {
+					return 'pointer';
 				}
-					break;
-				default:
-					window.originalDrawControl.call(this, control, ctx, methodName, left, top, styleOverride);
-					break;
+				return window.originalTr.cursorStyleHandler.call(this, eventData, control, fabricObject);
 			}
-		};
-		fabric.Canvas.prototype._getRotatedCornerCursor = function(corner, target, e) {
-			if (role === Role.PRESENTER && 'tr' === corner) {
-				return 'pointer';
+			, getActionName: function(eventData, control, fabricObject) {
+				if (role === Role.PRESENTER) {
+					return 'click';
+				}
+				return window.originalTr.getActionName.call(this, eventData, control, fabricObject);
 			}
-			return window.originalGetRotatedCornerCursor.call(this, corner, target, e);
-		};
-		fabric.Canvas.prototype._getActionFromCorner = function(alreadySelected, corner, e) {
-			if (role === Role.PRESENTER && 'tr' === corner) {
-				_performDelete();
-				return 'none';
+			, mouseDownHandler: function(eventData, transformData, x, y) {
+				if (role === Role.PRESENTER) {
+					_performDelete();
+					return true;
+				}
+				return window.originalTr.mouseDownHandler.call(this, eventData, transformData, x, y);
 			}
-			return window.originalGetActionFromCorner.call(this, alreadySelected, corner, e);
-		};
-		fabric.Canvas.prototype.getCornerCursor = function(corner, target, e) {
-			if (role === Role.PRESENTER && 'tr' === corner) {
-				return 'pointer';
+			, render: function(ctx, left, top, styleOverride, fabricObject) {
+				if (role === Role.PRESENTER) {
+					const x = left - delImg.width / 2
+						, y = top - delImg.height / 2;
+					ctx.drawImage(delImg, x, y);
+				} else {
+					window.originalTr.render.call(this, ctx, left, top, styleOverride, fabricObject);
+				}
 			}
-			return window.originalGetCornerCursor.call(this, corner, target, e);
-		}
+		});
 		function _performDelete() {
 			const wb = _getActive().data()
 				, canvas = wb.getCanvas();