|
1 | 1 | package com.tagtraum.perf.gcviewer.view;
|
2 | 2 |
|
3 |
| -import com.tagtraum.perf.gcviewer.model.GCModel; |
4 |
| -import com.tagtraum.perf.gcviewer.util.TimeFormat; |
5 |
| -import com.tagtraum.perf.gcviewer.view.model.GCPreferences; |
6 |
| -import com.tagtraum.perf.gcviewer.view.model.PropertyChangeEventConsts; |
7 |
| -import com.tagtraum.perf.gcviewer.view.renderer.*; |
8 |
| - |
9 |
| -import javax.swing.*; |
10 |
| -import javax.swing.event.ChangeEvent; |
11 |
| -import javax.swing.event.ChangeListener; |
12 |
| -import javax.swing.event.SwingPropertyChangeSupport; |
13 |
| -import java.awt.*; |
14 |
| -import java.awt.event.*; |
| 3 | +import java.awt.Color; |
| 4 | +import java.awt.Component; |
| 5 | +import java.awt.Dimension; |
| 6 | +import java.awt.Font; |
| 7 | +import java.awt.FontMetrics; |
| 8 | +import java.awt.Graphics; |
| 9 | +import java.awt.GridBagConstraints; |
| 10 | +import java.awt.GridBagLayout; |
| 11 | +import java.awt.Rectangle; |
| 12 | +import java.awt.event.ComponentEvent; |
| 13 | +import java.awt.event.ComponentListener; |
| 14 | +import java.awt.event.InputEvent; |
| 15 | +import java.awt.event.MouseAdapter; |
| 16 | +import java.awt.event.MouseEvent; |
15 | 17 | import java.beans.PropertyChangeEvent;
|
16 | 18 | import java.beans.PropertyChangeListener;
|
17 | 19 | import java.text.DateFormat;
|
|
20 | 22 | import java.time.ZonedDateTime;
|
21 | 23 | import java.util.Date;
|
22 | 24 | import java.util.logging.Logger;
|
| 25 | +import javax.swing.JPanel; |
| 26 | +import javax.swing.JPopupMenu; |
| 27 | +import javax.swing.JScrollBar; |
| 28 | +import javax.swing.JScrollPane; |
| 29 | +import javax.swing.JViewport; |
| 30 | +import javax.swing.event.ChangeEvent; |
| 31 | +import javax.swing.event.ChangeListener; |
| 32 | +import javax.swing.event.SwingPropertyChangeSupport; |
| 33 | + |
| 34 | +import com.tagtraum.perf.gcviewer.model.GCModel; |
| 35 | +import com.tagtraum.perf.gcviewer.util.TimeFormat; |
| 36 | +import com.tagtraum.perf.gcviewer.view.model.GCPreferences; |
| 37 | +import com.tagtraum.perf.gcviewer.view.model.PropertyChangeEventConsts; |
| 38 | +import com.tagtraum.perf.gcviewer.view.renderer.ConcurrentGcBegionEndRenderer; |
| 39 | +import com.tagtraum.perf.gcviewer.view.renderer.FullGCLineRenderer; |
| 40 | +import com.tagtraum.perf.gcviewer.view.renderer.GCRectanglesRenderer; |
| 41 | +import com.tagtraum.perf.gcviewer.view.renderer.GCTimesRenderer; |
| 42 | +import com.tagtraum.perf.gcviewer.view.renderer.IncLineRenderer; |
| 43 | +import com.tagtraum.perf.gcviewer.view.renderer.InitialMarkLevelRenderer; |
| 44 | +import com.tagtraum.perf.gcviewer.view.renderer.PolygonChartRenderer; |
| 45 | +import com.tagtraum.perf.gcviewer.view.renderer.TotalHeapRenderer; |
| 46 | +import com.tagtraum.perf.gcviewer.view.renderer.TotalTenuredRenderer; |
| 47 | +import com.tagtraum.perf.gcviewer.view.renderer.TotalYoungRenderer; |
| 48 | +import com.tagtraum.perf.gcviewer.view.renderer.UsedHeapRenderer; |
| 49 | +import com.tagtraum.perf.gcviewer.view.renderer.UsedTenuredRenderer; |
| 50 | +import com.tagtraum.perf.gcviewer.view.renderer.UsedYoungRenderer; |
| 51 | +import com.tagtraum.perf.gcviewer.view.util.OSXSupport; |
23 | 52 |
|
24 | 53 | /**
|
25 | 54 | * Graphical chart of the gc file. It contains the chart and all rulers surrounding it but not
|
@@ -183,21 +212,25 @@ private void maybePopup(MouseEvent e) {
|
183 | 212 | });
|
184 | 213 |
|
185 | 214 |
|
186 |
| - addMouseWheelListener(new MouseWheelListener() { |
187 |
| - @Override |
188 |
| - public void mouseWheelMoved(MouseWheelEvent e) { |
189 |
| - if (((e.getModifiersEx() & InputEvent.META_DOWN_MASK) != 0 && System.getProperty("os.name").contains("Mac OS X"))||(e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0 && !System.getProperty("os.name").contains("Mac OS X")) { |
190 |
| - double pos = (double)(getHorizontalScrollBar().getValue()) / (double)(chart.getWidth()); |
191 |
| - if (e.getWheelRotation() > 0 && getScaleFactor() < 100) { |
192 |
| - setScaleFactor((getScaleFactor()*1.2)); |
193 |
| - } |
194 |
| - if (e.getWheelRotation() < 0 && getScaleFactor() > 0.01) { |
195 |
| - setScaleFactor((getScaleFactor()/1.2)); |
196 |
| - } |
197 |
| - if (e.getWheelRotation() != 0) { |
198 |
| - getHorizontalScrollBar().setValue((int)(pos * (double)(chart.getWidth()))); |
199 |
| - e.consume(); |
200 |
| - } |
| 215 | + addMouseWheelListener(mouseWheelEvent -> { |
| 216 | + if ((!OSXSupport.isOSX() && (mouseWheelEvent.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0) |
| 217 | + || (OSXSupport.isOSX() && (mouseWheelEvent.getModifiersEx() & InputEvent.META_DOWN_MASK) != 0)) { |
| 218 | + |
| 219 | + double pos = (double)(getHorizontalScrollBar().getValue()) / (double)(chart.getWidth()); |
| 220 | + double oldScaleFactor = getScaleFactor(); |
| 221 | + if (mouseWheelEvent.getWheelRotation() > 0 && getScaleFactor() < 100) { |
| 222 | + setScaleFactor((getScaleFactor()*1.2)); |
| 223 | + } |
| 224 | + if (mouseWheelEvent.getWheelRotation() < 0 && getScaleFactor() > 0.001) { |
| 225 | + setScaleFactor((getScaleFactor()/1.2)); |
| 226 | + } |
| 227 | + if (mouseWheelEvent.getWheelRotation() != 0) { |
| 228 | + getHorizontalScrollBar().setValue((int)(pos * (double)(chart.getWidth()))); |
| 229 | + mouseWheelEvent.consume(); |
| 230 | + } |
| 231 | + |
| 232 | + if (Math.abs(getScaleFactor() - oldScaleFactor) > 0.000001) { |
| 233 | + fireScaleFactorChangedEvent(oldScaleFactor, getScaleFactor()); |
201 | 234 | }
|
202 | 235 | }
|
203 | 236 | });
|
@@ -241,9 +274,10 @@ public void setScaleFactor(double scaleFactor) {
|
241 | 274 | this.scaleFactor = scaleFactor;
|
242 | 275 | chart.setSize(chart.getPreferredSize());
|
243 | 276 | chart.resetPolygons();
|
244 |
| - memoryRuler.setSize((int)memoryRuler.getPreferredSize().getWidth(), getViewport().getHeight()); |
245 |
| - pauseRuler.setSize((int)pauseRuler.getPreferredSize().getWidth(), getViewport().getHeight()); |
246 |
| - timestampRuler.setSize((int)(getViewport().getWidth()*getScaleFactor()), (int)timestampRuler.getPreferredSize().getHeight()); |
| 277 | + memoryRuler.setSize((int) memoryRuler.getPreferredSize().getWidth(), getViewport().getHeight()); |
| 278 | + pauseRuler.setSize((int) pauseRuler.getPreferredSize().getWidth(), getViewport().getHeight()); |
| 279 | + timestampRuler.setSize((int) (getViewport().getWidth() * getScaleFactor()), |
| 280 | + (int) timestampRuler.getPreferredSize().getHeight()); |
247 | 281 |
|
248 | 282 | repaint();
|
249 | 283 | }
|
@@ -785,4 +819,10 @@ public void propertyChange(PropertyChangeEvent evt) {
|
785 | 819 | }
|
786 | 820 | }
|
787 | 821 |
|
| 822 | + private void fireScaleFactorChangedEvent(double oldScaleFactor, double scaleFactor) { |
| 823 | + firePropertyChange(PropertyChangeEventConsts.MODELCHART_SCALEFACTOR_CHANGED, |
| 824 | + oldScaleFactor, |
| 825 | + scaleFactor); |
| 826 | + } |
| 827 | + |
788 | 828 | }
|
0 commit comments