Browse Source

Clean up scalebar zoom extremes.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
128ce9d577
3 changed files with 29 additions and 7 deletions
  1. +21
    -4
      Scalebar.H
  2. +3
    -1
      Timeline.H
  3. +5
    -2
      main.C

+ 21
- 4
Scalebar.H View File

@@ -31,11 +31,16 @@ class Scalebar : public Fl_Scrollbar

bool _zoom_changed;

double _zoom_min;
double _zoom_max;

public:

Scalebar ( int X, int Y, int W, int H ) : Fl_Scrollbar ( X, Y, W, H )
{
_zoom = 1.0f;
_zoom_min = 0;
_zoom_max = 256;
_zoom_changed = true;

step( 1 );
@@ -44,6 +49,7 @@ public:
bool zoom_changed ( void ) const { return _zoom_changed; }
double zoom ( void ) const { return _zoom; }
double value ( void ) const { return Fl_Slider::value(); }
void zoom_range ( double zmin, double zmax ) { _zoom_min = zmin; _zoom_max = zmax; }

int
handle ( int m )
@@ -54,6 +60,8 @@ public:
{
int d = Fl::event_dy();

double z = _zoom;

if ( d < 0 )
while ( d++ )
_zoom /= 2;
@@ -61,11 +69,20 @@ public:
while ( d-- )
_zoom *= 2;

_zoom_changed = true;
do_callback();
_zoom_changed = false;
if ( _zoom > _zoom_max )
_zoom = _zoom_max;
else
if ( _zoom < _zoom_min )
_zoom = _zoom_min;

if ( z != _zoom )
{
_zoom_changed = true;
do_callback();
_zoom_changed = false;

slider_size( w() / maximum() );
slider_size( w() / maximum() );
}

return 1;
}


+ 3
- 1
Timeline.H View File

@@ -24,6 +24,8 @@
#include <FL/Fl_Scrollbar.H>
#include <FL/Fl_Widget.H>

#include "Scalebar.H"

#include "Audio_File.H" // just for nframes_t
#include <math.h>

@@ -60,7 +62,7 @@ struct Timeline : public Fl_Group
Fl_Scroll *scroll;
Fl_Pack *tracks;
Fl_Pack *rulers;
Fl_Scrollbar *scrollbar;
Scalebar *scrollbar;

Tempo_Track *tempo_track;
Time_Track *time_track;


+ 5
- 2
main.C View File

@@ -58,8 +58,10 @@ cb_scroll ( Fl_Widget *w, void *v )

if ( sb->zoom_changed() )
{
timeline->fpp = sb->zoom() * 256;
timeline->fpp = max( min( timeline->fpp, 4096.0f ), (float)2 );
// timeline->fpp = sb->zoom() * 256;
timeline->fpp = sb->zoom() * 1;

/* timeline->fpp = max( min( timeline->fpp, 4096.0f ), (float)2 ); */

int maxx = timeline->ts_to_x( timeline->length );
sb->range( 0, maxx );
@@ -121,6 +123,7 @@ main ( int argc, char **argv )

timeline->scrollbar = new Scalebar( 0, 600 - 24, 800, 24 );
timeline->scrollbar->range( 0, 48000 * 2 );
timeline->scrollbar->zoom_range( 2, 8192 );
timeline->scrollbar->type( 1 );
timeline->scrollbar->callback( cb_scroll, 0 );



Loading…
Cancel
Save