diff options
author | Siva Velusamy <vsiva@google.com> | 2013-03-04 17:37:06 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-03-04 17:37:07 +0000 |
commit | 4eb04790100558e87b6bf9a9904938bc468d3f35 (patch) | |
tree | 817fd5eec32d24bf5d64eff3c2def7fa62cab1a8 | |
parent | 47ebdeeeb55ba2ae7b65d6c684b9ff75e8c3dc09 (diff) | |
parent | 946dd412da871ad88c102faa9bc0254ae7a26846 (diff) | |
download | sdk-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.java | 41 | ||||
-rw-r--r-- | draw9patch/src/main/java/com/android/draw9patch/ui/ImageViewer.java | 30 |
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(); |