diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java index 0da478c..35ccff3 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java @@ -229,6 +229,11 @@ public class WaveformCanvas extends Canvas{ } public void setZoomLevel(int level) { + long tc=cursorPainters.get(0).getTime(); // cursor time + setZoomLevel(level, tc); + } + + public void setZoomLevel(int level, long centerTime) { long oldScaleFactor=scaleFactor; if(level0) { origin.x=(int) -originX; // new cursor time offset relative to left border @@ -557,7 +561,7 @@ public class WaveformCanvas extends Canvas{ return (getClientArea().width+origin.x)*scaleFactor; } - long getOriginTime() { + long getMinVisibleTime() { return origin.x * scaleFactor; } } diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java index f94976a..9b959d4 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java @@ -194,26 +194,60 @@ public class WaveformViewer implements IWaveformViewer { if((e.stateMask&SWT.MODIFIER_MASK&~SWT.SHIFT)!=0) return; //don't react on modifier except shift if(!start.equals(end)){ asyncUpdate(e.widget); + long startTime = waveformCanvas.getTimeForOffset(start.x); + long endTime = waveformCanvas.getTimeForOffset(end.x); + long targetTimeRange = endTime-startTime; + long currentTimeRange = waveformCanvas.getMaxVisibleTime()-waveformCanvas.getMinVisibleTime(); + if(targetTimeRange==0) return; + long relation = currentTimeRange/targetTimeRange; + long i = 1; + int level=0;//relation>0?0:0; + do { + if(relation<0 ) { + if(-relation floorEntry=null, ceilEntry=null; if(o instanceof TrackEntry){ TrackEntry entry = (TrackEntry) o; @@ -1270,13 +1304,6 @@ public class WaveformViewer implements IWaveformViewer { if(percent<-100) percent=-100; if(percent>100) percent=100; int diff = (waveformCanvas.getWidth()*percent)/100; -// ScrollBar sb = waveformCanvas.getHorizontalBar(); -// int x = sb.getSelection(); -// System.out.println("Setting sb to "+ (x+diff)); -// if((x+diff)>0) -// sb.setSelection(x+diff); -// else -// sb.setSelection(0); Point o = waveformCanvas.getOrigin(); waveformCanvas.setOrigin(o.x-diff, o.y); waveformCanvas.redraw();