diff --git a/app.js b/app.js
index 4da17677b..705dfcaa7 100644
--- a/app.js
+++ b/app.js
@@ -10,7 +10,7 @@ var focusJid = null;
var roomUrl = null;
var roomName = null;
var ssrc2jid = {};
-var mediaStreams = [];
+var mediaStreams = {};
var bridgeIsDown = false;
/**
@@ -108,9 +108,16 @@ function connect(jid, password) {
localVideo = connection.jingle.localVideo;
}
connection = new Strophe.Connection(document.getElementById('boshURL').value || config.bosh || '/http-bind');
-
- if (nickname) {
- connection.emuc.addDisplayNameToPresence(nickname);
+
+ var email = SettingsMenu.getEmail();
+ var displayName = SettingsMenu.getDisplayName();
+ if(email) {
+ connection.emuc.addEmailToPresence(email);
+ } else {
+ connection.emuc.addUserIdToPresence(SettingsMenu.getUID());
+ }
+ if(displayName) {
+ connection.emuc.addDisplayNameToPresence(displayName);
}
if (connection.disco) {
@@ -355,7 +362,12 @@ function waitForPresence(data, sid) {
// NOTE(gp) now that we have simulcast, a media stream can have more than 1
// ssrc. We should probably take that into account in our MediaStream
// wrapper.
- mediaStreams.push(new MediaStream(data, sid, thessrc));
+ var mediaStream = new MediaStream(data, sid, thessrc);
+ var jid = data.peerjid || connection.emuc.myroomjid;
+ if(!mediaStreams[jid]) {
+ mediaStreams[jid] = {};
+ }
+ mediaStreams[jid][mediaStream.type] = mediaStream;
var container;
var remotes = document.getElementById('remoteVideos');
@@ -392,6 +404,8 @@ function waitForPresence(data, sid) {
data.stream,
data.peerjid,
thessrc);
+ if(isVideo && container.id !== 'mixedstream')
+ videoSrcToSsrc[$(container).find('>video')[0].src] = thessrc;
}
// an attempt to work around https://github.com/jitsi/jitmeet/issues/32
@@ -691,7 +705,7 @@ $(document).bind('joined.muc', function (event, jid, info) {
);
// Add myself to the contact list.
- ContactList.addContact(jid);
+ ContactList.addContact(jid, SettingsMenu.getEmail() || SettingsMenu.getUID());
// Once we've joined the muc show the toolbar
ToolbarToggler.showToolbar();
@@ -718,7 +732,12 @@ $(document).bind('entered.muc', function (event, jid, info, pres) {
}
// Add Peer's container
- VideoLayout.ensurePeerContainerExists(jid);
+ var id = $(pres).find('>userID').text();
+ var email = $(pres).find('>email');
+ if(email.length > 0) {
+ id = email.text();
+ }
+ VideoLayout.ensurePeerContainerExists(jid,id);
if(APIConnector.isEnabled() && APIConnector.isEventEnabled("participantJoined"))
{
@@ -845,6 +864,13 @@ $(document).bind('presence.muc', function (event, jid, info, pres) {
"Jitsi Videobridge is currently unavailable. Please try again later!");
}
+ var id = $(pres).find('>userID').text();
+ var email = $(pres).find('>email');
+ if(email.length > 0) {
+ id = email.text();
+ }
+ Avatar.setUserAvatar(jid, id);
+
});
$(document).bind('presence.status.muc', function (event, jid, info, pres) {
@@ -1310,15 +1336,20 @@ $(document).ready(function () {
"showMethod": "fadeIn",
"hideMethod": "fadeOut",
"reposition": function() {
- if(Chat.isVisible() || ContactList.isVisible()) {
- $("#toast-container").addClass("toast-bottom-right-center");
+ if(PanelToggler.isVisible()) {
+ $("#toast-container").addClass("notification-bottom-right-center");
} else {
- $("#toast-container").removeClass("toast-bottom-right-center");
+ $("#toast-container").removeClass("notification-bottom-right-center");
}
},
"newestOnTop": false
- }
+ };
+ $('#settingsmenu>input').keyup(function(event){
+ if(event.keyCode === 13) {//enter
+ SettingsMenu.update();
+ }
+ })
});
@@ -1617,3 +1648,14 @@ function hangup() {
);
}
+
+$(document).on('videomuted.muc', function(event, jid, value) {
+ if(mediaStreams[jid] && mediaStreams[jid][MediaStream.VIDEO_TYPE]) {
+ var stream = mediaStreams[jid][MediaStream.VIDEO_TYPE];
+ var isMuted = (value === "true");
+ if (isMuted != stream.muted) {
+ stream.muted = isMuted;
+ Avatar.showUserAvatar(jid, isMuted);
+ }
+ }
+});
diff --git a/avatar.js b/avatar.js
new file mode 100644
index 000000000..2888f44ae
--- /dev/null
+++ b/avatar.js
@@ -0,0 +1,150 @@
+var Avatar = (function(my) {
+ var users = {};
+ var activeSpeakerJid;
+ /**
+ * Sets the user's avatar in the settings menu(if local user), contact list
+ * and thumbnail
+ * @param jid jid of the user
+ * @param id email or userID to be used as a hash
+ */
+ my.setUserAvatar = function(jid, id) {
+ if(id) {
+ if(users[jid] === id) {
+ return;
+ }
+ users[jid] = id;
+ }
+ var url = getGravatarUrl(users[jid] || jid);
+ var resourceJid = Strophe.getResourceFromJid(jid);
+ var thumbnail = $('#participant_' + resourceJid);
+ var avatar = $('#avatar_' + resourceJid);
+
+ // set the avatar in the settings menu if it is local user and get the
+ // local video container
+ if(jid === connection.emuc.myroomjid) {
+ $('#avatar').get(0).src = url;
+ thumbnail = $('#localVideoContainer');
+ }
+
+ // set the avatar in the contact list
+ var contact = $('#' + resourceJid + '>img');
+ if(contact && contact.length > 0) {
+ contact.get(0).src = url;
+ }
+
+ // set the avatar in the thumbnail
+ if(avatar && avatar.length > 0) {
+ avatar[0].src = url;
+ } else {
+ if (thumbnail && thumbnail.length > 0) {
+ avatar = document.createElement('img');
+ avatar.id = 'avatar_' + resourceJid;
+ avatar.className = 'userAvatar';
+ avatar.src = url;
+ thumbnail.append(avatar);
+ }
+ }
+
+ //if the user is the current active speaker - update the active speaker
+ // avatar
+ if(jid === activeSpeakerJid) {
+ Avatar.updateActiveSpeakerAvatarSrc(jid);
+ }
+ };
+
+ /**
+ * Hides or shows the user's avatar
+ * @param jid jid of the user
+ * @param show whether we should show the avatar or not
+ * video because there is no dominant speaker and no focused speaker
+ */
+ my.showUserAvatar = function(jid, show) {
+ if(users[jid]) {
+ var resourceJid = Strophe.getResourceFromJid(jid);
+ var video = $('#participant_' + resourceJid + '>video');
+ var avatar = $('#avatar_' + resourceJid);
+
+ if(jid === connection.emuc.myroomjid) {
+ video = $('#localVideoWrapper>video');
+ }
+ if(show === undefined || show === null) {
+ show = isUserMuted(jid);
+ }
+
+ //if the user is the currently focused, the dominant speaker or if
+ //there is no focused and no dominant speaker
+ if (activeSpeakerJid === jid) {
+ setVisibility($("#largeVideo"), !show);
+ setVisibility($('#activeSpeakerAvatar'), show);
+ setVisibility(avatar, false);
+ setVisibility(video, false);
+ } else {
+ if (video && video.length > 0) {
+ setVisibility(video, !show);
+ setVisibility(avatar, show);
+ }
+ }
+ }
+ };
+
+ /**
+ * Updates the src of the active speaker avatar
+ * @param jid of the current active speaker
+ */
+ my.updateActiveSpeakerAvatarSrc = function(jid) {
+ if(!jid) {
+ if (focusedVideoSrc) {
+ jid = getJidFromVideoSrc(focusedVideoSrc);
+ } else {
+ jid = connection.emuc.findJidFromResource(
+ VideoLayout.getDominantSpeakerResourceJid());
+ }
+ }
+ var avatar = $("#activeSpeakerAvatar")[0];
+ var url = getGravatarUrl(users[jid],
+ interfaceConfig.ACTIVE_SPEAKER_AVATAR_SIZE);
+ if(jid === activeSpeakerJid && avatar.src === url) {
+ return;
+ }
+ activeSpeakerJid = jid;
+ var isMuted = isUserMuted(jid);
+ if(jid && isMuted !== null) {
+ avatar.src = url;
+ setVisibility($("#largeVideo"), !isMuted);
+ Avatar.showUserAvatar(jid, isMuted);
+ }
+ };
+
+ function setVisibility(selector, show) {
+ if (selector && selector.length > 0) {
+ selector.css("visibility", show ? "visible" : "hidden");
+ }
+ }
+
+ function isUserMuted(jid) {
+ // XXX(gp) we may want to rename this method to something like
+ // isUserStreaming, for example.
+ if (jid && jid != connection.emuc.myroomjid) {
+ var resource = Strophe.getResourceFromJid(jid);
+ if (!VideoLayout.isInLastN(resource)) {
+ return true;
+ }
+ }
+
+ if (!mediaStreams[jid] || !mediaStreams[jid][MediaStream.VIDEO_TYPE]) {
+ return null;
+ }
+ return mediaStreams[jid][MediaStream.VIDEO_TYPE].muted;
+ }
+
+ function getGravatarUrl(id, size) {
+ if(id === connection.emuc.myroomjid || !id) {
+ id = SettingsMenu.getUID();
+ }
+ return 'https://www.gravatar.com/avatar/' +
+ MD5.hexdigest(id.trim().toLowerCase()) +
+ "?d=retro&size=" + (size || "30");
+ }
+
+ return my;
+}(Avatar || {}));
diff --git a/bottom_toolbar.js b/bottom_toolbar.js
index c504c944d..13073632e 100644
--- a/bottom_toolbar.js
+++ b/bottom_toolbar.js
@@ -1,30 +1,10 @@
var BottomToolbar = (function (my) {
my.toggleChat = function() {
- if (ContactList.isVisible()) {
- buttonClick("#contactListButton", "active");
- $('#contactlist').css('z-index', 4);
- setTimeout(function() {
- $('#contactlist').css('display', 'none');
- $('#contactlist').css('z-index', 5);
- }, 500);
- }
-
- Chat.toggleChat();
-
- buttonClick("#chatBottomButton", "active");
+ PanelToggler.toggleChat();
};
my.toggleContactList = function() {
- if (Chat.isVisible()) {
- buttonClick("#chatBottomButton", "active");
- setTimeout(function() {
- $('#chatspace').css('display', 'none');
- }, 500);
- }
-
- buttonClick("#contactListButton", "active");
-
- ContactList.toggleContactList();
+ PanelToggler.toggleContactList();
};
my.toggleFilmStrip = function() {
diff --git a/chat.js b/chat.js
index e90635042..2dee6c514 100644
--- a/chat.js
+++ b/chat.js
@@ -57,7 +57,7 @@ var Chat = (function (my) {
var onTextAreaResize = function () {
resizeChatConversation();
- scrollChatToBottom();
+ Chat.scrollChatToBottom();
};
$('#usermsg').autosize({callback: onTextAreaResize});
@@ -144,112 +144,7 @@ var Chat = (function (my) {
}
};
- /**
- * Opens / closes the chat area.
- */
- my.toggleChat = function () {
- var chatspace = $('#chatspace');
- var videospace = $('#videospace');
- var chatSize = (Chat.isVisible()) ? [0, 0] : Chat.getChatSize();
- var videospaceWidth = window.innerWidth - chatSize[0];
- var videospaceHeight = window.innerHeight;
- var videoSize
- = getVideoSize(null, null, videospaceWidth, videospaceHeight);
- var videoWidth = videoSize[0];
- var videoHeight = videoSize[1];
- var videoPosition = getVideoPosition(videoWidth,
- videoHeight,
- videospaceWidth,
- videospaceHeight);
- var horizontalIndent = videoPosition[0];
- var verticalIndent = videoPosition[1];
-
- var thumbnailSize = VideoLayout.calculateThumbnailSize(videospaceWidth);
- var thumbnailsWidth = thumbnailSize[0];
- var thumbnailsHeight = thumbnailSize[1];
- var completeFunction = Chat.isVisible() ?
- function() {} : function () {
- scrollChatToBottom();
- chatspace.trigger('shown');
- };
-
- videospace.animate({right: chatSize[0],
- width: videospaceWidth,
- height: videospaceHeight},
- {queue: false,
- duration: 500,
- complete: completeFunction});
-
- $('#remoteVideos').animate({height: thumbnailsHeight},
- {queue: false,
- duration: 500});
-
- $('#remoteVideos>span').animate({height: thumbnailsHeight,
- width: thumbnailsWidth},
- {queue: false,
- duration: 500,
- complete: function() {
- $(document).trigger(
- "remotevideo.resized",
- [thumbnailsWidth,
- thumbnailsHeight]);
- }});
-
- $('#largeVideoContainer').animate({ width: videospaceWidth,
- height: videospaceHeight},
- {queue: false,
- duration: 500
- });
-
- $('#largeVideo').animate({ width: videoWidth,
- height: videoHeight,
- top: verticalIndent,
- bottom: verticalIndent,
- left: horizontalIndent,
- right: horizontalIndent},
- { queue: false,
- duration: 500
- }
- );
-
- if (Chat.isVisible()) {
- $("#toast-container").animate({right: '5px'},
- {queue: false,
- duration: 500});
- chatspace.hide("slide", { direction: "right",
- queue: false,
- duration: 500});
-
- }
- else {
- // Undock the toolbar when the chat is shown and if we're in a
- // video mode.
- if (VideoLayout.isLargeVideoVisible()) {
- ToolbarToggler.dockToolbar(false);
- }
-
-
- $("#toast-container").animate({right: (chatSize[0] + 5) + 'px'},
- {queue: false,
- duration: 500});
- chatspace.show("slide", { direction: "right",
- queue: false,
- duration: 500,
- complete: function () {
- // Request the focus in the nickname field or the chat input field.
- if ($('#nickname').css('visibility') === 'visible') {
- $('#nickinput').focus();
- } else {
- $('#usermsg').focus();
- }
- }
- });
-
- Chat.resizeChat();
- }
-
- };
/**
* Sets the chat conversation mode.
@@ -268,7 +163,7 @@ var Chat = (function (my) {
* Resizes the chat area.
*/
my.resizeChat = function () {
- var chatSize = Chat.getChatSize();
+ var chatSize = PanelToggler.getPanelSize();
$('#chatspace').width(chatSize[0]);
$('#chatspace').height(chatSize[1]);
@@ -276,20 +171,6 @@ var Chat = (function (my) {
resizeChatConversation();
};
- /**
- * Returns the size of the chat.
- */
- my.getChatSize = function () {
- var availableHeight = window.innerHeight;
- var availableWidth = window.innerWidth;
-
- var chatWidth = 200;
- if (availableWidth * 0.2 < 200)
- chatWidth = availableWidth * 0.2;
-
- return [chatWidth, availableHeight];
- };
-
/**
* Indicates if the chat is currently visible.
*/
@@ -309,6 +190,16 @@ var Chat = (function (my) {
$('#usermsg').focus();
};
+ /**
+ * Scrolls chat to the bottom.
+ */
+ my.scrollChatToBottom = function() {
+ setTimeout(function () {
+ $('#chatconversation').scrollTop(
+ $('#chatconversation')[0].scrollHeight);
+ }, 5);
+ };
+
/**
* Adds the smileys container to the chat
*/
@@ -426,15 +317,6 @@ var Chat = (function (my) {
}
}
- /**
- * Scrolls chat to the bottom.
- */
- function scrollChatToBottom() {
- setTimeout(function () {
- $('#chatconversation').scrollTop(
- $('#chatconversation')[0].scrollHeight);
- }, 5);
- }
/**
* Returns the current time in the format it is shown to the user
diff --git a/contact_list.js b/contact_list.js
index 4e31d1be7..68536ff72 100644
--- a/contact_list.js
+++ b/contact_list.js
@@ -20,22 +20,24 @@ var ContactList = (function (my) {
* Adds a contact for the given peerJid if such doesn't yet exist.
*
* @param peerJid the peerJid corresponding to the contact
+ * @param id the user's email or userId used to get the user's avatar
*/
- my.ensureAddContact = function(peerJid) {
+ my.ensureAddContact = function(peerJid, id) {
var resourceJid = Strophe.getResourceFromJid(peerJid);
var contact = $('#contactlist>ul>li[id="' + resourceJid + '"]');
if (!contact || contact.length <= 0)
- ContactList.addContact(peerJid);
+ ContactList.addContact(peerJid,id);
};
/**
* Adds a contact for the given peer jid.
*
* @param peerJid the jid of the contact to add
+ * @param id the email or userId of the user
*/
- my.addContact = function(peerJid) {
+ my.addContact = function(peerJid, id) {
var resourceJid = Strophe.getResourceFromJid(peerJid);
var contactlist = $('#contactlist>ul');
@@ -51,7 +53,7 @@ var ContactList = (function (my) {
}
};
- newContact.appendChild(createAvatar());
+ newContact.appendChild(createAvatar(id));
newContact.appendChild(createDisplayNameParagraph("Participant"));
var clElement = contactlist.get(0);
@@ -87,145 +89,7 @@ var ContactList = (function (my) {
}
};
- /**
- * Opens / closes the contact list area.
- */
- my.toggleContactList = function () {
- var contactlist = $('#contactlist');
- var videospace = $('#videospace');
-
- var chatSize = (ContactList.isVisible()) ? [0, 0] : Chat.getChatSize();
- var videospaceWidth = window.innerWidth - chatSize[0];
- var videospaceHeight = window.innerHeight;
- var videoSize
- = getVideoSize(null, null, videospaceWidth, videospaceHeight);
- var videoWidth = videoSize[0];
- var videoHeight = videoSize[1];
- var videoPosition = getVideoPosition(videoWidth,
- videoHeight,
- videospaceWidth,
- videospaceHeight);
- var horizontalIndent = videoPosition[0];
- var verticalIndent = videoPosition[1];
-
- var thumbnailSize = VideoLayout.calculateThumbnailSize(videospaceWidth);
- var thumbnailsWidth = thumbnailSize[0];
- var thumbnailsHeight = thumbnailSize[1];
- var completeFunction = ContactList.isVisible() ?
- function() {} : function () { contactlist.trigger('shown');};
-
- videospace.animate({right: chatSize[0],
- width: videospaceWidth,
- height: videospaceHeight},
- {queue: false,
- duration: 500,
- complete: completeFunction
- });
-
- $('#remoteVideos').animate({height: thumbnailsHeight},
- {queue: false,
- duration: 500});
-
- $('#remoteVideos>span').animate({height: thumbnailsHeight,
- width: thumbnailsWidth},
- {queue: false,
- duration: 500,
- complete: function() {
- $(document).trigger(
- "remotevideo.resized",
- [thumbnailsWidth,
- thumbnailsHeight]);
- }});
-
- $('#largeVideoContainer').animate({ width: videospaceWidth,
- height: videospaceHeight},
- {queue: false,
- duration: 500
- });
-
- $('#largeVideo').animate({ width: videoWidth,
- height: videoHeight,
- top: verticalIndent,
- bottom: verticalIndent,
- left: horizontalIndent,
- right: horizontalIndent},
- { queue: false,
- duration: 500
- });
-
- if (ContactList.isVisible()) {
- $("#toast-container").animate({right: '12px'},
- {queue: false,
- duration: 500});
- $('#contactlist').hide("slide", { direction: "right",
- queue: false,
- duration: 500});
- } else {
- // Undock the toolbar when the chat is shown and if we're in a
- // video mode.
- if (VideoLayout.isLargeVideoVisible())
- ToolbarToggler.dockToolbar(false);
-
-
- $("#toast-container").animate({right: '212px'},
- {queue: false,
- duration: 500});
- $('#contactlist').show("slide", { direction: "right",
- queue: false,
- duration: 500});
-
- //stop the glowing of the contact list icon
- setVisualNotification(false);
- }
- };
-
- /**
- * Updates the number of participants in the contact list button and sets
- * the glow
- * @param delta indicates whether a new user has joined (1) or someone has
- * left(-1)
- */
- function updateNumberOfParticipants(delta) {
- //when the user is alone we don't show the number of participants
- if(numberOfContacts === 0) {
- $("#numberOfParticipants").text('');
- numberOfContacts += delta;
- } else if(numberOfContacts !== 0 && !ContactList.isVisible()) {
- setVisualNotification(true);
- numberOfContacts += delta;
- $("#numberOfParticipants").text(numberOfContacts);
- }
- };
-
- /**
- * Creates the avatar element.
- *
- * @return the newly created avatar element
- */
- function createAvatar() {
- var avatar = document.createElement('i');
- avatar.className = "icon-avatar avatar";
-
- return avatar;
- }
-
- /**
- * Creates the display name paragraph.
- *
- * @param displayName the display name to set
- */
- function createDisplayNameParagraph(displayName) {
- var p = document.createElement('p');
- p.innerText = displayName;
-
- return p;
- }
-
- /**
- * Shows/hides a visual notification, indicating that a new user has joined
- * the conference.
- */
- function setVisualNotification(show, stopGlowingIn) {
+ my.setVisualNotification = function(show, stopGlowingIn) {
var glower = $('#contactListButton');
function stopGlowing() {
window.clearInterval(notificationInterval);
@@ -247,8 +111,52 @@ var ContactList = (function (my) {
if(stopGlowingIn) {
setTimeout(stopGlowing, stopGlowingIn);
}
+ };
+
+ /**
+ * Updates the number of participants in the contact list button and sets
+ * the glow
+ * @param delta indicates whether a new user has joined (1) or someone has
+ * left(-1)
+ */
+ function updateNumberOfParticipants(delta) {
+ //when the user is alone we don't show the number of participants
+ if(numberOfContacts === 0) {
+ $("#numberOfParticipants").text('');
+ numberOfContacts += delta;
+ } else if(numberOfContacts !== 0 && !ContactList.isVisible()) {
+ ContactList.setVisualNotification(true);
+ numberOfContacts += delta;
+ $("#numberOfParticipants").text(numberOfContacts);
+ }
}
+ /**
+ * Creates the avatar element.
+ *
+ * @return the newly created avatar element
+ */
+ function createAvatar(id) {
+ var avatar = document.createElement('img');
+ avatar.className = "icon-avatar avatar";
+ avatar.src = "https://www.gravatar.com/avatar/" + id + "?d=retro&size=30";
+
+ return avatar;
+ }
+
+ /**
+ * Creates the display name paragraph.
+ *
+ * @param displayName the display name to set
+ */
+ function createDisplayNameParagraph(displayName) {
+ var p = document.createElement('p');
+ p.innerText = displayName;
+
+ return p;
+ }
+
+
/**
* Indicates that the display name has changed.
*/
diff --git a/css/contact_list.css b/css/contact_list.css
index 335f26e8a..07a682162 100644
--- a/css/contact_list.css
+++ b/css/contact_list.css
@@ -34,6 +34,7 @@
margin-right: 10px;
vertical-align: middle;
font-size: 22pt;
+ border-radius: 20px;
}
#contactlist .clickable {
diff --git a/css/font.css b/css/font.css
index e08b8705d..dbd44a2f7 100644
--- a/css/font.css
+++ b/css/font.css
@@ -112,4 +112,8 @@
.icon-connection:before {
line-height: normal;
content: "\e61a";
+}
+
+.icon-settings:before {
+ content: "\e61b";
}
\ No newline at end of file
diff --git a/css/main.css b/css/main.css
index 9a0a6e54e..4f55b58e8 100644
--- a/css/main.css
+++ b/css/main.css
@@ -13,8 +13,7 @@ html, body{
overflow-x: hidden;
}
-#chatspace,
-#contactlist {
+.right-panel {
display:none;
position:absolute;
float: right;
@@ -38,10 +37,6 @@ html, body{
display:none;
}
-#settingsButton {
- visibility: hidden;
-}
-
.toolbar_span {
display: inline-block;
position: relative;
diff --git a/css/settingsmenu.css b/css/settingsmenu.css
new file mode 100644
index 000000000..46d68f69e
--- /dev/null
+++ b/css/settingsmenu.css
@@ -0,0 +1,45 @@
+#settingsmenu {
+ background: black;
+ color: #00ccff;
+}
+
+#settingsmenu input {
+ margin-top: 10px;
+ margin-left: 10%;
+ width: 80%;
+ font-size: 14px;
+ background: #3a3a3a;
+ border: none;
+ box-shadow: none;
+ color: #a7a7a7;
+}
+
+#settingsmenu .arrow-up {
+ width: 0;
+ height: 0;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-bottom: 5px solid #3a3a3a;
+ position: relative;
+ top: 10px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+#settingsmenu button {
+ width: 36%;
+ left: 32%;
+ padding: 0;
+ margin-top: 10px;
+}
+
+#settingsmenu #avatar {
+ width: 24%;
+ left: 38%;
+ border-radius: 25px;
+ position: relative;
+}
+
+#settingsmenu .icon-settings {
+ padding: 34px;
+}
diff --git a/css/videolayout_default.css b/css/videolayout_default.css
index 1bfddccf2..401c6f69d 100644
--- a/css/videolayout_default.css
+++ b/css/videolayout_default.css
@@ -35,7 +35,9 @@
#remoteVideos .videocontainer {
display: inline-block;
- background-image:url(../images/avatar1.png);
+ background-color: black;
+ background-repeat: no-repeat;
+ background-position: 45;
background-size: contain;
border-radius:8px;
border: 2px solid #212425;
@@ -115,10 +117,6 @@
height: 100%;
}
-.dominantspeaker {
- background: #000 !important;
-}
-
#etherpad,
#presentation {
text-align: center;
@@ -378,3 +376,19 @@
#mixedstream {
display:none !important;
}
+
+#activeSpeakerAvatar {
+ visibility: hidden;
+ width: 100px;
+ height: 100px;
+ margin: auto;
+ position: relative;
+ border-radius: 50px;
+}
+
+.userAvatar {
+ height: 100%;
+ position: absolute;
+ left: 35px;
+ border-radius: 200px;
+}
diff --git a/fonts/jitsi.eot b/fonts/jitsi.eot
index eaed7ee86..d85113241 100644
Binary files a/fonts/jitsi.eot and b/fonts/jitsi.eot differ
diff --git a/fonts/jitsi.svg b/fonts/jitsi.svg
index 007716b1b..19ef9bd0a 100644
--- a/fonts/jitsi.svg
+++ b/fonts/jitsi.svg
@@ -34,4 +34,5 @@