X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ffft_graph.h;h=f5be5c62c4fc3bba8df503fb3b34d209dadf5886;hb=720292696a94c96d764e74b5e84fce09a1b3621c;hp=bbf777474199fd92503a5b72aac54f1fca2da3f2;hpb=997e4b1f9cd7ccfc704b7c035051da7f60d831e7;p=ardour.git diff --git a/gtk2_ardour/fft_graph.h b/gtk2_ardour/fft_graph.h index bbf7774741..f5be5c62c4 100644 --- a/gtk2_ardour/fft_graph.h +++ b/gtk2_ardour/fft_graph.h @@ -1,5 +1,6 @@ /* Copyright (C) 2006 Paul Davis + Author: Sampo Savoleinen 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 @@ -20,7 +21,7 @@ #ifndef __ardour_fft_graph_h #define __ardour_fft_graph_h -#include +#include "ardour/types.h" #include #include @@ -37,62 +38,77 @@ class AnalysisWindow; class FFTGraph : public Gtk::DrawingArea { - public: - - FFTGraph(int windowSize); - ~FFTGraph(); - - void set_analysis_window(AnalysisWindow *a_window); - - int windowSize() const { return _windowSize; } - void setWindowSize(int windowSize); - - void redraw(); - bool on_expose_event (GdkEventExpose* event); - - void on_size_request(Gtk::Requisition* requisition); - void on_size_allocate(Gtk::Allocation & alloc); - FFTResult *prepareResult(Gdk::Color color, std::string trackname); - - const void set_show_minmax (bool v) { _show_minmax = v; redraw(); }; - const void set_show_normalized (bool v) { _show_normalized = v; redraw(); }; - - private: - - void update_size(); - - void setWindowSize_internal(int windowSize); - - void draw_scales(Glib::RefPtr window); - - static const int minScaleWidth = 512; - static const int minScaleHeight = 420; - - int currentScaleWidth; - int currentScaleHeight; - - static const int h_margin = 20; - static const int v_margin = 20; - Glib::RefPtr graph_gc; - - int width; - int height; - - int _windowSize; - int _dataSize; - - Glib::RefPtr layout; - AnalysisWindow *_a_window; - - fftwf_plan _plan; - - float *_out; - float *_in; - float *_hanning; - int *_logScale; - - bool _show_minmax; - bool _show_normalized; +public: + + FFTGraph (int windowSize); + ~FFTGraph (); + + void set_analysis_window (AnalysisWindow *a_window); + + int windowSize () const { return _windowSize; } + void setWindowSize (int windowSize); + + void redraw (); + bool on_expose_event (GdkEventExpose* event); + bool on_motion_notify_event (GdkEventMotion*); + bool on_leave_notify_event (GdkEventCrossing*); + bool on_button_press_event (GdkEventButton*) { return true; } + + void on_size_request (Gtk::Requisition* requisition); + void on_size_allocate (Gtk::Allocation & alloc); + FFTResult *prepareResult (Gdk::Color color, std::string trackname); + + void set_show_minmax (bool v) { _show_minmax = v; redraw (); } + void set_show_normalized (bool v) { _show_normalized = v; redraw (); } + void set_show_proportioanl(bool v) { _show_proportional = v; redraw (); } + +private: + + void update_size (); + + void setWindowSize_internal (int windowSize); + + int draw_scales (cairo_t*); + + static const int minScaleWidth = 512; + static const int minScaleHeight = 420; + + static const int hl_margin = 40; // this should scale with font (dBFS labels) + static const int hr_margin = 12; + static const int v_margin = 12; + + int currentScaleWidth; + + int width; + int height; + + int _yoff; + int _ann_x; + int _ann_y; + cairo_rectangle_t _ann_area; + + unsigned int _windowSize; + unsigned int _dataSize; + + Glib::RefPtr layout; + cairo_surface_t* _surface; + + AnalysisWindow *_a_window; + + fftwf_plan _plan; + + float* _out; + float* _in; + float* _hanning; + int* _logScale; + + bool _show_minmax; + bool _show_normalized; + bool _show_proportional; + + float _fft_start; + float _fft_end; + float _fft_log_base; friend class FFTResult; };