|
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