- // Copy scaled, smoothed image onto the screen
- inG.drawImage(_thumbnail, 0, 0, _thumbnail.getWidth(), _thumbnail.getHeight(), null);
+ // Copy scaled, smoothed (and rotated) image into scaled
+ int usableWidth = getParent().getWidth()-10;
+ int usableHeight = (_inPanel?usableWidth:getHeight()-10);
+ Image scaled = ImageUtils.rotateImage(_thumbnail, usableWidth, usableHeight, _photo.getRotationDegrees());
+ int scaleWidth = scaled.getWidth(null);
+ int scaleHeight = scaled.getHeight(null);
+ // Draw scaled / rotated image to component
+ int horizOffset = (getWidth() - scaleWidth) / 2;
+ int vertOffset = (getHeight() - scaleHeight) / 2;
+ inG.drawImage(scaled, horizOffset, vertOffset, scaleWidth, scaleHeight, null);
+ // Special resize behaviour when locked inside details panel
+ if (_inPanel && (getHeight() < getWidth() || getHeight() > usableWidth))
+ {
+ Dimension newsize = new Dimension(usableWidth, usableWidth);
+ setPreferredSize(newsize);
+ setSize(newsize);
+ invalidate();
+ // Schedule a relayout because the size has changed
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ try {Thread.sleep(200);} catch (InterruptedException e) {}
+ getParent().getParent().getParent().validate();
+ }
+ });
+ }