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 2017/04/01 11:19:21 UTC

svn commit: r1789787 - in /openmeetings/application/trunk: openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/ openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/

Author: solomax
Date: Sat Apr  1 11:19:21 2017
New Revision: 1789787

URL: http://svn.apache.org/viewvc?rev=1789787&view=rev
Log:
[OPENMEETINGS-551] slide change is implemented

Modified:
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java?rev=1789787&r1=1789786&r2=1789787&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java Sat Apr  1 11:19:21 2017
@@ -40,6 +40,7 @@ public class Whiteboard {
 	private Boolean fullFit = true;
 	private Map<String, JSONObject> roomItems = new ConcurrentHashMap<>();
 	private Date created = new Date();
+	private int slide = 0;
 	private int zIndex = 1;
 	private String name;
 
@@ -130,4 +131,12 @@ public class Whiteboard {
 	public void setName(String name) {
 		this.name = name;
 	}
+
+	public int getSlide() {
+		return slide;
+	}
+
+	public void setSlide(int slide) {
+		this.slide = slide;
+	}
 }

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java?rev=1789787&r1=1789786&r2=1789787&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java Sat Apr  1 11:19:21 2017
@@ -83,6 +83,7 @@ public class WbPanel extends Panel {
 		createWb
 		, removeWb
 		, activeWb
+		, setSlide
 		, createObj
 		, modifyObj
 		, deleteObj
@@ -135,6 +136,13 @@ public class WbPanel extends Panel {
 							}
 						}
 							break;
+						case setSlide:
+						{
+							Whiteboard wb = getBean(WhiteboardCache.class).get(roomId).get(obj.getLong("wbId"));
+							wb.setSlide(obj.optInt("slide", 0));
+							sendWbOthers(String.format("WbArea.%s", a.name()), obj);
+						}
+							break;
 						case createObj:
 						{
 							Whiteboard wb = getBean(WhiteboardCache.class).get(roomId).get(obj.getLong("wbId"));
@@ -362,11 +370,8 @@ public class WbPanel extends Panel {
 					.put("top", UPLOAD_WB_TOP)
 					.put("width", fi.getWidth() == null ? DEFAULT_WIDTH : fi.getWidth())
 					.put("height", fi.getHeight() == null ? DEFAULT_HEIGHT : fi.getHeight())
-					//,"angle":32.86
-					//,"crossOrigin":""
 					.put("uid", wuid)
-					//,"filters":[]
-					//,"resizeFilters":[]
+					.put("slide", wb.getSlide())
 					;
 			wb.put(wuid, file);
 			final String ruid = wbs.getUid();

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js?rev=1789787&r1=1789786&r2=1789787&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js Sat Apr  1 11:19:21 2017
@@ -1,5 +1,6 @@
 /* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */
  /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */
+/* version 1.7.8 */
 /* Licensed MIT https://github.com/kangax/fabric.js/blob/master/LICENSE */
 var fabric = fabric || { version: "1.7.8" };
 if (typeof exports !== 'undefined') {

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js?rev=1789787&r1=1789786&r2=1789787&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js Sat Apr  1 11:19:21 2017
@@ -482,7 +482,9 @@ var Clipart = function(wb, btn) {
 }
 var Wb = function() {
 	const ACTIVE = 'active';
-	var wb = {id: -1}, a, t, s, canvases = [], mode, slide = 0, resizable = true;
+	const BUMPER = 100;
+	var wb = {id: -1}, a, t, s, canvases = [], mode, slide = 0, width = 0, height = 0
+			, minWidth = 0, minHeight = 0;
 
 	function getBtn(m) {
 		return t.find(".om-icon." + (m || mode));
@@ -664,22 +666,18 @@ var Wb = function() {
 				break;
 			case 'Presentation':
 			{
-				if (resizable && !_o.deleted) {
-					resizable = false;
-				}
+				minWidth = Math.max(minWidth, _o.width);
+				minHeight = Math.max(minHeight, _o.height);
+				width = Math.max(minWidth, width);
+				height = Math.max(minHeight, height);
 				var count = _o.deleted ? 1 : _o.count;
 				for (var i = 0; i < count; ++i) {
 					if (canvases.length < i + 1) {
 						addCanvas();
 					}
 					var canvas = canvases[i];
-					/*
-					 * TODO block resizing
-					*/
-					canvas.setBackgroundImage(_o._src + "&slide=" + i, canvas.renderAll.bind(canvas), {
-						/*backgroundImageOpacity: 0.5
-						, */backgroundImageStretch: false
-					}).setWidth(Math.max(canvas.width, _o.width)).setHeight(Math.max(canvas.height, _o.height));
+					canvas.setBackgroundImage(_o._src + "&slide=" + i, canvas.renderAll.bind(canvas), {})
+							.setWidth(width).setHeight(height);
 				}
 			}
 				break;
@@ -792,6 +790,21 @@ var Wb = function() {
 		t = a.find('.tools'), s = a.find(".wb-settings");
 		addCanvas();
 		internalInit(t);
+		a.find('.scroll-container').on('scroll', function(e) {
+			$(this).find('.canvas-container').each(function(idx) {
+				var h = $(this).height(), pos = $(this).position();
+				if (slide != idx &&pos.top > BUMPER - h && pos.top < BUMPER) {
+					//TODO FIXME might be done without iterating
+					//console.log("Found:", idx);
+					slide = idx;
+					wbAction('setSlide', JSON.stringify({
+						wbId: wb.id
+						, slide: idx
+					}));
+					return false;
+				}
+			});
+		});
 	};
 	wb.resize = function(w, h) {
 		if (t.position().left + t.width() > a.width()) {
@@ -802,16 +815,19 @@ var Wb = function() {
 				, collision: "fit"
 			});
 		}
-		if (resizable) {
-			//TODO FIXME need to be checked
-			wb.eachCanvas(function(canvas) {
-				canvas.setWidth(w).setHeight(h);
-			});
-		}
+		width = Math.max(minWidth, w);
+		height = Math.max(minHeight, h);
+		wb.eachCanvas(function(canvas) {
+			canvas.setWidth(width).setHeight(height);
+		});
 	};
 	wb.load = function(arr) {
 		_createObject(arr, _createHandler);
 	};
+	wb.setSlide = function(_sl) {
+		slide = _sl;
+		a.find('.scroll-container .canvas-container')[slide].scrollIntoView();
+	};
 	wb.createObj = function(o) {
 		switch(o.type) {
 			case 'pointer':
@@ -925,6 +941,17 @@ var WbArea = (function() {
 			}
 		});
 	}
+	function _resizeWbs() {
+		var w = area.width(), hh = area.height();
+		var wbTabs = area.find(".tabs.ui-tabs");
+		var tabPanels = wbTabs.find(".ui-tabs-panel");
+		var wbah = hh - 5 - wbTabs.find("ul.ui-tabs-nav").height();
+		tabPanels.height(wbah);
+		tabPanels.each(function(idx) {
+			$(this).data().resize(w - 25, wbah - 20);
+		});
+		wbTabs.find(".ui-tabs-panel .scroll-container").height(wbah);
+	}
 	self.getWbTabId = function(id) {
 		return "wb-tab-" + id;
 	};
@@ -979,6 +1006,7 @@ var WbArea = (function() {
 		var wbo = Wb();
 		wb.data(wbo);
 		wbo.init(obj.id, tid);
+		_resizeWbs();
 	}
 	self.add = function(obj) {
 		self.create(obj);
@@ -990,6 +1018,9 @@ var WbArea = (function() {
 	self.load = function(json) {
 		self.getWb(json.wbId).load(json.obj);
 	};
+	self.setSlide = function(json) {
+		self.getWb(json.wbId).setSlide(json.slide);
+	};
 	self.createObj = function(json) {
 		self.getWb(json.wbId).createObj(json.obj);
 	};
@@ -1013,13 +1044,7 @@ var WbArea = (function() {
 
 		var wbTabs = area.find(".tabs.ui-tabs");
 		wbTabs.height(hh);
-		var tabPanels = wbTabs.find(".ui-tabs-panel");
-		var wbah = hh - 5 - wbTabs.find("ul.ui-tabs-nav").height();
-		tabPanels.height(wbah);
-		tabPanels.each(function(idx) {
-			$(this).data('resize')(w - 20, wbah);
-		});
-		wbTabs.find(".ui-tabs-panel .scroll-container").height(wbah);
+		_resizeWbs();
 	}
 	return self;
 })();