|
From: <cpm...@us...> - 2011-08-27 23:34:01
|
Revision: 15342
http://pcgen.svn.sourceforge.net/pcgen/?rev=15342&view=rev
Author: cpmeister
Date: 2011-08-27 23:33:54 +0000 (Sat, 27 Aug 2011)
Log Message:
-----------
PortraitPane update:
- adjusted layout of portrait components
- croping rectangle is now constrained to the larger portrait
Modified Paths:
--------------
sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitInfoPane.java
sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitPane.java
sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/ThumbnailPane.java
Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitInfoPane.java
===================================================================
--- sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitInfoPane.java 2011-08-27 10:26:20 UTC (rev 15341)
+++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitInfoPane.java 2011-08-27 23:33:54 UTC (rev 15342)
@@ -23,8 +23,10 @@
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Rectangle;
+import java.awt.image.BufferedImage;
import java.util.Hashtable;
import javax.swing.Box;
+import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
@@ -48,7 +50,7 @@
public PortraitInfoPane()
{
- super(new FlowLayout());
+ super(new FlowLayout(FlowLayout.LEFT, 15, 15));
this.tnPane = new ThumbnailPane();
this.portraitPane = new PortraitPane(tnPane);
this.loadButton = new JButton();
@@ -59,27 +61,58 @@
private void initComponents()
{
Box box = Box.createVerticalBox();
- box.add(new JLabel("Large Character Portrait"));
+ {
+ Box hbox = Box.createHorizontalBox();
+ hbox.add(Box.createHorizontalGlue());
+ hbox.add(new JLabel("Large Character Portrait"));
+ hbox.add(Box.createHorizontalGlue());
+ box.add(hbox);
+ }
+ box.add(Box.createVerticalStrut(10));
box.add(portraitPane);
+ box.add(Box.createVerticalStrut(10));
{
Box hbox = Box.createHorizontalBox();
+ loadButton.setText("Load Portrait");
hbox.add(loadButton);
+ hbox.add(Box.createHorizontalStrut(10));
+ clearButton.setText("Clear Portrait");
hbox.add(clearButton);
box.add(hbox);
}
add(box);
box = Box.createVerticalBox();
- box.add(new JLabel("Thumbnail Character Portrait"));
- box.add(tnPane);
+ box.add(Box.createVerticalGlue());
+ {
+ Box hbox = Box.createHorizontalBox();
+ hbox.add(Box.createHorizontalGlue());
+ hbox.add(new JLabel("Thumbnail Character Portrait"));
+ hbox.add(Box.createHorizontalGlue());
+ box.add(hbox);
+ }
+ box.add(Box.createVerticalStrut(10));
+ {
+ Box hbox = Box.createHorizontalBox();
+ hbox.add(Box.createHorizontalGlue());
+ hbox.add(tnPane);
+ hbox.add(Box.createHorizontalGlue());
+ box.add(hbox);
+ }
+ box.add(Box.createVerticalGlue());
add(box);
}
public Hashtable<Object, Object> createModels(CharacterFacade character)
{
Hashtable<Object, Object> state = new Hashtable<Object, Object>();
- state.put(Image.class, Icons.DefaultPortrait.getImageIcon().getImage());
- state.put(Rectangle.class, new Rectangle(0, 0, 100, 100));
+ ImageIcon defaultPortrait = Icons.DefaultPortrait.getImageIcon();
+ BufferedImage bufImage = new BufferedImage(defaultPortrait.getIconWidth(),
+ defaultPortrait.getIconHeight(),
+ BufferedImage.TYPE_INT_ARGB);
+ defaultPortrait.paintIcon(this, bufImage.createGraphics(), 0, 0);
+ state.put(BufferedImage.class, bufImage);
+ state.put(Rectangle.class, new Rectangle(1, 1, 100, 100));
//TODO: finish
return state;
//throw new UnsupportedOperationException("Not supported yet.");
@@ -87,7 +120,7 @@
public void restoreModels(Hashtable<?, ?> state)
{
- Image portrait = (Image) state.get(Image.class);
+ BufferedImage portrait = (BufferedImage) state.get(BufferedImage.class);
Rectangle cropRect = (Rectangle) state.get(Rectangle.class);
portraitPane.setPortraitImage(portrait);
portraitPane.setCropRectangle(cropRect);
Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitPane.java
===================================================================
--- sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitPane.java 2011-08-27 10:26:20 UTC (rev 15341)
+++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitPane.java 2011-08-27 23:33:54 UTC (rev 15342)
@@ -31,6 +31,7 @@
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
+import javax.swing.BorderFactory;
import javax.swing.JComponent;
/**
@@ -40,19 +41,20 @@
public class PortraitPane extends JComponent
{
- private Image portrait;
+ private BufferedImage portrait;
private Rectangle cropRect;
private final ThumbnailPane thumbnailPane;
public PortraitPane(ThumbnailPane thumbnailPane)
{
this.thumbnailPane = thumbnailPane;
+ this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
MouseHandler handler = new MouseHandler();
addMouseListener(handler);
addMouseMotionListener(handler);
}
- public void setPortraitImage(Image portrait)
+ public void setPortraitImage(BufferedImage portrait)
{
this.portrait = portrait;
repaint();
@@ -67,10 +69,11 @@
@Override
protected void paintComponent(Graphics g)
{
- g.drawImage(portrait, 0, 0, this);
+ Insets insets = getInsets();
+ g.drawImage(portrait, insets.left, insets.top, this);
g.setColor(Color.BLACK);
g.setXORMode(Color.WHITE);
- g.drawRect(cropRect.x, cropRect.y, cropRect.width, cropRect.height);
+ g.drawRect(cropRect.x + insets.left, cropRect.y + insets.top, cropRect.width, cropRect.height);
}
@Override
@@ -86,8 +89,8 @@
}
if (portrait != null)
{
- width += portrait.getWidth(null);
- height += portrait.getHeight(null);
+ width += portrait.getWidth();
+ height += portrait.getHeight();
}
return new Dimension(width, height);
}
@@ -95,7 +98,7 @@
@Override
public Dimension getMaximumSize()
{
- return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
+ return getPreferredSize();
}
private class MouseHandler extends MouseAdapter implements MouseMotionListener
@@ -110,6 +113,10 @@
{
int x = e.getX() - cropOffset.x;
int y = e.getY() - cropOffset.y;
+ x = Math.max(x, 0);
+ x = Math.min(x, portrait.getWidth() - cropRect.width-1);
+ y = Math.max(y, 0);
+ y = Math.min(y, portrait.getHeight() - cropRect.height-1);
cropRect.setLocation(x, y);
repaint();
thumbnailPane.setCropRectangle(cropRect);
Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/ThumbnailPane.java
===================================================================
--- sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/ThumbnailPane.java 2011-08-27 10:26:20 UTC (rev 15341)
+++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/ThumbnailPane.java 2011-08-27 23:33:54 UTC (rev 15342)
@@ -20,6 +20,7 @@
*/
package pcgen.gui2.tabs.bio;
+import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
@@ -28,7 +29,7 @@
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
-import java.awt.image.VolatileImage;
+import javax.swing.BorderFactory;
import javax.swing.JComponent;
/**
@@ -38,37 +39,35 @@
public class ThumbnailPane extends JComponent
{
- private Image portrait;
+ private BufferedImage portrait;
private Rectangle cropRect;
- private BufferedImage bufferedImage;
- private Image cropImage;
public ThumbnailPane()
{
this.setDoubleBuffered(true);
+ this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
}
- public void setPortraitImage(Image portrait)
+ public void setPortraitImage(BufferedImage portrait)
{
this.portrait = portrait;
- bufferedImage = new BufferedImage(portrait.getWidth(this), portrait.getHeight(this), BufferedImage.TYPE_INT_ARGB);
- bufferedImage.createGraphics().drawImage(portrait, 0, 0, this);
- if (cropRect != null)
- {
- cropImage = createImage(new FilteredImageSource(bufferedImage.getSource(),
- new CropImageFilter(cropRect.x, cropRect.y, cropRect.width, cropRect.height)));
- repaint();
- }
+ refreshImage();
}
public void setCropRectangle(Rectangle cropRect)
{
this.cropRect = cropRect;
- cropImage = createImage(new FilteredImageSource(bufferedImage.getSource(),
- new CropImageFilter(cropRect.x, cropRect.y, cropRect.width, cropRect.height)));
- repaint();
+ refreshImage();
}
+ private void refreshImage()
+ {
+ if (cropRect != null)
+ {
+ repaint();
+ }
+ }
+
@Override
public Dimension getPreferredSize()
{
@@ -89,9 +88,23 @@
}
@Override
+ public Dimension getMaximumSize()
+ {
+ return getPreferredSize();
+ }
+
+ @Override
+ public Dimension getMinimumSize()
+ {
+ return getPreferredSize();
+ }
+
+ @Override
protected void paintComponent(Graphics g)
{
- g.drawImage(cropImage, 0, 0, this);
+ Insets insets = getInsets();
+ g.drawImage(portrait.getSubimage(cropRect.x, cropRect.y, cropRect.width, cropRect.height),
+ insets.left, insets.top, this);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|