From 24b23a1d9f9061f15acfe89a0e0813c5ba8ff3f2 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Mon, 13 May 2013 02:43:44 +0100 Subject: [PATCH] -Updated GUI, now dynamically creates GTrack's --- src/avtk/avtk_background.h | 167 ++++++++++++++++++++++++++++++++++++ src/avtk/avtk_button.h | 30 ++++++- src/avtk/avtk_dial.h | 168 +++++++++++++++++++++++++++++++++++++ src/avtk/avtk_image.h | 137 ++++++++++++++++++++++++++++++ src/gtrack.hxx | 37 ++++++-- src/gui.cxx | 27 ++++-- src/gui.hxx | 11 ++- src/resources/header.png | Bin 0 -> 18823 bytes 8 files changed, 558 insertions(+), 19 deletions(-) create mode 100644 src/avtk/avtk_background.h create mode 100644 src/avtk/avtk_dial.h create mode 100644 src/avtk/avtk_image.h create mode 100644 src/resources/header.png diff --git a/src/avtk/avtk_background.h b/src/avtk/avtk_background.h new file mode 100644 index 0000000..bc0593d --- /dev/null +++ b/src/avtk/avtk_background.h @@ -0,0 +1,167 @@ +/* + * Author: Harry van Haaren 2013 + * harryhaaren@gmail.com + * + * 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; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + */ + + +#ifndef AVTK_BACKGROUND_H +#define AVTK_BACKGROUND_H + + +#include +#include +#include + +namespace Avtk +{ + +class Background : public Fl_Widget +{ + public: + Background(int _x, int _y, int _w, int _h, const char *_label): + Fl_Widget(_x, _y, _w, _h, _label) + { + x = _x; + y = _y; + w = _w; + h = _h; + + label = _label; + + highlight = false; + } + bool highlight; + int x, y, w, h; + const char* label; + + void draw() + { + if (damage() & FL_DAMAGE_ALL) + { + cairo_t *cr = Fl::cairo_cc(); + + cairo_save( cr ); + + cairo_set_line_width(cr, 1.5); + + + // fill background + cairo_rectangle( cr, x, y, w, h); + cairo_set_source_rgba( cr, 66 / 255.f, 66 / 255.f , 66 / 255.f , 1 ); + cairo_fill( cr ); + + + // set up dashed lines, 1 px off, 1 px on + double dashes[1]; + dashes[0] = 2.0; + + cairo_set_dash ( cr, dashes, 1, 0.0); + cairo_set_line_width( cr, 1.0); + + // loop over each 2nd line, drawing dots + for ( int i = x; i < x + w; i += 4 ) + { + cairo_move_to( cr, i, y ); + cairo_line_to( cr, i, y + h ); + } + + cairo_set_source_rgba( cr, 28 / 255.f, 28 / 255.f , 28 / 255.f , 0.5 ); + cairo_stroke(cr); + cairo_set_dash ( cr, dashes, 0, 0.0); + + + // draw header + // backing + cairo_rectangle(cr, x, y, w, 20); + cairo_set_source_rgb( cr, 28 / 255.f, 28 / 255.f , 28 / 255.f ); + cairo_fill( cr ); + + // text + cairo_move_to( cr, x + 10, y + 14 ); + cairo_set_source_rgba( cr, 0 / 255.f, 153 / 255.f , 255 / 255.f , 1 ); + cairo_set_font_size( cr, 10 ); + cairo_show_text( cr, label ); + + // lower stripe + cairo_move_to( cr, x , y + 20 ); + cairo_line_to( cr, x + w, y + 20 ); + cairo_stroke( cr ); + + + // stroke rim + cairo_rectangle(cr, x, y, w, h); + cairo_set_source_rgba( cr, 0 / 255.f, 153 / 255.f , 255 / 255.f , 1 ); + cairo_stroke( cr ); + + + cairo_restore( cr ); + } + } + + void resize(int X, int Y, int W, int H) + { + Fl_Widget::resize(X,Y,W,H); + x = X; + y = Y; + w = W; + h = H; + redraw(); + } + + int handle(int event) + { + return 0; + + switch(event) + { + case FL_PUSH: + highlight = 0; + redraw(); + return 1; + case FL_DRAG: { + int t = Fl::event_inside(this); + if (t != highlight) { + redraw(); + } + } + return 1; + case FL_RELEASE: + if (highlight) { + highlight = 0; + redraw(); + do_callback(); + } + return 1; + case FL_SHORTCUT: + if ( test_shortcut() ) + { + do_callback(); + return 1; + } + return 0; + default: + return Fl_Widget::handle(event); + } + } +}; + +} // Avtk + +#endif // AVTK_BACKGROUND_H + diff --git a/src/avtk/avtk_button.h b/src/avtk/avtk_button.h index f45b106..18f2bb7 100644 --- a/src/avtk/avtk_button.h +++ b/src/avtk/avtk_button.h @@ -1,13 +1,37 @@ +/* + * Author: Harry van Haaren 2013 + * harryhaaren@gmail.com + * + * 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; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + */ + #ifndef AVTK_BUTTON_H #define AVTK_BUTTON_H #include -class AvtkButton : public Fl_Button +namespace Avtk +{ + +class Button : public Fl_Button { public: - AvtkButton(int _x, int _y, int _w, int _h, const char *_label=0): + Button(int _x, int _y, int _w, int _h, const char *_label): Fl_Button(_x, _y, _w, _h, _label) { x = _x; @@ -112,5 +136,7 @@ class AvtkButton : public Fl_Button } }; +} // Avtk + #endif // AVTK_BUTTON_H diff --git a/src/avtk/avtk_dial.h b/src/avtk/avtk_dial.h new file mode 100644 index 0000000..985a607 --- /dev/null +++ b/src/avtk/avtk_dial.h @@ -0,0 +1,168 @@ +/* + * Author: Harry van Haaren 2013 + * harryhaaren@gmail.com + * + * 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; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + */ + + +#ifndef AVTK_DIAL_H +#define AVTK_DIAL_H + +#include +#include + +namespace Avtk +{ + +class Dial : public Fl_Slider +{ + public: + Dial(int _x, int _y, int _w, int _h, const char* _label=0): + Fl_Slider(_x, _y, _w, _h, _label) + { + x = _x; + y = _y; + w = _w; + h = _h; + + // * 0.9 for line width to remain inside redraw area + if ( w > h ) + radius = (h / 2.f)*0.9; + else + radius = (w / 2.f)*0.9; + + lineWidth = 1.4 + radius / 12.f; + + mouseClickedY = 0; + mouseClicked = false; + + highlight = false; + label = _label; + } + + bool highlight; + int x, y, w, h; + const char* label; + + float radius; + float lineWidth; + + int mouseClickedY; + bool mouseClicked; + + void draw() + { + if (damage() & FL_DAMAGE_ALL) + { + draw_label(); + + cairo_t *cr = Fl::cairo_cc(); + + cairo_save( cr ); + + cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); + cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); + + cairo_set_line_width(cr, lineWidth-0.2); + cairo_move_to( cr, x+w/2,y+h/2); + cairo_line_to( cr, x+w/2,y+h/2); + cairo_set_source_rgba(cr, 0.1, 0.1, 0.1, 0 ); + cairo_stroke(cr); + + cairo_arc(cr, x+w/2,y+h/2, radius, 2.46, 0.75 ); + cairo_set_source_rgb(cr, 0.1, 0.1, 0.1 ); + cairo_stroke(cr); + + float angle = 2.46 + ( 4.54 * value() ); + cairo_set_line_width(cr, lineWidth); + cairo_arc(cr, x+w/2,y+h/2, radius, 2.46, angle ); + cairo_line_to(cr, x+w/2,y+h/2); + cairo_set_source_rgba(cr, 1.0, 0.48, 0, 0.8); + cairo_stroke(cr); + + cairo_restore( cr ); + + + } + } + + void resize(int X, int Y, int W, int H) + { + Fl_Slider::resize(X,Y,W,H); + x = X; + y = Y; + w = W; + h = H; + redraw(); + } + + int handle(int event) + { + //cout << "handle event type = " << event << " value = " << value() << endl; + + //Fl_Slider::handle( event ); + + switch(event) { + case FL_PUSH: + highlight = 1; + redraw(); + return 1; + case FL_DRAG: + { + if ( Fl::event_state(FL_BUTTON1) ) + { + if ( mouseClicked == false ) // catch the "click" event + { + mouseClickedY = Fl::event_y(); + mouseClicked = true; + } + + float deltaY = mouseClickedY - Fl::event_y(); + + float val = value(); + val += deltaY / 100.f; + + if ( val > 1.0 ) val = 1.0; + if ( val < 0.0 ) val = 0.0; + + set_value( val ); + + mouseClickedY = Fl::event_y(); + redraw(); + do_callback(); // makes FLTK call "extra" code entered in FLUID + } + } + return 1; + case FL_RELEASE: + if (highlight) { + highlight = 0; + redraw(); + // never do anything after a callback, as the callback + // may delete the widget! + } + mouseClicked = false; + return 1; + default: + return Fl_Widget::handle(event); + } + } +}; + +} // Avtk + +#endif // AVTK_DIAL_H diff --git a/src/avtk/avtk_image.h b/src/avtk/avtk_image.h new file mode 100644 index 0000000..c343c68 --- /dev/null +++ b/src/avtk/avtk_image.h @@ -0,0 +1,137 @@ +/* + * Author: Harry van Haaren 2013 + * harryhaaren@gmail.com + * + * 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; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + */ + + +#ifndef AVTK_IMAGE_H +#define AVTK_IMAGE_H + +#include +#include +#include +#include +#include + +using namespace std; + +namespace Avtk +{ + +class Image : public Fl_Widget +{ + public: + Image(int _x, int _y, int _w, int _h, const char *_label=0 ): + Fl_Widget(_x, _y, _w, _h, _label) + { + x = _x; + y = _y; + w = _w; + h = _h; + + label = _label; + + imageSurf = 0; + + if ( _label ) + { + //cout << "creating image from label" << endl; + imageSurf = cairo_image_surface_create_from_png( label ); + } + } + + int x, y, w, h; + const char* label; + + cairo_surface_t* imageSurf; + + void draw() + { + if (damage() & FL_DAMAGE_ALL) + { + cairo_t *cr = Fl::cairo_cc(); + + //cairo_save(cr); + + if ( imageSurf == 0 ) + { + // draw X + cairo_move_to( cr, x , y ); + cairo_line_to( cr, x + w, y + h ); + cairo_move_to( cr, x , y + h ); + cairo_line_to( cr, x + w, y ); + cairo_set_source_rgb ( cr, 0.2,0.2,0.2); + cairo_stroke(cr); + + // draw text + cairo_move_to( cr, x + (w/2.f) - 65, y + (h/2.f) + 10 ); + cairo_set_source_rgb ( cr, 0.6,0.6,0.6); + cairo_set_font_size( cr, 20 ); + cairo_show_text( cr, "Image not loaded" ); + + return; + } + + // draw the image to the context + cairo_set_source_surface(cr, imageSurf, x, y); + //cairo_rectangle( cr, x, y, w, h ); + cairo_paint(cr); + + //cairo_restore(cr); + } + } + + void resize(int X, int Y, int W, int H) + { + Fl_Widget::resize(X,Y,W,H); + x = X; + y = Y; + w = W; + h = H; + redraw(); + } + + int handle(int event) + { + switch(event) + { + case FL_PUSH: + do_callback(); + return 1; + case FL_DRAG: + return 1; + case FL_RELEASE: + return 1; + case FL_SHORTCUT: + if ( test_shortcut() ) + { + do_callback(); + return 1; + } + return 0; + default: + return Fl_Widget::handle(event); + } + } +}; + +} // Avtk + +#endif + diff --git a/src/gtrack.hxx b/src/gtrack.hxx index 7745317..2db2e39 100644 --- a/src/gtrack.hxx +++ b/src/gtrack.hxx @@ -6,26 +6,47 @@ #include #include +#include "avtk/avtk_dial.h" #include "avtk/avtk_button.h" +#include "avtk/avtk_background.h" class GTrack : public Fl_Group { public: - GTrack(int x, int y, int w, int h ) : + GTrack(int x, int y, int w, int h, const char* l = 0 ) : Fl_Group(x, y, w, h), - button(x + 5, y + 5, 100, 20,"Quit"), - button2(x + 5, y + 25, 100, 20,"2"), - button3(x + 5, y + 45, 100, 20,"3") - //slider(x, y + 50, w, 20) + bg( x, y , w, h, strdup(l) ), + + button1(x + 5, y + 24, 18, 18,"1"), + button2(x + 5, y + 44, 18, 18,"2"), + button3(x + 5, y + 64, 18, 18,"3"), + button4(x + 5, y + 84, 18, 18,"4"), + button5(x + 5, y +104, 18, 18,"5"), + button6(x + 5, y +124, 18, 18,"6"), + + dial1(x+15, y +155, 24, 24, "A"), + dial2(x+45, y +155, 24, 24, "B"), + dial3(x+75, y +155, 24, 24, "C") { end(); // close the group } private: - AvtkButton button; - AvtkButton button2; - AvtkButton button3; + Avtk::Background bg; + + Avtk::Button button1; + Avtk::Button button2; + Avtk::Button button3; + Avtk::Button button4; + Avtk::Button button5; + Avtk::Button button6; + + Avtk::Dial dial1; + Avtk::Dial dial2; + Avtk::Dial dial3; + + static int privateID; }; #endif // LUPPP_G_TRACK_H diff --git a/src/gui.cxx b/src/gui.cxx index d98517b..a212e14 100644 --- a/src/gui.cxx +++ b/src/gui.cxx @@ -1,18 +1,35 @@ - #include "gui.hxx" +#include "avtk/avtk_image.h" + +#include + +// Hack, move to gtrack.cpp +int GTrack::privateID = 0; + +using namespace std; Gui::Gui() { - window = new Fl_Window(640,280); + window = new Fl_Double_Window(600,280); window->color(FL_BLACK); + window->label("Luppp 5"); + + + Avtk::Image* header = new Avtk::Image(0,0,600,36,"header.png"); + + /* box = new Fl_Box(5, 5, 200, 60, "Luppp 5"); box->box(FL_UP_BOX); box->labelsize(36); box->labeltype(FL_SHADOW_LABEL); - - track = new GTrack(5,80,200,200); - track2 = new GTrack(120,80,200,200); + */ + for (int i = 0; i < 5; i++ ) + { + stringstream s; + s << "Track " << i+1; + tracks.push_back( new GTrack(8 + i * 118, 40, 110, 230, s.str().c_str() ) ); + } window->end(); } diff --git a/src/gui.hxx b/src/gui.hxx index 16dad6d..a061774 100644 --- a/src/gui.hxx +++ b/src/gui.hxx @@ -3,11 +3,15 @@ #define LUPPP_GUI #include -#include +#include #include #include "gtrack.hxx" +#include + +using namespace std; + class Gui { public: @@ -15,10 +19,9 @@ class Gui int show(); private: - Fl_Window* window; + Fl_Double_Window* window; Fl_Box* box; - GTrack* track; - GTrack* track2; + vector tracks; }; #endif // LUPPP_GUI diff --git a/src/resources/header.png b/src/resources/header.png new file mode 100644 index 0000000000000000000000000000000000000000..85ba4bbbc48926f6c82806d3efda2b8c5aa0b707 GIT binary patch literal 18823 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 z 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 literal 0 HcmV?d00001