aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSiva Velusamy <vsiva@google.com>2013-03-04 17:37:06 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2013-03-04 17:37:07 +0000
commit4eb04790100558e87b6bf9a9904938bc468d3f35 (patch)
tree817fd5eec32d24bf5d64eff3c2def7fa62cab1a8
parent47ebdeeeb55ba2ae7b65d6c684b9ff75e8c3dc09 (diff)
parent946dd412da871ad88c102faa9bc0254ae7a26846 (diff)
downloadsdk-4eb04790100558e87b6bf9a9904938bc468d3f35.zip
sdk-4eb04790100558e87b6bf9a9904938bc468d3f35.tar.gz
sdk-4eb04790100558e87b6bf9a9904938bc468d3f35.tar.bz2
Merge "9patch: Set default zoom level based on image size."
-rw-r--r--draw9patch/src/main/java/com/android/draw9patch/ui/ImageEditorPanel.java41
-rw-r--r--draw9patch/src/main/java/com/android/draw9patch/ui/ImageViewer.java30
2 files changed, 62 insertions, 9 deletions
diff --git a/draw9patch/src/main/java/com/android/draw9patch/ui/ImageEditorPanel.java b/draw9patch/src/main/java/com/android/draw9patch/ui/ImageEditorPanel.java
index 3b4cdcb..3529542 100644
--- a/draw9patch/src/main/java/com/android/draw9patch/ui/ImageEditorPanel.java
+++ b/draw9patch/src/main/java/com/android/draw9patch/ui/ImageEditorPanel.java
@@ -43,6 +43,8 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JSplitPane;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
@@ -59,6 +61,7 @@ public class ImageEditorPanel extends JPanel {
private JLabel yLabel;
private TexturePaint texture;
+ private JSlider zoomSlider;
public ImageEditorPanel(MainFrame mainFrame, BufferedImage image, String name) {
this.image = image;
@@ -76,6 +79,32 @@ public class ImageEditorPanel extends JPanel {
buildStatusPanel();
checkImage();
+
+ addAncestorListener(new AncestorListener() {
+ @Override
+ public void ancestorAdded(AncestorEvent event) {
+ }
+
+ @Override
+ public void ancestorRemoved(AncestorEvent event) {
+ }
+
+ @Override
+ public void ancestorMoved(AncestorEvent event) {
+ // allow the image viewer to set the optimal zoom level and ensure that the
+ // zoom slider's setting is in sync with the image viewer's zoom
+ removeAncestorListener(this);
+ synchronizeImageViewerZoomLevel();
+ }
+ });
+ }
+
+ private void synchronizeImageViewerZoomLevel() {
+ zoomSlider.setValue(viewer.getZoom());
+ }
+
+ public ImageViewer getViewer() {
+ return viewer;
}
private void loadSupport() {
@@ -145,7 +174,7 @@ public class ImageEditorPanel extends JPanel {
GridBagConstraints.LINE_END, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
- JSlider zoomSlider = new JSlider(ImageViewer.MIN_ZOOM, ImageViewer.MAX_ZOOM,
+ zoomSlider = new JSlider(ImageViewer.MIN_ZOOM, ImageViewer.MAX_ZOOM,
ImageViewer.DEFAULT_ZOOM);
zoomSlider.setSnapToTicks(true);
zoomSlider.putClientProperty("JComponent.sizeVariant", "small");
@@ -182,15 +211,15 @@ public class ImageEditorPanel extends JPanel {
GridBagConstraints.LINE_END, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
- zoomSlider = new JSlider(200, 600, (int) (StretchesViewer.DEFAULT_SCALE * 100.0f));
- zoomSlider.setSnapToTicks(true);
- zoomSlider.putClientProperty("JComponent.sizeVariant", "small");
- zoomSlider.addChangeListener(new ChangeListener() {
+ JSlider jSlider = new JSlider(200, 600, (int) (StretchesViewer.DEFAULT_SCALE * 100.0f));
+ jSlider.setSnapToTicks(true);
+ jSlider.putClientProperty("JComponent.sizeVariant", "small");
+ jSlider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
stretchesViewer.setScale(((JSlider) evt.getSource()).getValue() / 100.0f);
}
});
- status.add(zoomSlider, new GridBagConstraints(2, 1, 1, 1, 0.0f, 0.0f,
+ status.add(jSlider, new GridBagConstraints(2, 1, 1, 1, 0.0f, 0.0f,
GridBagConstraints.LINE_START, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
diff --git a/draw9patch/src/main/java/com/android/draw9patch/ui/ImageViewer.java b/draw9patch/src/main/java/com/android/draw9patch/ui/ImageViewer.java
index fca896f..58b20b7 100644
--- a/draw9patch/src/main/java/com/android/draw9patch/ui/ImageViewer.java
+++ b/draw9patch/src/main/java/com/android/draw9patch/ui/ImageViewer.java
@@ -76,6 +76,9 @@ public class ImageViewer extends JComponent {
private static final double STRIPES_SPACING = 6.0;
private static final int STRIPES_ANGLE = 45;
+ /** The fraction of the window size that the 9patch should occupy. */
+ private static final float IDEAL_IMAGE_FRACTION_OF_WINDOW = 0.7f;
+
/** Default zoom level for the 9patch image. */
public static final int DEFAULT_ZOOM = 8;
@@ -193,9 +196,8 @@ public class ImageViewer extends JComponent {
}
@Override
public void ancestorMoved(AncestorEvent event) {
- // Set exactly size.
- setZoom(DEFAULT_ZOOM);
removeAncestorListener(this);
+ setDefaultZoom();
}
@Override
public void ancestorAdded(AncestorEvent event) {
@@ -474,7 +476,6 @@ public class ImageViewer extends JComponent {
patchesChanged();
repaint();
-
isEditMode = false;
editRegion = null;
}
@@ -1100,6 +1101,21 @@ public class ImageViewer extends JComponent {
return size;
}
+ private void setDefaultZoom() {
+ int frameWidth = getWidth(), frameHeight = getHeight();
+ int z = DEFAULT_ZOOM;
+ if (frameWidth > 0 && frameHeight > 0) {
+ float w = (float) image.getWidth() / frameWidth;
+ float h = (float) image.getHeight() / frameHeight;
+
+ float current = Math.max(w, h);
+ float ideal = IDEAL_IMAGE_FRACTION_OF_WINDOW;
+
+ z = clamp(Math.round(ideal / current), 1, MAX_ZOOM);
+ }
+ setZoom(z);
+ }
+
void setZoom(int value) {
zoom = value;
updateSize();
@@ -1110,6 +1126,10 @@ public class ImageViewer extends JComponent {
}
}
+ int getZoom() {
+ return zoom;
+ }
+
private void updateSize() {
int width = image.getWidth();
int height = image.getHeight();
@@ -1158,6 +1178,10 @@ public class ImageViewer extends JComponent {
listeners.add(p);
}
+ public void removePatchUpdateListener(PatchUpdateListener p) {
+ listeners.remove(p);
+ }
+
private void notifyPatchesUpdated() {
for (PatchUpdateListener p: listeners) {
p.patchesUpdated();