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 2018/08/11 08:04:13 UTC

[openmeetings] 02/02: [OPENMEETINGS-1884] flexible textbox is implemented

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

commit 01137c9a698848279158ae9f4d9d487f4306d2c4
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sat Aug 11 15:03:21 2018 +0700

    [OPENMEETINGS-1884] flexible textbox is implemented
---
 .../openmeetings/web/room/wb/raw-tool-textbox.js   |  76 +++++++++++++++++++++
 .../src/main/webapp/css/images/textbox.png         | Bin 0 -> 7147 bytes
 2 files changed, 76 insertions(+)

diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-tool-textbox.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-tool-textbox.js
new file mode 100644
index 0000000..ccea128
--- /dev/null
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-tool-textbox.js
@@ -0,0 +1,76 @@
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
+var Textbox = function(wb, s) {
+	const text = Text();
+
+	text.mouseDown = function(o) {
+		const canvas = this
+			, pointer = canvas.getPointer(o.e)
+			, ao = canvas.getActiveObject();
+		if (!!ao && ao.type === 'textbox') {
+			text.obj = ao;
+		} else {
+			text.obj = new fabric.Textbox('', {
+				left: pointer.x
+				, top: pointer.y
+				, padding: 7
+				, fill: text.fill.enabled ? text.fill.color : 'rgba(0,0,0,0)'
+				, stroke: text.stroke.enabled ? text.stroke.color : 'rgba(0,0,0,0)'
+				//, strokeWidth: text.stroke.width
+				, fontSize: text.stroke.width
+				, fontFamily: text.fontFamily
+				, opacity: text.opacity
+				, breakWords: true
+				, width: canvas.width / 4
+				, lockScalingX: false
+				, lockScalingY: true
+			});
+			if (text.style.bold) {
+				text.obj.fontWeight = 'bold'
+			}
+			if (text.style.italic) {
+				text.obj.fontStyle = 'italic'
+			}
+			canvas.add(text.obj).setActiveObject(text.obj);
+		}
+		text.obj.enterEditing();
+	};
+	text.activate = function() {
+		wb.eachCanvas(function(canvas) {
+			canvas.on('mouse:down', text.mouseDown);
+			canvas.selection = true;
+			canvas.forEachObject(function(o) {
+				if (o.type === 'textbox') {
+					o.selectable = true;
+				}
+			});
+		});
+		text.fontFamily = $('#wb-text-style-block').css('font-family');
+		ToolUtil.enableAllProps(s, text);
+		const b = s.find('.wb-prop-b').button("enable");
+		if (text.style.bold) {
+			b.addClass('ui-state-active selected');
+		} else {
+			b.removeClass('ui-state-active selected');
+		}
+		const i = s.find('.wb-prop-i').button("enable");
+		if (text.style.italic) {
+			i.addClass('ui-state-active selected');
+		} else {
+			i.removeClass('ui-state-active selected');
+		}
+		WbArea.removeDeleteHandler();
+	};
+	text.deactivate = function() {
+		wb.eachCanvas(function(canvas) {
+			canvas.off('mouse:down', text.mouseDown);
+			canvas.selection = false;
+			canvas.forEachObject(function(o) {
+				if (o.type === 'textbox') {
+					o.selectable = false;
+				}
+			});
+		});
+		WbArea.addDeleteHandler();
+	};
+	return text;
+};
diff --git a/openmeetings-web/src/main/webapp/css/images/textbox.png b/openmeetings-web/src/main/webapp/css/images/textbox.png
new file mode 100644
index 0000000..7345e05
Binary files /dev/null and b/openmeetings-web/src/main/webapp/css/images/textbox.png differ