aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chat/ChatContact.java18
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chat/ChatContactPanel.java7
-rw-r--r--src/net/java/sip/communicator/plugin/contactinfo/ContactInfoDetailsPanel.java27
-rw-r--r--src/net/java/sip/communicator/util/ImageUtils.java49
-rw-r--r--src/net/java/sip/communicator/util/util.manifest.mf1
5 files changed, 87 insertions, 15 deletions
diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatContact.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatContact.java
index 438f2e9..fbd3d78 100644
--- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatContact.java
+++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatContact.java
@@ -28,9 +28,9 @@ public class ChatContact
{
private Logger logger = Logger.getLogger(ChatContact.class);
- private static final int AVATAR_ICON_HEIGHT = 45;
+ static final int AVATAR_ICON_HEIGHT = 45;
- private static final int AVATAR_ICON_WIDTH = 40;
+ static final int AVATAR_ICON_WIDTH = 40;
private String name;
@@ -219,15 +219,11 @@ public class ChatContact
if(contactImage != null)
{
Image image = ImageLoader.getBytesInImage(contactImage);
-
- if( image.getHeight(null) > AVATAR_ICON_HEIGHT
- || image.getWidth(null) > AVATAR_ICON_WIDTH)
- return new ImageIcon(image.getScaledInstance(
- AVATAR_ICON_WIDTH,
- AVATAR_ICON_HEIGHT,
- Image.SCALE_SMOOTH));
- else
- return new ImageIcon(image);
+ return ImageUtils.scaleIconWithinBounds(
+ new ImageIcon(image),
+ AVATAR_ICON_WIDTH,
+ AVATAR_ICON_HEIGHT
+ );
}
else
return null;
diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatContactPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatContactPanel.java
index 5fb8386..b70fec7 100644
--- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatContactPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatContactPanel.java
@@ -98,6 +98,13 @@ public class ChatContactPanel
this.buttonsPanel.setOpaque(false);
this.personPhotoPanel.setOpaque(false);
+ this.personPhotoLabel.setVerticalAlignment(JLabel.CENTER);
+ this.personPhotoLabel.setHorizontalAlignment(JLabel.CENTER);
+ this.personPhotoLabel.setPreferredSize(new Dimension(
+ ChatContact.AVATAR_ICON_WIDTH,
+ ChatContact.AVATAR_ICON_HEIGHT)
+ );
+
this.personNameLabel.setText(chatContact.getName());
this.personNameLabel.setFont(this.getFont().deriveFont(Font.BOLD));
this.personNameLabel.setIcon(chatContact.getStatusIcon());
diff --git a/src/net/java/sip/communicator/plugin/contactinfo/ContactInfoDetailsPanel.java b/src/net/java/sip/communicator/plugin/contactinfo/ContactInfoDetailsPanel.java
index 2b7252e..41b28f8 100644
--- a/src/net/java/sip/communicator/plugin/contactinfo/ContactInfoDetailsPanel.java
+++ b/src/net/java/sip/communicator/plugin/contactinfo/ContactInfoDetailsPanel.java
@@ -15,6 +15,7 @@ import java.text.DateFormat;
import javax.swing.*;
import javax.swing.event.*;
+import net.java.sip.communicator.util.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.ServerStoredDetails.*;
@@ -45,6 +46,16 @@ public class ContactInfoDetailsPanel
private Contact contact;
/**
+ * The default width of hte avater area.
+ */
+ private final int AVATAR_AREA_WIDTH = 105;
+
+ /**
+ * The default height of hte avater area.
+ */
+ private final int AVATAR_AREA_HEIGHT = 130;
+
+ /**
* Construct a tabbed pane that will have one tab with a summary of info for
* the selected subcontact and one tab for all of the extended details.
*/
@@ -171,11 +182,19 @@ public class ContactInfoDetailsPanel
else
avatarImage = Resources.getImage("contactInfoDefaultPersonIcon");
- ImageIcon scaledImage =
- new ImageIcon(avatarImage.getImage().getScaledInstance(105, 130,
- Image.SCALE_SMOOTH));
+ ImageIcon scaledImage = ImageUtils.scaleIconWithinBounds(
+ avatarImage,
+ AVATAR_AREA_WIDTH,
+ AVATAR_AREA_HEIGHT
+ );
JLabel label = new JLabel(scaledImage);
+ label.setVerticalAlignment(JLabel.CENTER);
+ label.setHorizontalAlignment(JLabel.CENTER);
+ label.setPreferredSize(new Dimension(
+ AVATAR_AREA_WIDTH,
+ AVATAR_AREA_HEIGHT)
+ );
avatarPanel.add(label);
summaryPanel.add(avatarPanel, BorderLayout.WEST);
@@ -487,4 +506,4 @@ public class ContactInfoDetailsPanel
return mainExtendedPanel;
}
-} \ No newline at end of file
+}
diff --git a/src/net/java/sip/communicator/util/ImageUtils.java b/src/net/java/sip/communicator/util/ImageUtils.java
new file mode 100644
index 0000000..91af9c3
--- /dev/null
+++ b/src/net/java/sip/communicator/util/ImageUtils.java
@@ -0,0 +1,49 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package net.java.sip.communicator.util;
+
+import java.awt.*;
+import javax.swing.*;
+
+/**
+ * Utility methods for image manipulation.
+ *
+ * @author Sébastien Mazy
+ */
+public class ImageUtils
+{
+ /**
+ * Returns a scaled image fitting within the given bounds
+ * while keeping the aspect ratio.
+ *
+ * @param image the image to scale
+ * @param width maximum width of the scaled image
+ * @param height maximum height of the scaled image
+ * @return the scaled image
+ */
+ public static ImageIcon
+ scaleIconWithinBounds(ImageIcon image, int width, int height)
+ {
+ ImageIcon scaledImage;
+ int scaleHint = Image.SCALE_SMOOTH;
+ double originalRatio =
+ (double) image.getIconWidth() / image.getIconHeight();
+ double areaRatio = (double) width / height;
+
+ if(originalRatio > areaRatio)
+ {
+ scaledImage = new ImageIcon(image.getImage().
+ getScaledInstance(width, -1,scaleHint));
+ }
+ else
+ {
+ scaledImage = new ImageIcon(image.getImage().
+ getScaledInstance(-1, height, scaleHint));
+ }
+ return scaledImage;
+ }
+}
diff --git a/src/net/java/sip/communicator/util/util.manifest.mf b/src/net/java/sip/communicator/util/util.manifest.mf
index 0d64b9a..a920c2a 100644
--- a/src/net/java/sip/communicator/util/util.manifest.mf
+++ b/src/net/java/sip/communicator/util/util.manifest.mf
@@ -13,6 +13,7 @@ Import-Package: org.osgi.framework,
javax.xml.transform.stream,
javax.naming,
javax.naming.directory,
+ javax.swing,
javax.swing.text.html,
javax.swing.text,
net.java.sip.communicator.util.xml,