Repository: openmeetings Updated Branches: refs/heads/master 601ebd278 -> c70d82e93
[OPENMEETINGS-1642] basic local zoom seems to work Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/c70d82e9 Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/c70d82e9 Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/c70d82e9 Branch: refs/heads/master Commit: c70d82e9358a0fce15539e0513cff664c1c5ba6a Parents: 601ebd2 Author: Maxim Solodovnik <solomax...@gmail.com> Authored: Mon Aug 7 00:32:44 2017 +0700 Committer: Maxim Solodovnik <solomax...@gmail.com> Committed: Mon Aug 7 00:32:44 2017 +0700 ---------------------------------------------------------------------- .../openmeetings/db/dto/room/Whiteboard.java | 2 +- .../openmeetings/web/room/wb/WbPanel.html | 27 ++++---- .../openmeetings/web/room/wb/WbPanel.java | 18 +++--- .../org/apache/openmeetings/web/room/wb/wb.js | 65 ++++++++++++++------ 4 files changed, 71 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c70d82e9/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java index 9919d44..5fc4e8f 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java @@ -78,7 +78,7 @@ public class Whiteboard implements Serializable { this.zoom = zoom; } - public boolean getFullFit() { + public boolean isFullFit() { return fullFit; } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c70d82e9/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html index bf0b1a9..77bca40 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html @@ -68,26 +68,23 @@ </div> <div class="btn-group btn-group-xs block" role="group" aria-label="..."> - <button type="button" class="btn btn-default" wicket:message="title:259"><span class="ui-icon ui-icon-minusthick"></span></button> - <button type="button" class="btn btn-default" wicket:message="title:260"><span class="ui-icon ui-icon-plusthick"></span></button> + <button type="button" class="btn btn-default zoom-out" wicket:message="title:259"><span class="ui-icon ui-icon-minusthick"></span></button> + <button type="button" class="btn btn-default zoom-in" wicket:message="title:260"><span class="ui-icon ui-icon-plusthick"></span></button> </div> - <select> - <option value="auto">Automatic Zoom</option> - <option value="page-actual">Actual Size</option> - <option value="page-fit">Page Fit</option> - <option value="page-width">Page Width</option> - <option value="custom" disabled="disabled">120%</option> - <option value="0.5">50%</option> + <select class="zoom"> + <option value="full-fit"><wicket:message key="847"/></option> + <option value="custom">120%</option> + <option value="0.50">50%</option> <option value="0.75">75%</option> - <option value="1">100%</option> + <option value="1.00">100%</option> <option value="1.25">125%</option> - <option value="1.5">150%</option> - <option value="2">200%</option> - <option value="3">300%</option> - <option value="4">400%</option> + <option value="1.50">150%</option> + <option value="2.00">200%</option> + <option value="3.00">300%</option> + <option value="4.00">400%</option> </select> </div> - <div id="wb-tools" class="tools ui-state-active vertical clear" style="position: absolute; top: 20px; right: 0px;"> + <div id="wb-tools" class="tools ui-state-active vertical clear" style="position: absolute; top: 20px; right: 20px;"> <div class="bumper"></div> <div wicket:message="title:62" class="ui-widget-header clickable om-icon big clear-all"></div> <div wicket:message="title:1005" class="ui-widget-header clickable om-icon big clear-slide"></div> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c70d82e9/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java index 93af4a6..675f1e2 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java @@ -130,7 +130,7 @@ public class WbPanel extends Panel { case createWb: { Whiteboard wb = WhiteboardCache.add(roomId, c.getUser().getLanguageId()); - sendWbAll(WbAction.createWb, getAddWbJson(wb.getId(), wb.getName())); + sendWbAll(WbAction.createWb, getAddWbJson(wb)); } break; case removeWb: @@ -326,11 +326,10 @@ public class WbPanel extends Panel { StringBuilder sb = new StringBuilder("WbArea.init();"); Whiteboards wbs = WhiteboardCache.get(roomId); for (Entry<Long, Whiteboard> entry : WhiteboardCache.list(roomId, rp.getClient().getUser().getLanguageId())) { - sb.append(new StringBuilder("WbArea.create(") - .append(getAddWbJson(entry.getKey(), entry.getValue().getName()).toString()) - .append(");")); + Whiteboard wb = entry.getValue(); + sb.append(new StringBuilder("WbArea.create(").append(getAddWbJson(wb)).append(");")); JSONArray arr = new JSONArray(); - for (JSONObject o : entry.getValue().list()) { + for (JSONObject o : wb.list()) { arr.put(addFileUrl(wbs.getUid(), o)); } sb.append("WbArea.load(").append(getObjWbJson(entry.getKey(), arr).toString(new NullStringer())).append(");"); @@ -377,8 +376,13 @@ public class WbPanel extends Panel { response.render(OnDomReadyHeaderItem.forScript(wbLoad.getCallbackScript())); } - private static JSONObject getAddWbJson(Long id, String name) { - return new JSONObject().put("wbId", id).put("name", name); + private static JSONObject getAddWbJson(Whiteboard wb) { + return new JSONObject().put("wbId", wb.getId()) + .put("name", wb.getName()) + .put("width", wb.getWidth()) + .put("height", wb.getHeight()) + .put("zoom", wb.getZoom()) + .put("fullFit", wb.isFullFit()); } public WbPanel update(IPartialPageRequestHandler handler) { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c70d82e9/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js index 9db3655..add05d2 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js @@ -513,8 +513,7 @@ var Wb = function() { const ACTIVE = 'active'; const BUMPER = 100; var wb = {id: -1, name: ''}, a, t, z, s, canvases = [], mode, slide = 0, width = 0, height = 0 - , wbWidth = 0, wbHeight = 0, role = null, extraProps = ['uid', 'fileId', 'fileType', 'count', 'slide']; - var minWidth = 0, minHeight = 0; //TODO TEMP + , zoom = 1., fullFit = true, role = null, extraProps = ['uid', 'fileId', 'fileType', 'count', 'slide']; function getBtn(m) { return !!t ? t.find(".om-icon." + (m || mode)) : null; @@ -582,7 +581,7 @@ var Wb = function() { }); return confirm; } - function _updateZoom() { + function _updateZoomPanel() { var ccount = canvases.length; if (ccount > 1 && role === PRESENTER) { z.find('.doc-group').show(); @@ -601,7 +600,7 @@ var Wb = function() { wbId: wb.id , slide: _sld })); - _updateZoom(); + _updateZoomPanel(); } function internalInit() { t.draggable({ @@ -642,7 +641,6 @@ var Wb = function() { showCurrentSlide(); }); case WHITEBOARD: - _updateZoom(); if (role === WHITEBOARD) { clearAll.addClass('disabled'); } @@ -748,6 +746,28 @@ var Wb = function() { } }); case NONE: + _updateZoomPanel(); + z.find('.zoom-out').click(function() { + wb.zoom -= .2; + _setSize(); + }); + z.find('.zoom-in').click(function() { + wb.zoom += .2; + _setSize(); + }); + z.find('.zoom').change(function() { + var zzz = $(this).val(); + if (isNaN(zzz)) { + if ('custom' === zzz) { + wb.zoom = $(this).data('val'); + } + //TODO handle custom, full-fit + } else { + wb.zoom = 1. * zzz; + } + _setSize(); + }); + _setSize(); initToolBtn('apointer', _firstToolItem, APointer(wb)); } } @@ -797,10 +817,6 @@ var Wb = function() { case 'Presentation': { var ccount = canvases.length; - minWidth = Math.max(minWidth, _o.width); //TODO TEMP - minHeight = Math.max(minHeight, _o.height); //TODO TEMP - width = Math.max(minWidth, width); //TODO TEMP - height = Math.max(minHeight, height); //TODO TEMP var count = _o.deleted ? 1 : _o.count; for (var i = 0; i < count; ++i) { if (canvases.length < i + 1) { @@ -810,7 +826,7 @@ var Wb = function() { canvas.setBackgroundImage(_o._src + "&slide=" + i, canvas.renderAll.bind(canvas), {}) .setWidth(width).setHeight(height); } - _updateZoom(); + _updateZoomPanel(); if (ccount != canvases.length) { var b = getBtn(); if (b.length && b.hasClass(ACTIVE)) { @@ -999,6 +1015,21 @@ var Wb = function() { } setHandlers(canvas); } + function _setSize() { + //TODO fullFit + var oo = z.find('.zoom').find('option[value="' + wb.zoom.toFixed(2) + '"]'); + if (oo.length == 1) { + oo.prop('selected', true); + } else { + z.find('.zoom').find('option[value=custom]') + .text(100. * wb.zoom.toFixed(2) + '%') + .data('val', wb.zoom) + .prop('selected', true); + } + wb.eachCanvas(function(canvas) { + canvas.setWidth(wb.zoom * wb.width).setHeight(wb.zoom * wb.height).setZoom(wb.zoom); + }); + } wb.setRole = function(_role) { if (role != _role) { var btn = getBtn(); @@ -1038,6 +1069,10 @@ var Wb = function() { wb.init = function(wbo, tid, _role) { wb.id = wbo.wbId; wb.name = wbo.name; + wb.width = wbo.width; + wb.height = wbo.height; + wb.zoom = wbo.zoom; + wb.fullFit = wbo.fullFit; a = $('#' + tid); addCanvas(); wb.setRole(_role); @@ -1046,16 +1081,11 @@ var Wb = function() { if (t.position().left + t.width() > a.width()) { t.position({ my: "right" - , at: "right" + , at: "right-10" , of: a.selector , collision: "fit" }); } - 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); @@ -1121,8 +1151,7 @@ var Wb = function() { } canvases.splice(1); canvases[0].clear(); - minWidth = minHeight = 0; - _updateZoom(); + _updateZoomPanel(); }; wb.clearSlide = function(_sl) { if (canvases.length > _sl) {