| @@ -4,10 +4,10 @@ CXXFLAGS=-ggdb | |||||
| LIBS=`fltk-config --ldflags` | LIBS=`fltk-config --ldflags` | ||||
| # CXXFLAGS=`fltk-config -cxxflags` | # CXXFLAGS=`fltk-config -cxxflags` | ||||
| OBJS=Waveform.o main.o | |||||
| OBJS=Waveform.o Region.o main.o | |||||
| .C.o: | .C.o: | ||||
| $(CXX) $(CXXFLAGS) -c $< -o $@ | $(CXX) $(CXXFLAGS) -c $< -o $@ | ||||
| test: Waveform.o main.o | |||||
| test: $(OBJS) | |||||
| $(CXX) $(CXXFLAGS) $(LIBS) $(OBJS) -o $@ | $(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; | return 0; | ||||
| } | } | ||||
| int measure = 50; | |||||
| void | void | ||||
| Waveform::draw ( 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; | int X, Y, W, H; | ||||
| @@ -118,17 +127,18 @@ Waveform::draw ( int X, int Y, int W, int H ) | |||||
| float _scale = 1; | float _scale = 1; | ||||
| int start = (X - x()) * 2; | |||||
| int start = (_start + (X - x())) * 2; | |||||
| j = 0; | j = 0; | ||||
| for ( int x = X; x < X + W; ++x ) | 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); | int mid = Y + (H / 2); | ||||
| fl_line( x, mid + (H * lo), x, mid + (H * hi) ); | fl_line( x, mid + (H * lo), x, mid + (H * hi) ); | ||||
| } | } | ||||
| fl_color( fl_darker( fl_darker( selection_color() ) ) ); | fl_color( fl_darker( fl_darker( selection_color() ) ) ); | ||||
| @@ -138,7 +148,7 @@ Waveform::draw ( int X, int Y, int W, int H ) | |||||
| j = 0; | j = 0; | ||||
| for ( int x = X; x < X + W; ++x ) | for ( int x = X; x < X + W; ++x ) | ||||
| { | { | ||||
| float v = _peaks[ start + _start + j ] * _scale; | |||||
| float v = _peaks[ start + j ] * _scale; | |||||
| j += 2; | j += 2; | ||||
| fl_vertex( x, Y + (H / 2) + ((float)H * v )); | 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; | j = 1; | ||||
| for ( int x = X; x < X + W; ++x ) | for ( int x = X; x < X + W; ++x ) | ||||
| { | { | ||||
| float v = _peaks[ start + _start + j ] * _scale; | |||||
| float v = _peaks[ start + j ] * _scale; | |||||
| j += 2; | j += 2; | ||||
| fl_vertex( x, Y + (H / 2) + ((float)H * v )); | 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. */ | /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||||
| /*******************************************************************************/ | /*******************************************************************************/ | ||||
| #pragma once | |||||
| #include <FL/Fl_Widget.H> | #include <FL/Fl_Widget.H> | ||||
| #include <FL/fl_draw.H> | #include <FL/fl_draw.H> | ||||
| @@ -24,6 +26,7 @@ typedef unsigned long tick_t; | |||||
| class Waveform : public Fl_Widget | class Waveform : public Fl_Widget | ||||
| { | { | ||||
| protected: | |||||
| float *_peaks; | float *_peaks; | ||||
| tick_t _start; | tick_t _start; | ||||
| @@ -21,8 +21,11 @@ | |||||
| #include <FL/Fl.H> | #include <FL/Fl.H> | ||||
| #include <FL/Fl_Window.H> | #include <FL/Fl_Window.H> | ||||
| #include <FL/Fl_Scroll.H> | #include <FL/Fl_Scroll.H> | ||||
| #include <FL/Fl_Pack.H> | |||||
| #include <FL/Fl_Group.H> | |||||
| #include "Waveform.H" | #include "Waveform.H" | ||||
| #include "Region.H" | |||||
| #include <stdio.h> | #include <stdio.h> | ||||
| #include <unistd.h> | #include <unistd.h> | ||||
| @@ -49,7 +52,12 @@ main ( int argc, char **argv ) | |||||
| Fl_Scroll *scroll = new Fl_Scroll( 0, 0, 800, 600 ); | 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; | FILE *fp; | ||||
| @@ -80,6 +88,9 @@ main ( int argc, char **argv ) | |||||
| wave->selection_color( FL_GREEN ); | wave->selection_color( FL_GREEN ); | ||||
| pack->add( wave ); | |||||
| pack->end(); | |||||
| scroll->end(); | scroll->end(); | ||||
| main_window->end(); | main_window->end(); | ||||