QmlProfiler: Use Flickable's pixelAligned property

This is much cleaner than manually casting contentX and contentWidth
to int. Also, it actually forwards the int-aligned dimensions to the
TimelineRenderer.

Change-Id: I7dad8eeabf1f3b70c5e725a82a2926b3db6f1b16
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
This commit is contained in:
Ulf Hermann
2014-11-26 16:53:42 +01:00
parent 54f5ef3e58
commit 6b08ff6bc4
3 changed files with 25 additions and 23 deletions

View File

@@ -98,7 +98,6 @@ Rectangle {
function clear() { function clear() {
flick.contentY = 0; flick.contentY = 0;
flick.contentX = 0; flick.contentX = 0;
flick.contentWidth = 0;
timelineView.clearChildren(); timelineView.clearChildren();
rangeDetails.hide(); rangeDetails.hide();
selectionRangeMode = false; selectionRangeMode = false;
@@ -353,9 +352,9 @@ Rectangle {
Flickable { Flickable {
id: flick id: flick
contentHeight: categoryContent.height contentHeight: categoryContent.height
contentWidth: zoomControl.windowDuration * width / Math.max(1, zoomControl.rangeDuration)
flickableDirection: Flickable.HorizontalAndVerticalFlick flickableDirection: Flickable.HorizontalAndVerticalFlick
boundsBehavior: Flickable.StopAtBounds boundsBehavior: Flickable.StopAtBounds
pixelAligned: true
// ScrollView will try to deinteractivate it. We don't want that // ScrollView will try to deinteractivate it. We don't want that
// as the horizontal flickable is interactive, too. We do occasionally // as the horizontal flickable is interactive, too. We do occasionally
@@ -365,22 +364,22 @@ Rectangle {
onStayInteractiveChanged: interactive = stayInteractive onStayInteractiveChanged: interactive = stayInteractive
property bool recursionGuard: false property bool recursionGuard: false
property int intX: contentX
property int intWidth: scroller.width
// Update the zoom control on srolling. // Update the zoom control on srolling.
onIntXChanged: { onContentXChanged: {
if (recursionGuard) if (recursionGuard)
return; return;
recursionGuard = true; recursionGuard = true;
var newStartTime = intX * zoomControl.rangeDuration / intWidth + var newStartTime = contentX * zoomControl.rangeDuration / scroller.width +
zoomControl.windowStart; zoomControl.windowStart;
if (Math.abs(newStartTime - zoomControl.rangeStart) >= 1) { if (isFinite(newStartTime) && Math.abs(newStartTime - zoomControl.rangeStart) >= 1) {
var newEndTime = (intX + intWidth) * zoomControl.rangeDuration / intWidth + var newEndTime = (contentX + scroller.width) * zoomControl.rangeDuration /
zoomControl.windowStart; scroller.width + zoomControl.windowStart;
zoomControl.setRange(newStartTime, newEndTime); if (isFinite(newEndTime))
zoomControl.setRange(newStartTime, newEndTime);
} }
recursionGuard = false; recursionGuard = false;
} }
@@ -389,19 +388,17 @@ Rectangle {
function updateWindow() { function updateWindow() {
if (recursionGuard || zoomControl.rangeDuration <= 0) if (recursionGuard || zoomControl.rangeDuration <= 0)
return; return;
recursionGuard = true; recursionGuard = true;
// This triggers an unwanted automatic change in contentX. We ignore that by var newWidth = zoomControl.windowDuration * scroller.width /
// checking recursionGuard in this function and in updateZoomControl.
flick.contentWidth = zoomControl.windowDuration * intWidth /
zoomControl.rangeDuration; zoomControl.rangeDuration;
if (isFinite(newWidth) && Math.abs(newWidth - contentWidth) >= 1)
contentWidth = newWidth;
var newStartX = (zoomControl.rangeStart - zoomControl.windowStart) * intWidth / var newStartX = (zoomControl.rangeStart - zoomControl.windowStart) * scroller.width /
zoomControl.rangeDuration; zoomControl.rangeDuration;
if (isFinite(newStartX) && Math.abs(newStartX - contentX) >= 1)
if (isFinite(newStartX) && Math.abs(newStartX - flick.contentX) >= 1) contentX = newStartX;
flick.contentX = newStartX;
recursionGuard = false; recursionGuard = false;
} }

View File

@@ -63,11 +63,14 @@ Canvas {
function updateRange() { function updateRange() {
if (recursionGuard) if (recursionGuard)
return; return;
var newStartTime = Math.round(rangeMover.rangeLeft * zoomControl.traceDuration / width) + recursionGuard = true;
var newStartTime = rangeMover.rangeLeft * zoomControl.traceDuration / width +
zoomControl.traceStart; zoomControl.traceStart;
var newEndTime = Math.max(Math.round(rangeMover.rangeRight * zoomControl.traceDuration / var newEndTime = rangeMover.rangeRight * zoomControl.traceDuration / width +
width) + zoomControl.traceStart, newStartTime + 500); zoomControl.traceStart;
zoomControl.setRange(newStartTime, newEndTime); if (isFinite(newStartTime) && isFinite(newEndTime) && newEndTime - newStartTime > 500)
zoomControl.setRange(newStartTime, newEndTime);
recursionGuard = false;
} }
function clamp(val, min, max) { function clamp(val, min, max) {
@@ -78,6 +81,8 @@ Canvas {
Connections { Connections {
target: zoomControl target: zoomControl
onRangeChanged: { onRangeChanged: {
if (recursionGuard)
return;
recursionGuard = true; recursionGuard = true;
var newRangeX = (zoomControl.rangeStart - zoomControl.traceStart) * width / var newRangeX = (zoomControl.rangeStart - zoomControl.traceStart) * width /
zoomControl.traceDuration; zoomControl.traceDuration;

View File

@@ -51,7 +51,7 @@ RangeMover {
target: zoomControl target: zoomControl
onRangeChanged: { onRangeChanged: {
var oldTimePerPixel = selectionRange.viewTimePerPixel; var oldTimePerPixel = selectionRange.viewTimePerPixel;
selectionRange.viewTimePerPixel = zoomControl.rangeDuration / flick.intWidth; selectionRange.viewTimePerPixel = zoomControl.rangeDuration / scroller.width;
if (creationState === 3 && oldTimePerPixel != selectionRange.viewTimePerPixel) { if (creationState === 3 && oldTimePerPixel != selectionRange.viewTimePerPixel) {
var newWidth = rangeWidth * oldTimePerPixel / viewTimePerPixel; var newWidth = rangeWidth * oldTimePerPixel / viewTimePerPixel;
rangeLeft = rangeLeft * oldTimePerPixel / viewTimePerPixel; rangeLeft = rangeLeft * oldTimePerPixel / viewTimePerPixel;