Improves videobridge interface to show participants with no video as

thumbnails. Adds new security icons and improves conference color codes.
cusax-fix
yanas 13 years ago
parent b63af670fa
commit a5b2b851c5

@ -179,13 +179,13 @@ service.gui.ERROR_FOREGROUND=CC0000
service.gui.CHAT_LINK_COLOR=4A9BDB
# Conference call peer title panel background color.
service.gui.CALL_PEER_NAME_BACKGROUND=A6D6FF
service.gui.CALL_PEER_NAME_BACKGROUND=2f2f2f
# Conference call member title panel background color.
service.gui.CALL_MEMBER_NAME_BACKGROUND=BDFFA3
service.gui.CALL_MEMBER_NAME_BACKGROUND=2f2f2f
# Conference call local user title panel background color.
service.gui.CALL_LOCAL_USER_BACKGROUND=A6D6FF
service.gui.CALL_LOCAL_USER_BACKGROUND=006891
# The background used in opaque Mac panels.
service.gui.MAC_PANEL_BACKGROUND=f0f0f0

@ -107,6 +107,7 @@ service.gui.icons.SEARCH_SEPARATOR=resources/images/impl/gui/common/searchSepara
service.gui.icons.CERTIFICATE_WARNING=resources/images/impl/gui/common/certificateWarning.png
service.gui.icons.CONFERENCE_CALL=resources/images/impl/gui/common/conferenceCall.png
service.gui.icons.VIDEO_BRIDGE=resources/images/impl/gui/common/videoBridge.png
service.gui.icons.CONFERENCE_VIDEO_INDICATOR=resources/images/impl/gui/common/conferenceVideoIndicator.png
# Status icons
service.gui.statusicons.USER_ONLINE_ICON=resources/images/impl/gui/common/statusicons/online.png
@ -204,6 +205,7 @@ service.gui.buttons.SHOW_LOCAL_VIDEO_BUTTON_PRESSED=resources/images/impl/gui/bu
service.gui.buttons.TRANSFER_CALL_BUTTON=resources/images/impl/gui/buttons/transferCallButton.png
service.gui.buttons.SECURE_BUTTON_ON=resources/images/impl/gui/buttons/secureOn.png
service.gui.buttons.SECURE_BUTTON_OFF=resources/images/impl/gui/buttons/secureOff.png
service.gui.buttons.SECURE_BUTTON_PENDING=resources/images/impl/gui/buttons/securePending.png
service.gui.buttons.SECURE_VIDEO_ON=resources/images/impl/gui/buttons/secureVideoOn.png
service.gui.buttons.SECURE_VIDEO_OFF=resources/images/impl/gui/buttons/secureVideoOff.png
service.gui.buttons.SECURE_AUDIO_ON=resources/images/impl/gui/buttons/secureAudioOn.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 908 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -46,7 +46,7 @@ public void paintComponent(Graphics g)
AntialiasingManager.activateAntialiasing(g);
g.setColor(Color.DARK_GRAY);
g.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 20, 20);
g.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
}
finally
{

@ -59,7 +59,7 @@ public void paintComponent(Graphics g)
AntialiasingManager.activateAntialiasing(g);
g.setColor(backgroundColor);
g.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 20, 20);
g.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
}
finally
{

@ -1509,7 +1509,7 @@ public void paintComponent(Graphics g)
AntialiasingManager.activateAntialiasing(g);
g.setColor(Color.DARK_GRAY);
g.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 20, 20);
g.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
}
finally
{

@ -12,7 +12,6 @@
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.util.skin.*;
/**
@ -42,30 +41,9 @@ public class SecurityStatusLabel
private static Icon securityOnIcon;
/**
* The background used to indicate that the call is secured.
* The icon used for the security pending state.
*/
private final static Color securityOnBackground
= new Color(GuiActivator.getResources()
.getColor("service.gui.SECURITY_ON"));
/**
* The background used to indicate that the call is not secured.
*/
private final static Color securityOffBackground
= new Color(GuiActivator.getResources()
.getColor("service.gui.SECURITY_OFF"));
/**
* The background used to indicate that the call is not secured.
*/
private final static Color goingSecureBackground
= new Color(GuiActivator.getResources()
.getColor("service.gui.GOING_SECURE"));
/**
* Indicates security status.
*/
private boolean isSecure = false;
private static Icon securityPendingIcon;
/**
* Creates an instance of <tt>SecurityStatusLabel</tt> by specifying the
@ -82,48 +60,12 @@ public SecurityStatusLabel()
setHorizontalTextPosition(JLabel.LEFT);
}
/**
* Paints a custom background to better indicate security state.
*
* @param g the <tt>Graphics</tt> object
*/
public void paintComponent(Graphics g)
{
g = g.create();
try
{
AntialiasingManager.activateAntialiasing(g);
g.setColor(getBackground());
if (getIcon() != null)
{
if (isSecure)
g.fillRoundRect(
0, 0, this.getWidth(), this.getHeight(), 20, 20);
else
g.fillRoundRect(
0, 0, this.getWidth(), this.getHeight(), 20, 20);
}
g.setColor(getForeground());
super.paintComponent(g);
}
finally
{
g.dispose();
}
}
/**
* Sets the audio security on or off.
*/
public void setSecurityOn()
{
isSecure = true;
setIcon(securityOnIcon);
setBackground(securityOnBackground);
setToolTipText(GuiActivator.getResources().getI18NString(
"service.gui.security.CALL_SECURED_TOOLTIP"));
}
@ -133,9 +75,7 @@ public void setSecurityOn()
*/
public void setSecurityOff()
{
isSecure = false;
setIcon(securityOffIcon);
setBackground(securityOffBackground);
this.setToolTipText(GuiActivator.getResources().getI18NString(
"service.gui.security.CALL_NOT_SECURED_TOOLTIP"));
}
@ -145,9 +85,7 @@ public void setSecurityOff()
*/
public void setSecurityPending()
{
isSecure = false;
setIcon(securityOnIcon);
setBackground(goingSecureBackground);
setIcon(securityPendingIcon);
this.setToolTipText(GuiActivator.getResources().getI18NString(
"service.gui.security.CALL_SECURED_COMPARE_TOOLTIP"));
}
@ -173,5 +111,8 @@ public void loadSkin()
securityOnIcon = new ImageIcon(ImageLoader
.getImage(ImageLoader.SECURE_BUTTON_ON));
securityPendingIcon = new ImageIcon(ImageLoader
.getImage(ImageLoader.SECURE_BUTTON_PENDING));
}
}

@ -115,15 +115,7 @@ public AudioConferenceCallPanel(
* because the video may already be flowing between the CallPeers.
* Otherwise, the videos of the remote CallPeers will not be shown.
*/
GridBagConstraints scrollPaneGridBagConstraints
= new GridBagConstraints();
scrollPaneGridBagConstraints.fill = GridBagConstraints.BOTH;
scrollPaneGridBagConstraints.gridx = 1;
scrollPaneGridBagConstraints.gridy = 0;
scrollPaneGridBagConstraints.weightx = 1;
scrollPaneGridBagConstraints.weighty = 1;
add(scrollPane, scrollPaneGridBagConstraints);
add(scrollPane, BorderLayout.CENTER);
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;

@ -13,7 +13,6 @@
import javax.swing.*;
import net.java.sip.communicator.impl.gui.main.call.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
@ -24,7 +23,7 @@
* @author Lyubomir Marinov
*/
public abstract class BasicConferenceCallPanel
extends TransparentPanel
extends JPanel
implements SwingCallRenderer
{
/**
@ -101,7 +100,7 @@ protected BasicConferenceCallPanel(
CallPanel callPanel,
CallConference callConference)
{
super(new GridBagLayout());
super(new BorderLayout());
this.callPanel = callPanel;
this.callConference = callConference;

@ -46,7 +46,7 @@ public abstract class BasicConferenceParticipantPanel<T>
/**
* Background color.
*/
private static final Color bgColor = new Color(255, 255, 255);
private static final Color bgColor = new Color(110, 110, 110);
/**
* Serial version UID.
@ -139,6 +139,7 @@ public abstract class BasicConferenceParticipantPanel<T>
*/
private SoundLevelIndicator soundIndicator;
/**
* The status bar of the participant panel.
*/
@ -156,6 +157,16 @@ public abstract class BasicConferenceParticipantPanel<T>
*/
private final JPanel titleBar = new CallTitlePanel(new GridBagLayout());
/**
* Indicates if video indicator is enabled for this participant.
*/
private boolean isVideoIndicatorEnabled = false;
/**
* The image of the participant
*/
private Image participantImage;
/**
* Initializes a new <tt>BasicConferenceParticipantPanel</tt> instance which
* is to depict a specific conference participant.
@ -198,6 +209,8 @@ public void addToNameBar(Component component)
{
nameBarConstraints.gridx = nameBarConstraints.gridx + 1;
nameBarConstraints.weightx = 0f;
nameBarConstraints.insets = new Insets(0, 5, 0, 0);
this.nameBar.add(component, nameBarConstraints);
}
@ -266,11 +279,13 @@ private void initAudioConferencePanel()
SoundLevelChangeEvent.MIN_LEVEL,
SoundLevelChangeEvent.MAX_LEVEL);
soundIndicator.setPreferredSize(new Dimension(80, 30));
securityStatusLabel = new SecurityStatusLabel();
securityStatusLabel.setSecurityOff();
this.setLayout(new GridBagLayout());
this.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7));
this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
this.initTitleBar();
@ -298,26 +313,17 @@ private void initAudioConferencePanel()
*/
private void initPeerDetailsPanel()
{
ImageIcon avatarIcon
= new ImageIcon(
ImageLoader
.getImage(ImageLoader.DEFAULT_USER_PHOTO)
.getScaledInstance(
AVATAR_WIDTH,
AVATAR_HEIGHT,
Image.SCALE_SMOOTH));
peerDetailsPanel.setLayout(new GridBagLayout());
peerDetailsPanel.setBackground(new Color(255, 255, 255));
imageLabel.setIcon(avatarIcon);
setParticipantIcon(null, false);
constraints.fill = GridBagConstraints.NONE;
constraints.gridx = 0;
constraints.gridy = 0;
constraints.weightx = 0;
constraints.weighty = 0;
constraints.insets = new Insets(5, 10, 5, 0);
constraints.insets = new Insets(5, 8, 5, 0);
peerDetailsPanel.add(imageLabel, constraints);
@ -326,7 +332,7 @@ private void initPeerDetailsPanel()
constraints.gridy = 0;
constraints.weightx = 1f;
constraints.weighty = 0;
constraints.insets = new Insets(5, 20, 5, 20);
constraints.insets = new Insets(5, 10, 5, 10);
rightDetailsPanel.add(soundIndicator);
peerDetailsPanel.add(rightDetailsPanel, constraints);
@ -339,6 +345,7 @@ private void initTitleBar()
{
titleBar.setBorder(BorderFactory.createEmptyBorder(2, 8, 2, 8));
nameLabel.setForeground(Color.WHITE);
nameBar.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
nameBarConstraints.gridx = 0;
nameBarConstraints.gridy = 0;
@ -346,6 +353,7 @@ private void initTitleBar()
nameBar.add(nameLabel, nameBarConstraints);
statusBar.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
callStatusLabel.setForeground(Color.WHITE);
statusBarConstraints.gridx = 0;
statusBarConstraints.gridy = 0;
statusBarConstraints.weightx = 1f;
@ -398,15 +406,7 @@ public void loadSkin()
{
if(!iconChanged)
{
ImageIcon avatarIcon
= new ImageIcon(
ImageLoader.getImage(ImageLoader.DEFAULT_USER_PHOTO)
.getScaledInstance(
AVATAR_WIDTH,
AVATAR_HEIGHT,
Image.SCALE_SMOOTH));
imageLabel.setIcon(avatarIcon);
setParticipantIcon(null, false);
}
securityStatusLabel.setIcon(
@ -435,7 +435,7 @@ public void paintComponent(Graphics g)
g.setColor(bgColor);
g.fillRoundRect(
5, 5, this.getWidth() - 10, this.getHeight() - 10, 20, 20);
5, 5, this.getWidth() - 10, this.getHeight() - 10, 10, 10);
}
finally
{
@ -555,15 +555,7 @@ public void run()
*/
public void setParticipantImage(byte[] image)
{
ImageIcon icon = ImageUtils.getScaledRoundedIcon(image,
AVATAR_WIDTH,
AVATAR_HEIGHT);
if (icon != null)
{
iconChanged = true;
imageLabel.setIcon(icon);
}
setParticipantIcon(image, true);
}
/**
@ -614,4 +606,67 @@ public void updateSoundBar(int soundLevel)
if (soundIndicator != null)
soundIndicator.updateSoundLevel(soundLevel);
}
/**
* Enables or disabled video indicator in this conference participant
* panel.
*
* @param enable <tt>true</tt> to enable video indicator, <tt>false</tt> -
* otherwise
*/
public void enableVideoIndicator(boolean enable)
{
isVideoIndicatorEnabled = enable;
setParticipantIcon(null, true);
}
/**
* Sets the participant icon.
*
* @param image the image to set as an icon. If null will use the last set
* image or the default one
* @param changed indicates if this is a change of the icon
*/
private void setParticipantIcon(byte[] image, boolean changed)
{
if (image != null && image.length > 0)
participantImage
= ImageUtils.getScaledRoundedIcon( image,
AVATAR_WIDTH,
AVATAR_HEIGHT).getImage();
else if (participantImage == null)
participantImage
= ImageLoader.getImage(ImageLoader.DEFAULT_USER_PHOTO)
.getScaledInstance(
AVATAR_WIDTH,
AVATAR_HEIGHT,
Image.SCALE_SMOOTH);
Image videoIndicatorImage = null;
if (isVideoIndicatorEnabled)
videoIndicatorImage
= ImageLoader.getImage(ImageLoader.CONFERENCE_VIDEO_INDICATOR);
Icon avatarIcon = null;
if (videoIndicatorImage != null && participantImage != null)
avatarIcon = new ImageIcon(ImageLoader.getImage(
participantImage,
videoIndicatorImage,
participantImage.getWidth(null)
- videoIndicatorImage.getWidth(null) + 5,
participantImage.getHeight(null)
- videoIndicatorImage.getHeight(null) + 5));
else if (participantImage != null)
avatarIcon = new ImageIcon(participantImage);
if (avatarIcon != null)
{
imageLabel.setIcon(avatarIcon);
if (changed)
iconChanged = true;
}
}
}

@ -556,6 +556,27 @@ public void setSecurityPanelVisible(boolean visible)
{
}
/**
* Enables or disabled video indicator in this conference participant
* panel.
*
* @param confMember the <tt>ConferenceMember</tt>, which video indicator
* we'd like to update
* @param enable <tt>true</tt> to enable video indicator, <tt>false</tt> -
* otherwise
*/
public void enableVideoIndicator( ConferenceMember confMember,
boolean enable)
{
if (!conferenceMemberPanels.containsKey(confMember))
return;
ConferenceMemberPanel confMemberPanel
= conferenceMemberPanels.get(confMember);
confMemberPanel.enableVideoIndicator(enable);
}
/**
* Implements the listeners which get notified about events related to the
* <tt>CallPeer</tt> depicted by this <tt>ConferenceFocusPanel</tt> and

@ -0,0 +1,101 @@
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.gui.main.call.conference;
import java.awt.*;
import net.java.sip.communicator.impl.gui.main.call.*;
import net.java.sip.communicator.service.gui.call.*;
import net.java.sip.communicator.service.protocol.*;
/**
* The <tt>ThumbnailConferenceCallPanel</tt> is the panel containing all video
* conference participants as thumbnails.
*
* @author Yana Stamcheva
*/
public class ThumbnailConferenceCallPanel
extends AudioConferenceCallPanel
{
/**
* Initializes a new <tt>ThumbnailConferenceCallPanel</tt> instance which is
* to be used by a specific <tt>CallPanel</tt> to depict a specific
* <tt>CallConference</tt>. The new instance will depict both the
* audio-related and the video-related information.
*
* @param callPanel the <tt>CallPanel</tt> which will use the new instance
* to depict the specified <tt>CallConference</tt>.
* @param callConference the <tt>CallConference</tt> to be depicted by the
* new instance
* @param uiVideoHandler the utility which is to aid the new instance in
* dealing with the video-related information
*/
public ThumbnailConferenceCallPanel(CallPanel callPanel,
CallConference callConference,
UIVideoHandler2 uiVideoHandler)
{
super(callPanel, callConference);
setBackground(Color.DARK_GRAY);
}
/**
* Updates the thumbnail of the given <tt>callPeer</tt>.
*
* @param callPeer the <tt>CallPeer</tt>, which thumbnail
* to update
* @param isVideo indicates if the video is enabled for the
* <tt>callPeer</tt>
*/
public void updateThumbnail(CallPeer callPeer, boolean isVideo)
{
CallPeerRenderer peerRenderer = getCallPeerRenderer(callPeer);
if (peerRenderer instanceof ConferencePeerPanel)
{
((ConferencePeerPanel) peerRenderer)
.enableVideoIndicator(isVideo);
}
}
/**
* Updates the thumbnail of the given <tt>conferenceMember</tt>.
*
* @param conferenceMember the <tt>ConferenceMember</tt>, which thumbnail
* to update
* @param isVideo indicates if the video is enabled for the conference
* member
*/
public void updateThumbnail(ConferenceMember conferenceMember,
boolean isVideo)
{
CallPeerRenderer focusRenderer
= getCallPeerRenderer(conferenceMember.getConferenceFocusCallPeer());
if (focusRenderer instanceof ConferenceFocusPanel)
{
((ConferenceFocusPanel) focusRenderer)
.enableVideoIndicator(conferenceMember, isVideo);
}
}
/**
* Updates the local user thumbnail.
*
* @param isVideo indicates if the video is enabled for the local user
*/
public void updateThumbnail(boolean isVideo)
{
CallPeerRenderer peerRenderer = getCallPeerRenderer(null);
if (peerRenderer instanceof ConferencePeerPanel)
{
((ConferencePeerPanel) peerRenderer)
.enableVideoIndicator(isVideo);
}
}
}

@ -80,6 +80,11 @@ public void update(Observable o, Object arg)
*/
private final Set<Component> videos = new HashSet<Component>();
/**
* The thumbnail container.
*/
private final ThumbnailConferenceCallPanel thumbnailContainer;
/**
* Initializes a new <tt>VideoConferenceCallPanel</tt> instance which is to
* be used by a specific <tt>CallPanel</tt> to depict a specific
@ -102,6 +107,11 @@ public VideoConferenceCallPanel(
this.uiVideoHandler = uiVideoHandler;
thumbnailContainer
= new ThumbnailConferenceCallPanel( callPanel,
callConference,
uiVideoHandler);
videoContainer = createVideoContainer();
/*
@ -249,15 +259,13 @@ public void paintComponent(Graphics g)
private VideoContainer createVideoContainer()
{
VideoContainer videoContainer = new VideoContainer(null, true);
GridBagConstraints videoContainerGridBagConstraints
= new GridBagConstraints();
videoContainerGridBagConstraints.fill = GridBagConstraints.BOTH;
videoContainerGridBagConstraints.gridx = 0;
videoContainerGridBagConstraints.gridy = 0;
videoContainerGridBagConstraints.weightx = 1;
videoContainerGridBagConstraints.weighty = 1;
add(videoContainer, videoContainerGridBagConstraints);
JPanel thumbnailPanel = new JPanel(new BorderLayout());
thumbnailPanel.setBackground(Color.DARK_GRAY);
thumbnailPanel.add(thumbnailContainer, BorderLayout.NORTH);
add(thumbnailPanel, BorderLayout.EAST);
add(videoContainer, BorderLayout.CENTER);
return videoContainer;
}
@ -929,6 +937,24 @@ private class ConferenceParticipantContainer
*/
private final VideoContainer videoContainer;
/**
* The <tt>CallPeer</tt> associated with this container, if it has been
* created to represent a <tt>CallPeer</tt>.
*/
private CallPeer callPeer;
/**
* The <tt>conferenceMember</tt> associated with this container, if it
* has been created to represent a <tt>conferenceMember</tt>.
*/
private ConferenceMember conferenceMember;
/**
* Indicates that this container contains information for the local
* user.
*/
private boolean isLocalUser;
/**
* Initializes a new <tt>ConferenceParticipantContainer</tt> instance
* which is to depict the local peer/user.
@ -946,29 +972,37 @@ public ConferenceParticipantContainer(Call call, Component video)
new ConferencePeerPanel(
VideoConferenceCallPanel.this,
call,
true));
true),
null, null, true);
}
public ConferenceParticipantContainer(
CallPeer callPeer,
Component video)
{
this(
createDefaultPhotoPanel(callPeer),
this( createDefaultPhotoPanel(callPeer),
video,
new ConferencePeerPanel(
VideoConferenceCallPanel.this,
callPeer,
true));
true),
callPeer, null, false);
}
private ConferenceParticipantContainer(
Component noVideo,
Component video,
BasicConferenceParticipantPanel<?> toolBar)
BasicConferenceParticipantPanel<?> toolBar,
CallPeer callPeer,
ConferenceMember conferenceMember,
boolean isLocalUser)
{
super(new BorderLayout());
this.callPeer = callPeer;
this.conferenceMember = conferenceMember;
this.isLocalUser = isLocalUser;
videoContainer = new VideoContainer(noVideo, false);
add(videoContainer, BorderLayout.CENTER);
@ -977,7 +1011,11 @@ private ConferenceParticipantContainer(
add(this.toolBar, BorderLayout.SOUTH);
if (video != null)
{
setVideo(video);
}
else
setVisible(false);
}
public ConferenceParticipantContainer(
@ -990,7 +1028,8 @@ public ConferenceParticipantContainer(
new ConferenceMemberPanel(
VideoConferenceCallPanel.this,
conferenceMember,
true));
true),
null, conferenceMember, false);
}
public void dispose()
@ -1319,7 +1358,26 @@ void setVideo(Component video)
this.video = video;
if (this.video != null)
{
setVisible(true);
videoContainer.add(this.video, VideoLayout.CENTER_REMOTE);
}
else
setVisible(false);
// Update thumbnails container according to video status.
if (thumbnailContainer != null)
{
if (conferenceMember != null)
thumbnailContainer
.updateThumbnail(conferenceMember, (video != null));
else if (callPeer != null)
thumbnailContainer
.updateThumbnail(callPeer, (video != null));
else if (isLocalUser)
thumbnailContainer
.updateThumbnail((video != null));
}
}
}
}

@ -757,32 +757,38 @@ public class ImageLoader
/**
* A call-transfer button icon. The icon shown in the CallPeer panel.
*/
public static final ImageID TRANSFER_CALL_BUTTON =
new ImageID("service.gui.buttons.TRANSFER_CALL_BUTTON");
public static final ImageID TRANSFER_CALL_BUTTON
= new ImageID("service.gui.buttons.TRANSFER_CALL_BUTTON");
/**
* The secure button on icon. The icon shown in the CallPeer panel.
*/
public static final ImageID SECURE_BUTTON_ON =
new ImageID("service.gui.buttons.SECURE_BUTTON_ON");
public static final ImageID SECURE_BUTTON_ON
= new ImageID("service.gui.buttons.SECURE_BUTTON_ON");
/**
* The secure button off icon. The icon shown in the CallPeer panel.
*/
public static final ImageID SECURE_BUTTON_OFF =
new ImageID("service.gui.buttons.SECURE_BUTTON_OFF");
public static final ImageID SECURE_BUTTON_OFF
= new ImageID("service.gui.buttons.SECURE_BUTTON_OFF");
/**
* The secure button pending icon.
*/
public static final ImageID SECURE_BUTTON_PENDING
= new ImageID("service.gui.buttons.SECURE_BUTTON_PENDING");
/**
* The conference secure button off icon.
*/
public static final ImageID SECURE_OFF_CONF_CALL =
new ImageID("service.gui.buttons.SECURE_OFF_CONF_CALL");
public static final ImageID SECURE_OFF_CONF_CALL
= new ImageID("service.gui.buttons.SECURE_OFF_CONF_CALL");
/**
* The secure button on icon. The icon shown in the CallPeer panel.
*/
public static final ImageID SECURE_AUDIO_ON =
new ImageID("service.gui.buttons.SECURE_AUDIO_ON");
public static final ImageID SECURE_AUDIO_ON
= new ImageID("service.gui.buttons.SECURE_AUDIO_ON");
/**
* The secure button off icon. The icon shown in the CallPeer panel.
@ -1031,6 +1037,12 @@ public class ImageLoader
public static final ImageID DIAL_PAD_CALL_BUTTON_BG
= new ImageID("service.gui.buttons.DIAL_PAD_CALL_BUTTON_BG");
/**
* The conference video indicator.
*/
public static final ImageID CONFERENCE_VIDEO_INDICATOR
= new ImageID("service.gui.icons.CONFERENCE_VIDEO_INDICATOR");
/*
* =======================================================================
* ------------------------ EDIT TOOLBAR ICONS ---------------------------
@ -1512,9 +1524,17 @@ public static Image getIndexedProtocolImage(
*/
public static Image getImage(Image bgImage, Image topImage, int x, int y)
{
int width = (x + topImage.getWidth(null) > bgImage.getWidth(null))
? x + topImage.getWidth(null)
: bgImage.getWidth(null);
int height = (y + topImage.getHeight(null) > bgImage.getHeight(null))
? y + topImage.getHeight(null)
: bgImage.getHeight(null);
BufferedImage buffImage
= new BufferedImage(bgImage.getWidth(null),
bgImage.getHeight(null),
= new BufferedImage(width,
height,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D) buffImage.getGraphics();

Loading…
Cancel
Save