/*******************************************************************************
- * Copyright (c) 2011, 2012 Ericsson
- *
+ * Copyright (c) 2011, 2013 Ericsson
+ *
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Francois Chouinard - Initial API and implementation
* Francois Chouinard - Moved from LTTng to TMF
/**
* Class to handle zooming within histogram windows..
- *
+ *
* @version 1.0
* @author Francois Chouinard
* <p>
// Constructors
// ------------------------------------------------------------------------
- public HistogramZoom(Histogram histogram, Canvas canvas, long start, long end) {
+ /**
+ * Standard constructor.
+ *
+ * @param histogram
+ * The parent histogram object
+ * @param canvas
+ * The canvas
+ * @param start
+ * The start time of the zoom area
+ * @param end
+ * The end time of the zoom area
+ */
+ public HistogramZoom(Histogram histogram, Canvas canvas, long start,
+ long end) {
fHistogram = histogram;
fCanvas = canvas;
fAbsoluteStartTime = start;
/**
* The the full time range of the histogram
- *
+ *
* @param startTime the start time the histogram
* @param endTime the end time of the histogram
*/
* @param duration the duration
*/
public synchronized void setNewRange(long startTime, long duration) {
- if (startTime < fAbsoluteStartTime)
- startTime = fAbsoluteStartTime;
+ long realStart = startTime;
+
+ if (realStart < fAbsoluteStartTime) {
+ realStart = fAbsoluteStartTime;
+ }
- long endTime = startTime + duration;
+ long endTime = realStart + duration;
if (endTime > fAbsoluteEndTime) {
endTime = fAbsoluteEndTime;
- if (endTime - duration > fAbsoluteStartTime)
- startTime = endTime - duration;
- else {
- startTime = fAbsoluteStartTime;
+ if (endTime - duration > fAbsoluteStartTime) {
+ realStart = endTime - duration;
+ } else {
+ realStart = fAbsoluteStartTime;
}
}
- fRangeStartTime = startTime;
- fRangeDuration = endTime - startTime;
+ fRangeStartTime = realStart;
+ fRangeDuration = endTime - realStart;
}
// ------------------------------------------------------------------------
// MouseWheelListener
// ------------------------------------------------------------------------
- private long fMouseTimestamp = 0;
-
@Override
public synchronized void mouseScrolled(MouseEvent event) {
if (fScrollCounter == null) {
fScrollCounter = new MouseScrollCounter(this);
fScrollCounter.start();
- fMouseTimestamp = fHistogram.getTimestamp(event.x);
}
fScrollCounter.incrementMouseScroll(event.count);
}
// Compute the new time range
long requestedRange = (nbClicks > 0) ? Math.round(ZOOM_FACTOR * fRangeDuration) : (long) Math.ceil(fRangeDuration * (1.0 / ZOOM_FACTOR));
- // Perform a proportional zoom wrt the mouse position
- double ratio = ((double) (fMouseTimestamp - fRangeStartTime)) / fRangeDuration;
- long requestedStart = validateStart(fRangeStartTime + (long) ((fRangeDuration - requestedRange) * ratio));
+ // Distribute delta and adjust for boundaries
+ long requestedStart = validateStart(fRangeStartTime + (fRangeDuration - requestedRange) / 2);
long requestedEnd = validateEnd(requestedStart, requestedStart + requestedRange);
requestedStart = validateStart(requestedEnd - requestedRange);
}
private long validateStart(long start) {
- if (start < fAbsoluteStartTime)
- start = fAbsoluteStartTime;
- if (start > fAbsoluteEndTime)
- start = fAbsoluteEndTime - fMinWindowSize;
- return start;
+ long realStart = start;
+
+ if (realStart < fAbsoluteStartTime) {
+ realStart = fAbsoluteStartTime;
+ }
+ if (realStart > fAbsoluteEndTime) {
+ realStart = fAbsoluteEndTime - fMinWindowSize;
+ }
+ return realStart;
}
private long validateEnd(long start, long end) {
- if (end > fAbsoluteEndTime)
- end = fAbsoluteEndTime;
- if (end < start + fMinWindowSize)
- end = start + fMinWindowSize;
- return end;
+ long realEnd = end;
+
+ if (realEnd > fAbsoluteEndTime) {
+ realEnd = fAbsoluteEndTime;
+ }
+ if (realEnd < start + fMinWindowSize) {
+ realEnd = start + fMinWindowSize;
+ }
+ return realEnd;
}
// ------------------------------------------------------------------------
// Constructors
// --------------------------------------------------------------------
- /**
+ /**
* Constructor of inner class to handle consecutive scrolls of mouse wheel.
* @param zoom the histogram zoom reference
*/
// --------------------------------------------------------------------
// Operation
// --------------------------------------------------------------------
-
+
/**
* Increments the number of scroll clicks.
* @param nbScrolls the number to add to the current value
}
}
// Done waiting. Notify the histogram.
- if (!isInterrupted())
+ if (!isInterrupted()) {
fZoom.zoom(nbScrollClick);
+ }
}
}