diff options
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, |