| @@ -4,10 +4,10 @@ CXXFLAGS=-ggdb | |||
| LIBS=`fltk-config --ldflags` | |||
| # CXXFLAGS=`fltk-config -cxxflags` | |||
| OBJS=Waveform.o main.o | |||
| OBJS=Waveform.o Region.o main.o | |||
| .C.o: | |||
| $(CXX) $(CXXFLAGS) -c $< -o $@ | |||
| test: Waveform.o main.o | |||
| test: $(OBJS) | |||
| $(CXX) $(CXXFLAGS) $(LIBS) $(OBJS) -o $@ | |||
| @@ -0,0 +1,95 @@ | |||
| /*******************************************************************************/ | |||
| /* Copyright (C) 2008 Jonathan Moore Liles */ | |||
| /* */ | |||
| /* This program is free software; you can redistribute it and/or modify it */ | |||
| /* under the terms of the GNU General Public License as published by the */ | |||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||
| /* option) any later version. */ | |||
| /* */ | |||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||
| /* more details. */ | |||
| /* */ | |||
| /* You should have received a copy of the GNU General Public License along */ | |||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| #include "Region.H" | |||
| #include <FL/fl_draw.H> | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Group.H> | |||
| Region::Region ( int X, int Y, int W, int H, const char *L=0 ) : Waveform( X, Y, W, H, L ) | |||
| { | |||
| align( FL_ALIGN_INSIDE | FL_ALIGN_LEFT | FL_ALIGN_BOTTOM ); | |||
| labeltype( FL_SHADOW_LABEL ); | |||
| labelcolor( FL_WHITE ); | |||
| box( FL_PLASTIC_UP_BOX ); | |||
| } | |||
| int | |||
| Region::handle ( int m ) | |||
| { | |||
| if ( Fl_Widget::handle( m ) ) | |||
| return 1; | |||
| switch ( m ) | |||
| { | |||
| case FL_PUSH: | |||
| { | |||
| int X = Fl::event_x(); | |||
| int Y = Fl::event_y(); | |||
| if ( Fl::event_state() & FL_CTRL ) | |||
| { | |||
| switch ( Fl::event_button() ) | |||
| { | |||
| case 1: | |||
| { | |||
| /* trim */ | |||
| int d = X - x(); | |||
| _start += d; | |||
| resize( x() + d, y(), w() - d, h() ); | |||
| redraw(); | |||
| parent()->redraw(); | |||
| break; | |||
| } | |||
| case 3: | |||
| { | |||
| int d = (x() + w()) - X; | |||
| _end -= d; | |||
| resize( x(), y(), w() - d, h() ); | |||
| redraw(); | |||
| parent()->redraw(); | |||
| break; | |||
| } | |||
| default: | |||
| return 0; | |||
| } | |||
| return 1; | |||
| } | |||
| return 0; | |||
| break; | |||
| } | |||
| default: | |||
| return 0; | |||
| break; | |||
| } | |||
| } | |||
| void | |||
| Region::draw ( void ) | |||
| { | |||
| draw_box(); | |||
| Waveform::draw(); | |||
| draw_label(); | |||
| } | |||
| @@ -0,0 +1,32 @@ | |||
| /*******************************************************************************/ | |||
| /* Copyright (C) 2008 Jonathan Moore Liles */ | |||
| /* */ | |||
| /* This program is free software; you can redistribute it and/or modify it */ | |||
| /* under the terms of the GNU General Public License as published by the */ | |||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||
| /* option) any later version. */ | |||
| /* */ | |||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||
| /* more details. */ | |||
| /* */ | |||
| /* You should have received a copy of the GNU General Public License along */ | |||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| #include "Waveform.H" | |||
| class Region : public Waveform | |||
| { | |||
| public: | |||
| Region ( int X, int Y, int W, int H, const char *L ); | |||
| int handle ( int m ); | |||
| void draw ( void ); | |||
| }; | |||
| @@ -93,10 +93,19 @@ Waveform::handle ( int m ) | |||
| return 0; | |||
| } | |||
| int measure = 50; | |||
| void | |||
| Waveform::draw ( void ) | |||
| { | |||
| draw_box( FL_PLASTIC_UP_BOX, x(), y(), w(), h(), color() ); | |||
| // draw_box( FL_PLASTIC_UP_BOX, x(), y(), w(), h(), color() ); | |||
| /* fl_color( fl_lighter( color() ) ); */ | |||
| /* for ( int nx = x(); nx < x() + w(); ++nx ) */ | |||
| /* if ( ! (nx % measure) ) */ | |||
| /* fl_line( nx, y(), nx, y() + h() ); */ | |||
| int X, Y, W, H; | |||
| @@ -118,17 +127,18 @@ Waveform::draw ( int X, int Y, int W, int H ) | |||
| float _scale = 1; | |||
| int start = (X - x()) * 2; | |||
| int start = (_start + (X - x())) * 2; | |||
| j = 0; | |||
| for ( int x = X; x < X + W; ++x ) | |||
| { | |||
| float lo = _peaks[ start + _start + j++ ] * _scale; | |||
| float hi = _peaks[ start + _start + j++ ] * _scale; | |||
| float lo = _peaks[ start + j++ ] * _scale; | |||
| float hi = _peaks[ start + j++ ] * _scale; | |||
| int mid = Y + (H / 2); | |||
| fl_line( x, mid + (H * lo), x, mid + (H * hi) ); | |||
| } | |||
| fl_color( fl_darker( fl_darker( selection_color() ) ) ); | |||
| @@ -138,7 +148,7 @@ Waveform::draw ( int X, int Y, int W, int H ) | |||
| j = 0; | |||
| for ( int x = X; x < X + W; ++x ) | |||
| { | |||
| float v = _peaks[ start + _start + j ] * _scale; | |||
| float v = _peaks[ start + j ] * _scale; | |||
| j += 2; | |||
| fl_vertex( x, Y + (H / 2) + ((float)H * v )); | |||
| } | |||
| @@ -150,7 +160,7 @@ Waveform::draw ( int X, int Y, int W, int H ) | |||
| j = 1; | |||
| for ( int x = X; x < X + W; ++x ) | |||
| { | |||
| float v = _peaks[ start + _start + j ] * _scale; | |||
| float v = _peaks[ start + j ] * _scale; | |||
| j += 2; | |||
| fl_vertex( x, Y + (H / 2) + ((float)H * v )); | |||
| } | |||
| @@ -17,6 +17,8 @@ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| #pragma once | |||
| #include <FL/Fl_Widget.H> | |||
| #include <FL/fl_draw.H> | |||
| @@ -24,6 +26,7 @@ typedef unsigned long tick_t; | |||
| class Waveform : public Fl_Widget | |||
| { | |||
| protected: | |||
| float *_peaks; | |||
| tick_t _start; | |||
| @@ -21,8 +21,11 @@ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Scroll.H> | |||
| #include <FL/Fl_Pack.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include "Waveform.H" | |||
| #include "Region.H" | |||
| #include <stdio.h> | |||
| #include <unistd.h> | |||
| @@ -49,7 +52,12 @@ main ( int argc, char **argv ) | |||
| Fl_Scroll *scroll = new Fl_Scroll( 0, 0, 800, 600 ); | |||
| Waveform *wave = new Waveform( 0, 0, 5000, 100, "foo" ); | |||
| Fl_Group *pack = new Fl_Group( 0, 0, 5000, 600 ); | |||
| // pack->type( Fl_Pack::VERTICAL ); | |||
| pack->box( FL_DOWN_BOX ); | |||
| Region *wave = new Region( 0, 0, 5000, 100, "foo" ); | |||
| FILE *fp; | |||
| @@ -80,6 +88,9 @@ main ( int argc, char **argv ) | |||
| wave->selection_color( FL_GREEN ); | |||
| pack->add( wave ); | |||
| pack->end(); | |||
| scroll->end(); | |||
| main_window->end(); | |||